如何将null命名空间映射到特定包?

时间:2015-12-06 19:17:56

标签: maven jaxb xml-namespaces xjc

我正在尝试使用org.jvnet.jaxb2.maven2:maven-jaxb2-plugin编译一堆XSD。

我将名称空间映射到这样的包。

<jaxb:bindings namespace="urn:some:a" schemaLocation="../xsd/a.xsd">
    <jaxb:schemaBindings>
      <jaxb:package name="some.a"/>
    </jaxb:schemaBindings>
  </jaxb:bindings>
<jaxb:bindings namespace="urn:some:b" schemaLocation="../xsd/b.xsd">
  <jaxb:schemaBindings>
    <jaxb:package name="some.b"/>
  </jaxb:schemaBindings>
</jaxb:bindings>

问题是c.xsd不在任何命名空间中。它实际上编译成generated包。

我很狂热,

<jaxb:bindings namespace="" schemaLocation="../xsd/c.xsd">
  <jaxb:schemaBindings>
    <jaxb:package name="some"/>
  </jaxb:schemaBindings>
</jaxb:bindings>

它不起作用。

我该怎么做?

<小时/> 的更新

Woo,xjc工具doc说...

  

如果未声明targetNamespace,则使用名为generated的硬编码包。

1 个答案:

答案 0 :(得分:2)

  

Woo,xjc工具doc说...

     
    

如果未声明targetNamespace,则使用名为generated的硬编码包。

  

仅在未使用jaxb:package进行自定义时,请参阅com.sun.tools.xjc.reader.xmlschema.ClassSelector

实际上,以下自定义应该有效:

<jaxb:bindings schemaLocation="../xsd/c.xsd">
  <jaxb:schemaBindings>
    <jaxb:package name="some"/>
  </jaxb:schemaBindings>
</jaxb:bindings>

namespace上不需要jaxb:bindings

这是test project demonstrates exactly that

免责声明:我是maven-jaxb2-plugin的作者。