我有一个 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?
最佳答案
生成的ObjectFactory
类上可能有多个方法。与嵌套元素对应的方法名称中内置有完整的路径。
关于wcf - 为什么 JAXB 为我的 WCF 服务生成错误的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222009/