解決方法がわからない問題に遭遇しました。Web サービスへの xml リクエストを行うことになっている php で SOAP クライアントを作成しました。
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>**soapenv:VersionMismatch**</faultcode>
<faultstring>**Transport level information does not match with SOAP Message namespace URI**</faultstring>
<detail></detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
現在、クライアントとサービスの両方がバージョン 1.2 の SOAP で動作しています。問題はクライアントにあると思われるため、ここに定義した方法を示します。
$options = array(
'trace' => true,
'exceptions' => 1,
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL,
'soap_version' => SOAP_1_2,
);
$client = new SoapClient("location_of_the_wsdl", $options);
リクエストでは、次のコードを使用しています。
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header/>
<env:Body>
<ns2:FunctionName xmlns:ns2="namespace_of_the_service">
<arg0>
<data1>?</data1>
</arg0>
</ns2:FunctionName>
</env:Body>
</env:Envelope>
soapUI では、data1 に ? が残っているため、「false」の結果が返されます。有効なデータを書き込むと、true が返されます。
また、soapUI で Content-type を送受信していることにも気付きましたapplication/soap+xml
が、PHP クライアントを介して送信しているときは、 Content-Type でヘッダーを送受信していますtext/xml
。
何が問題なのですか?私nusoap.php
はクライアントに使用します。