Java JAXB将具有相同命名空间的多个文件绑定到同一个包

Java JAXB将具有相同命名空间的多个文件绑定到同一个包,java,binding,jaxb,package,maven-jaxb2-plugin,Java,Binding,Jaxb,Package,Maven Jaxb2 Plugin,我的架构层次结构如下: common |---legacy | |---legacy.xsd xmlns="http://common/legacy" | |---other.xsd xmlns="http://common/legacy" | '---....xsd xmlns="http://common/legacy" |---send |---file.xsd xmlns="http://common

我的架构层次结构如下:

common
   |---legacy
   |      |---legacy.xsd xmlns="http://common/legacy"
   |      |---other.xsd  xmlns="http://common/legacy"
   |      '---....xsd    xmlns="http://common/legacy"
   |---send
          |---file.xsd xmlns="http://common/send"
          '---text.xsd xmlns="http://common/send"
          '---....xsd  xmlns="http://common/send"
一个文件夹中的所有文件都具有相同的命名空间

现在我想将名称空间映射到特定的java包(我不能更改名称空间)

我找到了将模式绑定到包的解决方案。但是我必须为每个xsd文件创建一个条目:

<jaxb:bindings schemaLocation="./common/legacy/legacy.xsd">
    <jaxb:schemaBindings>
        <jaxb:package name="com.company/legacy"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="./common/legacy/other.xsd">
    <jaxb:schemaBindings>
        <jaxb:package name="com.company/legacy"/>
    </jaxb:schemaBindings>
</jaxb:bindings>
.....

.....
有没有一种方法可以直接定义名称空间和包名称之间的绑定

另一种方法是在maven中定义包:

<plugin>
 <groupId>org.jvnet.jaxb2.maven2</groupId>
 <artifactId>maven-jaxb2-plugin</artifactId>
 <configuration>
  <generatePackage>com.company/legacy</generatePackage>
 </configuration>
</plugin>

org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
com.company/legacy

但是我必须为每个文件夹创建一个执行,这并不是我真正想要的。

免责声明:我是的作者

XJC从名称空间派生包,因此(通常)不能为一个名称空间生成多个包。使用
jaxb:class/@ref
有一些技巧,但您不需要这些技巧,因为这可能会导致各种冲突

因此,我的建议是定义多个执行,在同一名称空间中每个不同的模式一个执行。您可以使用
generatePackage
,尽管我通常建议在绑定中定义包映射

在执行多个执行时,确保每次执行都使用distinct
generateDirectory


顺便问一下,为什么您不喜欢使用多个绑定?

您可以试试。/common/legacy/*.xsdI的问题是,我不希望每个文件都有一个绑定,这对于>10个文件来说是一个无用的复制粘贴。当一个新文件被添加到文件夹中但未在绑定中处理时,它也会生成一个可能的错误源。@Seega Legacy会让您痛苦,抱歉。多次执行加上每次执行一个绑定是我个人要做的。好吧,你会在绑定中写什么?@Seega使用
jaxb:schemaBindings/jaxb:package
@lexicore每次执行一个绑定文件,使用这种方法,如何防止为每个包生成导入的(通用)XSD?