为什么JAXB为我的WCF服务生成错误的XML?

时间:2012-08-31 20:22:01

标签: wcf xsd jaxb xml-serialization

我有一个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>获得的objectFactoryQName设置为"ArrayOfStuff",最终会被使用而不是属性名称myStuff。但就像我说的我对JAXB一无所知所以我不确定他们应该做些什么不同。

我是否可以在XSD中更改某些内容,或者我可以要求客户更改其代码,以便生成正确的XML?

1 个答案:

答案 0 :(得分:2)

生成的ObjectFactory类可能有多种方法。与嵌套元素对应的那些具有内置于方法名称中的整个路径。