2010-10-29 85 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

相關問題