2010-10-29 86 views
1

我试图解决的问题是JAXB无法在不同名称空间中处理同名父类和继承对象。在不同命名空间中处理相同元素名称的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参考模式A,实际上使用schemaA许多元素。 JAXB无法单独在B上运行,但它只能在A上运行。

最后一点,涉及很多很多元素,无法将JAXB自定义添加到它们中的所有元素。那么这将是很多工作。

+0

你的问题还不清楚。这个主题中的“元素名称”是指什么?什么是实际问题? – skaffman 2010-11-04 12:36:14

回答

0

有趣的是,JAXB问题几乎没有得到任何回应。

@jamh

我假设你想运行XJC产生了第三方模式(S)Java存根。你有没有试过为每个命名空间指定一个不同的包名?这可以在自定义绑定文件或使用-p参数在命令行上做...

XJC -p com.your.package.name /路径/到/ XSD

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

相关问题