定义包时,为目标命名空间定义了多个<schemabindings>

时间:2015-12-09 11:05:27

标签: java xsd jaxb jaxb2 maven-jaxb2-plugin

我的项目中有3个XSD。命名空间中的两个&#34; A&#34;一个在命名空间&#34; B&#34;。

我想在一个包中生成XSD-1,XSD-2(相同的命名空间)。 然后将XSD-3生成到不同的包中。

我试图通过bindings.xjb文件来做到这一点。

如果我宣布

<jxb:bindings schemaLocation="xsd1-namespaceA.xsd">
    <jxb:schemaBindings>
        <jxb:package name="com.xsdPrimary" />       
    </jxb:schemaBindings>
</jxb:bindings>

<jxb:bindings schemaLocation="xsd2-namespaceA.xsd">
    <jxb:schemaBindings>
        <jxb:package name="com.xsdPrimary" />               
    </jxb:schemaBindings>
</jxb:bindings>

<jxb:bindings schemaLocation="xsd3-namespaceB.xsd">
    <jxb:schemaBindings>
        <jxb:package name="com.xsdSecondary" />             
    </jxb:schemaBindings>
</jxb:bindings>

然后我收到错误:

com.sun.istack.SAXParseException2: Multiple <schemaBindings> are defined for the target 
namespace "http://www.jeff-test.org/namespaceA/"

如果我删除绑定文件中的前两个条目,那么生成工作,但它将我的所有类放在名为&#34; jeff-test.namespaceA&#34;的包中。对于namespaceA和包中的namespaceB的所有那些&#34; com.xsdSecondary&#34;。

我想将namespace-A中的所有类放到一个包中,将所有来自namespace-B的类放到另一个包中。

这可能吗?

1 个答案:

答案 0 :(得分:3)

  
    

为目标命名空间“http://www.jeff-test.org/namespaceA/

定义了多个   
     

如果我删除绑定文件中的前两个条目,那么生成工作,但它将我的所有类放在名为“jeff-test.namespace”的包中,用于namespaceA ......

只删除namespaceA的其中一个条目。删除两者背后的逻辑是什么?

<jxb:bindings schemaLocation="xsd1-namespaceA.xsd">
    <jxb:schemaBindings>
        <jxb:package name="com.xsdPrimary" />       
    </jxb:schemaBindings>
</jxb:bindings>

<jxb:bindings schemaLocation="xsd3-namespaceB.xsd">
    <jxb:schemaBindings>
        <jxb:package name="com.xsdSecondary" />             
    </jxb:schemaBindings>
</jxb:bindings>

schemaBindings被认为是每个命名空间一次,它绑定到哪个模式文件并不重要(只要该文件是编译的一部分)。