2012-08-31 22 views
2

我有一個WCF服務,期望一個對象,我將稱之爲StuffContainer。我們的客戶正在嘗試使用JAXB生成一個XML序列化的StuffContainer,但它出錯了。他們結束了類型名稱,他們應該有屬性名稱,所以我們無法反序列化它。爲什麼JAXB爲我的WCF服務生成錯誤的XML?

我對JAXB一無所知,但我收集它會基於我們的XSD創建一些自動生成的類,它可用於構建XML序列化對象。

這是我們的自動生成的XSD的相關片段:

<xs:complexType name="StuffContainer"> 
    <xs:sequence> 
     <xs:element minOccurs="0" name="myStuff" nillable="true" type="tns:ArrayOfStuff"/> 
    </xs:sequence> 
</xs:complexType> 
... 
<xs:complexType name="ArrayOfStuff"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="Stuff" nillable="true" type="tns:Stuff"/> 
    </xs:sequence> 
</xs:complexType> 

我們客戶端的代碼看起來是這樣的:

ObjectFactory objectFactory = new ObjectFactory(); 

ArrayOfStuff arrayOfStuff = objectFactory.createArrayOfStuff(); 
JAXBElement<ArrayOfStuff> arrayOfStuffJAXBElement = objectFactory.createArrayOfStuff(arrayOfStuff); 

StuffContainer stuffContainer = objectFactory.createStuffContainer(); 
stuffContainer.setStuff(arrayOfStuffJAXBElement); 

這裏是他們得到的XML:

<StuffContainer xmlns="..."><ArrayOfStuff>...</ArrayOfStuff></StuffContainer> 

但我需要它是:

<StuffContainer xmlns="..."><myStuff>...</myStuff></StuffContainer> 

我想這是因爲他們從objectFactory得到JAXBElement<ArrayOfStuff>QName設置爲"ArrayOfStuff",而這最終得到用來代替屬性名myStuff。但就像我說的,我對JAXB一無所知,所以我不確定他們應該做什麼不同。

是否有什麼我可以在XSD中更改,或者我可以要求我們的客戶端更改其代碼,以便它生成正確的XML?

回答

2

生成的ObjectFactory類可能有多種方法。與嵌套元素對應的元素具有構建到方法名稱中的完整路徑。

+0

對於我的示例,方法名稱的外觀如何? 'ObjectFactory.createStuffContainermyStuff()'? –

+0

@TimGoodman - 類似的東西,在你的ObjectFactory中是否有類似的方法? –

+0

可能,我需要從我的客戶端獲得更完整的代碼示例。 –

相關問題