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查询路径:
- 在xsl:transform节点新增命名空间声明:
xmlns:fhir="http://hl7.org/fhir" - 修改
$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
相关产品推荐
相关产品推荐

