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?
對於我的示例,方法名稱的外觀如何? 'ObjectFactory.createStuffContainermyStuff()'? –
@TimGoodman - 類似的東西,在你的ObjectFactory中是否有類似的方法? –
可能,我需要從我的客戶端獲得更完整的代碼示例。 –