これが私のPHPです:
$url = "http://localhost:3000/api/wsdl";
$client = new SoapClient($url);
$params->a = 'a Value';
$params->b = 'another Value';
$client->AnOperation($params);
これは、soap サーバーを作成するために使用している、wash_out gem を使用した Ruby コントローラーです。
require "wash_out/soap"
class ApiController < ApplicationController
soap_service namespace: 'urn:WashOut'
soap_action "AnOperation",
:args => { :a => :string, :b => :string },
:return => :string
def AnOperation
render :soap => "done"
end
before_filter :dump_parameters
def dump_parameters
logger.debug params.inspect
end
end
生成された WSDL は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:WashOut" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="api" targetNamespace="urn:WashOut">
<types>
<schema targetNamespace="urn:WashOut" xmlns="http://www.w3.org/2001/XMLSchema">
</schema>
</types>
<portType name="api_port">
<operation name="AnOperation">
<input message="tns:AnOperation"/>
<output message="tns:AnOperation_response"/>
</operation>
</portType>
<binding name="api_binding" type="tns:api_port">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="AnOperation">
<soap:operation soapAction="AnOperation"/>
<input>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:WashOut"/>
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:WashOut"/>
</output>
</operation>
</binding>
<service name="service">
<port name="api_port" binding="tns:api_binding">
<soap:address location="http://localhost:3000/api/action"/>
</port>
</service>
<message name="AnOperation">
<part name="a" type="xsd:string"/>
<part name="b" type="xsd:string"/>
</message>
<message name="AnOperation_response">
<part name="value" type="xsd:string"/>
</message>
</definitions>
PHP を実行すると、「クラス stdClass のオブジェクトを文字列に変換できませんでした」というメッセージが表示されます。