0

私はSOAPについて非常に基本的な知識を持っています。私にとって、SOAPは、異なる言語を話し、互いにコミュニケーションを図ろうとしている2人の異なる人々の翻訳者だと思います。PHP SOAP CLIENTを使用してWebサービスからメソッドを呼び出そうとしていますが、動作させることができません。以下は、Webサービスサーバーによって生成されたWSDLです。

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.webservice.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="serviceServerService" targetNamespace="http://server.webservice.com/">
<wsdl:types>
<schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.webservice.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://server.webservice.com/" schemaLocation="http://127.0.0.1:8080/WebbServiceServer/services/serviceServerPort?xsd=serviceserver_schema1.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="userInputResponse">
<wsdl:part element="tns:userInputResponse" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:message name="userInput">
<wsdl:part element="tns:userInput" name="parameters"></wsdl:part>
</wsdl:message>
<wsdl:portType name="serviceInterface">
<wsdl:operation name="userInput">
<wsdl:input message="tns:userInput" name="userInput"></wsdl:input>
<wsdl:output message="tns:userInputResponse" name="userInputResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="serviceServerServiceSoapBinding" type="tns:serviceInterface">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="userInput">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="userInput">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="userInputResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="serviceServerService">
<wsdl:port binding="tns:serviceServerServiceSoapBinding" name="serviceServerPort">
<soap:address location="http://127.0.0.1:8080/WebbServiceServer/services/serviceServerPort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

上記のWSDLから理解できるのは、呼び出そうとしているメソッドはuserInput文字列引数をとるメソッドであり、サーバーからの応答であり、返されたメソッドがuserInputResponse何であれ出力されるということです。userInput以下は、私が実行しようとしているPHPCLIENTのコードです。

<?php
$a = array("userInput" => "This is the input");
$client = new SoapClient("http://127.0.0.1:8080/WebbServiceServer/services/serviceServerPort?wsdl", array('exceptions' => 0));

$result = $client->userInput($a);
//$functions = $client->__getFunctions();
//var_dump($client->__soapCall("userInput", $a));
//var_dump($functions);

print_r($result->userInputResponse);

if (is_soap_fault($result)) {
    trigger_error("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring})", E_USER_ERROR);
}
?>

PHP CLIENTを実行しようとしましたが、残念ながらエラーが表示されます。

Notice: Undefined property: stdClass::$userInputResponse in C:\xampp\htdocs\PHP_SOAP_CLIENT\index.php on line 14

クライアントがメソッドを呼び出したかどうかをテストするために、 if何かが返された場合userInputに使用します。var_dump()

var_dump($result);

出力は次のとおりです。

object(stdClass)#2 (1) { ["return"]=> string(56) "Hi! this is from JAVA Web services, your input was: null" }

うまくいきましたが、メソッドは渡した文字列を取得しませんでした。誰かが私のコードの欠陥を特定して説明してくれることを願っています。コメントや回答をいただければ幸いです。

4

1 に答える 1

0

戻り値にアクセスしようとする試みは間違っています。userInputResponseでわかるように、プロパティはありませんvar_dump()。実際、戻り値はプロパティに格納されますreturn

これが WSDL で定義されているかどうかはわかりませんが、不完全だと思います。同様にロードされる可能性があり、さらに定義を含めることができる別の XSD への参照があります。

于 2013-03-11T21:18:50.063 に答える