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を生成するように依頼できるものはありますか?