2

StuffContainerと呼ぶオブジェクトを期待するWCFサービスがあります。私たちのクライアントは、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を生成するように依頼できるものはありますか?

4

1 に答える 1

2

ObjectFactory生成されたクラスには複数のメソッドが存在する可能性があります。ネストされた要素に対応するものには、メソッド名に組み込まれたパス全体があります。

于 2012-08-31T22:26:21.240 に答える