JAXB: 使用maven插件将命名空间映射到包

4
假设我有一个位于resources / a目录中的a.xsd文件, 并且在resources / b目录中有一个b.xsd文件。 a.xsd和b.xsd都有自己的命名空间:http://a.comhttp://b.com。 最后,a.xsd导入了b.xsd。
我想配置maven-jaxb2-plugin生成com.a包中的A.java和com.b包中的B.java。
以下是需要回答的问题:
1. 如何将来自一个命名空间的所有xsd文件绑定到一个包中,将来自另一个命名空间的所有xsd文件绑定到另一个包中。 2. 如何将两个不同的目录传递给maven-jaxb2-plugin。 多个执行对我无效。
1个回答

6

如果您单独提出这些问题会更好。

第一个问题 - 只需使用多个 jaxb:schemaBindings

<jaxb:bindings schemaLocation="a.xsd" node="/xs:schema">
    <jaxb:schemaBindings>
        <jaxb:package name="com.a"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="b.xsd" node="/xs:schema">
    <jaxb:schemaBindings>
        <jaxb:package name="com.b"/>
    </jaxb:schemaBindings>
</jaxb:bindings>

第二个问题 - 多个执行或自己进行文件移动后处理。为什么多个执行对您无效?
更新:您说您对每个命名空间而不是每个文件的解决方案感兴趣。
首先,这并不是很重要,最终它在任何情况下都是一个每个命名空间的解决方案。如果通过schemaLocation绑定,XJC将schemaBindings与该模式的目标命名空间相关联。您不必自定义该模式的每个文件,并且不能为一个命名空间定义两个包。
其次,您可以使用SCD绑定。
<jaxb:bindings scd="x-schema::tns" xmlns:tns="http://a.com">
    <jaxb:schemaBindings>
        <jaxb:package name="com.a"/>
    </jaxb:schemaBindings>
</jaxb:bindings>

你的解决方案是按文件的,而我对按命名空间的解决方案感兴趣。 - trzeci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接