【问题标题】:JAXB: mapping namespace to package with maven pluginJAXB:使用 Maven 插件将命名空间映射到包
【发布时间】:2016-10-14 13:44:41
【问题描述】:

假设我在 resources/a 目录中有一个 .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。 多次处决对我不起作用。

【问题讨论】:

    标签: maven xsd jaxb


    【解决方案1】:

    如果你把这些问题分开问会更好。

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

    【讨论】:

    • 您的解决方案是每个文件,我对每个命名空间的解决方案感兴趣。
    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多