我有2个架构:a.xsd
和b.xsd
,它们依赖a.xsd
(插曲)。
模式在不同的maven项目和包中分开。
最初,b.xsd
像这样导入a.xsd
(我不想更改它):
<import namespace="urn:a" schemaLocation="a.xsd"/>
我需要在catalog.cat
中将a.xsd
翻译为maven:com.mycompany:a:jar::!/com/mycompany/a/a.xsd
我尝试了PUBLIC,SYSTEM,URI,REWRITE_URI,REWRITE_SYSTEM,但没有任何工作。
只要在我的架构中将引用a.xsd
更改为http://.../a.xsd
并在我的目录中使用REWRITE_SYSTEM,它就会正常工作。但正如我所说,我不想修改我的架构。
答案 0 :(得分:1)
没关系,它似乎适用于SYSTEM_SUFFIX。
答案 1 :(得分:0)
请参阅Modular Schema Compilation,以
开头但如果
xs:import
中有schemaLocation,那么bug in JAXB/XJC这不起作用。
解决XJC中的模式非常错误,过去几年我没有看到任何进展。
编译模式不是来自本地路径,而是编译一些绝对URL。这不需要实际存在,可以完全虚拟。只需使用绝对URL:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<schemas>
<schema>
<url>http://schemas.opengis.net/ows/2.0/owsAll.xsd</url>
</schema>
</schemas>
<!-- ... -->
</configuration>
</plugin>
使用目录文件将绝对URL前缀重写为JAR中的某个本地路径或资源:
REWRITE_SYSTEM "http://schemas.opengis.net" "maven:org.jvnet.ogc:ogc-schemas:jar::!/ogc"
不将绑定应用于本地文件,而是通过绝对URL:
<jaxb:bindings schemaLocation="http://schemas.opengis.net/ows/2.0/owsAll.xsd" node="/xs:schema">
<jaxb:schemaBindings>
<jaxb:package name="net.opengis.ows.v_2_0"/>
</jaxb:schemaBindings>
</jaxb:bindings>
因此,您的所有URL都是绝对的(无需修补模式),因此REWRITE_SYSTEM
将按预期工作。这是我迄今为止发现的最佳选择,相信我,我编写了很多模式。
免责声明:我是maven-jaxb2-plugin的作者。