2

我有一个 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?

4

1 回答 1

2

ObjectFactory生成的类上可能有多个方法。与嵌套元素对应的元素在方法名称中内置了完整路径。

于 2012-08-31T22:26:21.240 回答