2

Webサービスを開発しようとしていますが、WSDLを生成できるYiiPHPフレームワークを使用しています。次の形式のコードを使用する、動作するPHPクライアントがあります。

<?php

$wsdlURL='someUrl';
$client = new SoapClient($wsdlURL);
$inputArray = array('a'=>'1', 'b'=>'2');

// make the actual soap call
$client->someMethod($inputArray);

これにより、次の形式のリクエストが生成されます。

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:SystemsControllerwsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://xml.apache.org/xml-soap" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <ns1:someMethod>
      <inputArray xsi:type="ns2:Map">
        <item>
          <key xsi:type="xsd:string">a</key>
          <value xsi:type="xsd:string">1</value>
        </item>
        <item>
          <key xsi:type="xsd:string">b</key>
          <value xsi:type="xsd:string">2</value>
        </item>
      </inputArrayArray>
    </ns1:someMethod>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

私は今Pythonで同じことをしようとしていて、SOAPpyを使用しています。これは難しい要件ではありません。機能しているように見えるのはSOAPライブラリだけです。( WSDLを解析するためのsudを取得できませんでした。)

いずれにせよ、私はこのpythonを持っています:

import SOAPpy


wsdlURL = 'someURL'
client = SOAPpy.WSDL.Proxy(wsdlURL)
args = {'a':'1', 'b':'2'}

soap_map = []
for key in args:
    inner = {"key":key,"value":args[key]}
    soap_map.append(inner)

wsdl.someMethod(soap_map)

リクエストは終了しましたが、代わりに次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <ns1:someMethod xmlns:ns1="urn:SystemsControllerwsdl" SOAP-ENC:root="1">
      <v1 xmlns:ns2="http://soapinterop.org/xsd" SOAP-ENC:arrayType="ns2:SOAPStruct[6]" xsi:type="SOAP-ENC:Array">
        <item>
          <value xsi:type="xsd:string">1</value>
          <key xsi:type="xsd:string">a</key>
        </item>
        <item>
          <value xsi:type="xsd:string">2</value>
          <key xsi:type="xsd:string">b</key>
        </item>
      </v1>
    </ns1:someMethod>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

このリクエストが生成される名前空間が異なるため、私のWebサービスは入力の処理方法を認識していないと思います。Python経由で送信するときに、タイプを正しい名前空間に変更できればと思いますが、SOAPpyを使用してこれを行う方法がわかりませんでした。

4

0 に答える 0