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

时间:2016-10-14 13:44:42

标签: maven xsd jaxb

假设我在资源/目录中有一个.xsd文件 资源/ 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 个答案:

答案 0 :(得分:2)

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

第一个问题 - 只需使用多个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>