当位置不是URL时,使用模块化JAXB编译(似乎)不起作用

时间:2016-03-11 12:30:09

标签: jaxb xjc maven-jaxb2-plugin

我有2个架构:a.xsdb.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,它就会正常工作。但正如我所说,我不想修改我的架构。

2 个答案:

答案 0 :(得分:1)

没关系,它似乎适用于SYSTEM_SUFFIX。

答案 1 :(得分:0)

请参阅Modular Schema Compilation,以

开头
  

但如果xs:import中有schemaLocation,那么bug in JAXB/XJC这不起作用。

解决XJC中的模式非常错误,过去几年我没有看到任何进展。

那么在number of projects中对我有用的是:

编译模式不是来自本地路径,而是编译一些绝对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的作者。