Visual Studio 2005 で WSE 3.0 をクライアントとして使用して、サード パーティの Web サービスを呼び出そうとしています。
呼び出しは正常に機能し、良好な応答が得られることがわかります (トレースが有効になっています) が、xml パーサーがそれを詰まらせているようです。私はいつも得るInvalidOperationException
:
XML ドキュメントにエラーがあります。
でInnerException
:
指定されたタイプが認識されませんでした: name='Map', namespace=' http://xml.apache.org/xml-soap ', at <bevoegdheid xmlns=''>.
これは、応答の関連部分です。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="https://acceptatie.cartalk.nl/Soap/Apk" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<SOAP-ENV:opvragenKeurmeesterGegevensResponse>
<opvragenKeurmeesterGegevensReturn xsi:type="ns2:Backend_Apk_Result_OpvragenKeurmeesterGegevens">
<naam xsi:type="xsd:string">A name</naam>
...
<bevoegdheid SOAP-ENC:arrayType="ns1:Map[2]" xsi:type="SOAP-ENC:Array">
<item xsi:type="ns1:Map">
<item>
<key xsi:type="xsd:string">soortBevoegdheid</key>
<value xsi:type="xsd:string">AL</value>
</item>
...
</item>
<item>
...
</item>
</bevoegdheid>
<meldingSoort xsi:nil="true" />
<meldingNummer xsi:nil="true" />
<melding xsi:nil="true" />
</opvragenKeurmeesterGegevensReturn>
</SOAP-ENV:opvragenKeurmeesterGegevensResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
そして、これは「bevoegdheid」がwsdlでどのように定義されているかです:
<xsd:element name="bevoegdheid" type="soap-enc:Array" />
wsdl のどこにも「Map」タイプについての言及はありません。
私はこれについてグーグルで調べてきましたが、私が見つけた唯一の種類の答えは、次のようなものです
このサービスは、相互運用性を確保するのが難しい rpc/encoded 形式を使用します。サーバーを document/literal に変更できる場合は、そのほうがよいでしょう。
しかし、これはサード パーティのサービス (他のクライアントによって既に使用されている) であるため、これは私たちの選択肢ではありません。
他の提案はありますか?その「マップ」タイプをxmlパーサーに認識させるにはどうすればよいですか?