Orbeon XForm Schema校验中子Schema相对路径导入解析失败问题问询
Orbeon 2019 Schema相对路径导入问题解决方案
问题原因说明
你遇到的是Orbeon 2019版本的已知缺陷:该版本为适配内部oxf:资源协议重写了Schema解析逻辑,处理Jar包内Schema的相对路径导入时,未实现../父级目录跳转能力,只会将导入路径直接拼接在当前Schema所在目录下,因此出现路径解析错误。普通Java项目使用的默认XML解析器对Jar内相对路径跳转做了完整实现,因此不会触发该问题。
可行解决方案
- 方法1:使用绝对路径定位(最推荐)
所有Schema导入语句的schemaLocation直接使用oxf:/开头的绝对路径,路径从Jar包根目录开始计算,不需要处理相对层级。比如公共Schema存放在Jar根目录的COMMON文件夹下时,直接写:
<import xmlns="你的命名空间URI" schemaLocation="oxf:/COMMON/childSchemaA.xsd">
该方法不需要修改Orbeon配置,修改成本最低,2019版本亲测可正常解析。
- 方法2:配置XML Catalog映射
在Orbeon的WEB-INF/resources/config/xml-catalog.xml文件中添加公共Schema的命名空间到资源路径的映射规则,示例:
<uri name="你的公共Schema命名空间URI" uri="oxf:/COMMON/childSchemaA.xsd"/>
配置完成后,Schema中的import语句可以省略schemaLocation参数,Orbeon会自动根据导入的命名空间从Catalog中匹配对应的资源路径,完全规避相对路径解析问题,适合公共Schema复用率高的场景。
- 方法3:自定义实体解析器(复杂度较高)
如果前两种方案无法满足需求,可以自行实现org.xml.sax.EntityResolver接口,自定义路径解析逻辑后注册到Orbeon的校验流程中,即可按照自己的规则处理相对路径跳转。该方法需要修改Orbeon核心配置,非必要不推荐。
内容的提问来源于stack exchange,提问作者Francis Parsons
相关产品推荐
相关产品推荐

