我有一个WCF服务,需要一个我称之为StuffContainer的对象。我们的客户端正在尝试使用JAXB生成XML序列化的StuffContainer,但它出错了。他们最终会得到类型名称,他们应该有属性名称,因此我们无法对其进行反序列化。
我对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>
我认为这是因为他们从JAXBElement<ArrayOfStuff>
获得的objectFactory
将QName
设置为"ArrayOfStuff"
,最终会被使用而不是属性名称myStuff
。但就像我说的我对JAXB一无所知所以我不确定他们应该做些什么不同。
我是否可以在XSD中更改某些内容,或者我可以要求客户更改其代码,以便生成正确的XML?
答案 0 :(得分:2)
生成的ObjectFactory
类可能有多种方法。与嵌套元素对应的那些具有内置于方法名称中的整个路径。