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

标签 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>他们从 objectFactory 获得有其QName设置为"ArrayOfStuff" ,最终会使用它而不是属性名称 myStuff 。但正如我所说,我对 JAXB 一无所知,因此我不确定他们应该采取哪些不同的做法。

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

最佳答案

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

关于wcf - 为什么 JAXB 为我的 WCF 服务生成错误的 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222009/

相关文章:

wcf - 作为网络服务连接到服务的预期身份,

c# - 在 CheckAccessCore 之后,WCF Access Denied 异常永远不会返回到客户端

java - 使用 xjc 和绑定(bind)为通用 XSD 定义包名称

java - 从/src/main/resources加载文件

java - 如何从 JAXB validator 获取错误详细信息?

spring - @XmlSeeAlso 继承

mysql - 如何分离这两个过程?

c# - 两种方式通信的服务器/客户端架构?

java - 转换 XML => JSON => 基于 XSD 模式的 XML

java - 从 XML 文档、XSLT 和 JAXB 中删除元素