我试图解决的问题是JAXB无法处理不同命名空间中同名的父对象和继承对象。
我有两个模式:
schemaA.xsd
<xs:schema xmlns:A="...">
<xs:complexType name="mytype">
...
schemaB.xsd
<xs:schema xmlns:B="..." xmlns:A="...">
<xs:import namespace="..." schemaLocation="schemaA.xsd"/>
<xs:complexType name="mytype">
...
此处mytype
定义在 schemaB 中有所不同。不,我无法控制架构,它们是大型商业第三方提供的。人们如何处理这种情况?关键是 schemaB 引用 schemaA ,并确实使用了 schemaA 中的许多元素。 JAXB无法单独在B
上运行,但它可以单独在A
上运行。
最后一点,涉及许多元素,无法为所有这些元素添加JAXB自定义。那将是很多工作。
答案 0 :(得分:0)
有趣的是,JAXB的问题几乎没有任何回应。
@jamh
我假设您正在尝试运行xjc来为第三方架构生成Java存根。您是否尝试为每个命名空间指定不同的包名?这可以在自定义绑定文件中完成,也可以在命令行中使用-p参数...
完成xjc -p com.your.package.name / path / to / xsd
答案 1 :(得分:0)
在元素声明中,您需要提供不同的propertyName:
<xs:element ref="namespace1:foo">
<xs:annotation>
<xs:appinfo>
<jaxb:property name="fooElement"/> // here you see changing the name
</xs:appinfo>
</xs:annotation>
</xs:element>
如果你有两个名为“foo”的元素,并且其中一个元素有一个声明,当其中一个元素没有时,就这样做。
您将生成(通过xjc)具有属性的对象:
Foo foo;
Foo fooElement;
所以不会有冲突。
您可以在http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBUsing4.html
上阅读有关绑定的更多信息