You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Saxon HE升级后Jboss EAP 7.3环境下无法将相对路径数据存入XSL变量

问题解决思路

1. 优先排查Jboss类加载冲突

Jboss EAP 7.3默认内置了旧版Saxon、Xalan等XML处理组件,升级Saxon 10.5后大概率出现类加载优先级异常,导致实际运行时加载了混杂的XML处理类。
在你的项目WEB-INF目录下新增jboss-deployment-structure.xml配置,排除服务器自带的XML相关模块:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="javax.xml.xpath" />
            <module name="org.apache.xalan" />
            <module name="net.sf.saxon" />
            <module name="javax.xml.transform" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

配置后重新打包部署,确认运行时加载的是你引入的Saxon 10.5版本。

2. 修正命名空间匹配规则

Saxon 10.x对xpath-default-namespace的继承规则做了调整,跨文档查询时默认命名空间可能不生效。你可以先显式声明FHIR命名空间前缀,修改XPath查询路径:

  1. 在xsl:transform节点新增命名空间声明:xmlns:fhir="http://hl7.org/fhir"
  2. 修改$ms变量的查询逻辑:
<xsl:variable name="ms" select="$medicalSystems/fhir:Bundle/fhir:entry/fhir:coming/fhir:MedicalSystem[fhir:url/@value = $this]"/>

3. 验证查询条件匹配逻辑

Saxon 10的字符串比较规则比9.7更严格,不会自动忽略首尾空白符。你可以先加调试代码确认匹配值是否一致:

  • 输出fn:count($medicalSystems//*:MedicalSystem)确认加载的XML里有对应节点
  • 输出fn:string($this)确认传入的参数值和url/@value完全一致,也可以修改匹配规则为[normalize-space(fhir:url/@value) = normalize-space($this)]规避空白符问题

4. 调整document函数加载配置

Saxon 10对document()函数的相对URI解析逻辑做了修改,Jboss环境下的基准URI和命令行环境不同。你可以显式指定基准URI,或者将medicalsystems.xml放到类路径下,用document('classpath:medicalsystems.xml')的方式加载,确保文件内容正确加载。

内容的提问来源于stack exchange,提问作者Sumit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:21:04