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

How can I map null namespace to a specific package?

我正在尝试使用 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 工具文档说...

If no targetNamespace is declared, then use a hard coded package named generated.

Woo, xjc tool doc is saying...

If no targetNamespace is declared, then use a hard coded package named 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 which demonstrates exactly that.

免责声明: 我是 maven-jaxb2-plugin.

的作者