Java 是否可以使用JAXB生成共享对象?

Java 是否可以使用JAXB生成共享对象?,java,jaxb,jaxb2,Java,Jaxb,Jaxb2,我有3个xsd文件: a、 xsd b、 xsd shared.xsd shared.xsd使用导入到a.xsd和b.xsd <xs:import schemaLocation="shared.xsd"/> shared.xsd定义 <xs:element name="item"> <xs:complexType> .... .... 如果我使用xjc生成java代码,那么a.xsd和b.xsd将生成到不同的包中,并且在每个包中为项生成一个单独

我有3个xsd文件:

  • a、 xsd
  • b、 xsd
  • shared.xsd
shared.xsd使用导入到a.xsd和b.xsd

<xs:import schemaLocation="shared.xsd"/>

shared.xsd定义

<xs:element name="item">
<xs:complexType> ....

....

如果我使用xjc生成java代码,那么a.xsd和b.xsd将生成到不同的包中,并且在每个包中为项生成一个单独的java类。如何才能为item创建一个共享类并使a和b使用它?

您可以覆盖生成的文件放入的包。这将允许两个共享对象进入同一个位置

xjc -p com.test a.xsd b.xsd shared.xsd

我认为这就是您要寻找的。

您可以覆盖生成的文件放入的包。这将允许两个共享对象进入同一个位置

xjc -p com.test a.xsd b.xsd shared.xsd

我想这就是你想要的。

要么照@Chris Dail说的做,要么把
a.xsd
b.xsd
合并到一个模式文件中,因为
JAXB
看起来是一个名称空间来创建包。

要么照@Chris Dail说的做,或者将
a.xsd
b.xsd
合并到一个模式文件中,因为
JAXB
在名称空间中寻找一个名称空间来创建包。

wow感谢它的工作。我总是执行xjc a.xsd xjc b.xsd xjc shared.xsd,这样它就不工作了。这个解决方案只有一个问题:a.xsd和b.xsd的顶层元素都被称为同一个元素(在我的例子中是“请求”),不幸的是,我无法改变这一点。在我的解决方案中,这并不是问题,因为每个xsd被编译到不同的包中,但现在同一个包中具有相同名称的两个元素发生冲突。有什么解决方案吗?@Peter Szanto,您应该能够使用绑定配置文件(.xjb文件)来解决该冲突。再次感谢您,它很有效!令人惊讶的是,总是有新的东西需要学习。为了公众的利益,我将下面的内联xjb声明添加到我的xsd中,并生成EmailauthenticationRequest.java,该声明绑定到xmlwow中的请求,感谢它的工作。我总是执行xjc a.xsd xjc b.xsd xjc shared.xsd,这样它就不工作了。这个解决方案只有一个问题:a.xsd和b.xsd的顶层元素都被称为同一个元素(在我的例子中是“请求”),不幸的是,我无法改变这一点。在我的解决方案中,这并不是问题,因为每个xsd被编译到不同的包中,但现在同一个包中具有相同名称的两个元素发生冲突。有什么解决方案吗?@Peter Szanto,您应该能够使用绑定配置文件(.xjb文件)来解决该冲突。再次感谢您,它很有效!令人惊讶的是,总是有新的东西需要学习。为了公众的利益,我将下面的内联xjb声明添加到我的xsd中,并生成EmailauthenticationRequest.java,该声明绑定到xml中的请求