私はWSDLを持っています(外部プロバイダーから入手しました)。このような行があります:
<xsd:complexType name="SalesRequest">
<xsd:all>
<xsd:element name="merchantid" type="xsd:int"/>
<xsd:element name="password" type="xsd:string"/>
...
</xsd:all>
</xsd:complexType>
...
<message name="SalesResponse">
<part name="request" type="tns:SalesResponse"/>
</message>
..
<portType name="InterfacePortType">
<operation name="Sales">
<documentation>some text</documentation>
<input message="tns:SalesRequest"/>
<output message="tns:SalesResponse"/>
</operation>
このWSDLに基づいて(JAX-RPCを使用して)Javaクラスを生成しました。
次に、Axis Serviceを作成しました(MyServiceはInterfacePortTypeを実装しています)。
XSDDファイルを準備してMyServiceをWebアプリにデプロイしました。
そこで、MySeriveのメソッドの1つを呼び出し、サーバー側での応答のシリアル化の瞬間にこのエラーが発生しました。
予期しない要素名:expected = request、actual = SalesReturn
これは、私のXSDLとXSDDが他にあまり影響を与えないことを意味します。MyServiceは、次のような応答を準備しました(ただし、ネット経由で送信しないでください)。
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
...
<SalesReturn href="#id0"/></ns1:SalesResponse><multiRef xmlns:ns2=
...
</soapenv:Envelope>
問題は、サービスからの応答XMLで「SalesReturn」の代わりに「request」を使用するためにWSDDで何をすべきかということです。
この「 Return」サフィックスがどこから来たのかわかりません。
-私がすでに行ったいくつかのステップ:
グーグルで検索したところ、WSDLには「schemaelementFormDefault="qualified"」が含まれている必要があることがわかりました。ただし、WSDLは外部プロバイダーから提供されたものであるため、変更できません。