0 レビュー
1 回答
php:SoapClientを使用してcomplexTypeシーケンスのSOAPリクエストを作成する正しい方法は何ですか?
SoapClientがどのように機能するかを理解するのに苦労しています。
wdsl
<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="[redacted]">
<s:element name="GetResult">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Foo" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Bar">
<s:complexType mixed="true">
<s:sequence>
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:complexType>
</s:element>
[..]
</s:schema>
</wsdl:types>
[..]
</wsdl:definitions>
Webサービスの所有者は、リクエストは次のようになっている必要があると提案しています。
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<GetResult xmlns="[redacted]">
<Bar>
<Bar>
<Qux>bar_qux_value</Qux>
</Bar>
</Bar>
<Foo>foo_string</Operation>
</GetResult>
</soap:Body>
</soap:Envelope>
私がすべきだと思うことは次のとおりです:
$client = new \SoapClient($url_to_wsdl);
$result = $client->GetResult([
"Foo" => "foo_value",
"Bar" => [
"Bar" => [
"Qux" => "bar_qux_value"
]
]
]);
しかし、それは私に与えます:
SOAP-ERROR:エンコーディング:オブジェクトに「any」プロパティがありません
では、おそらくこれを行う必要がありますか?
$client = new \SoapClient($url_to_wsdl); $result = $client->GetResult([ "Foo" => "foo_value", "Bar" => [ "any" => [ "Bar" => [ "Qux" => "bar_qux_value" ] ] ] ]);
しかし、それは次のようにリクエストを作成します:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <ns1:GetResult> <ns1:Foo>foo_value</ns1:Operation> <ns1:Bar>bar_qux_value</ns1:Bar> </ns1:GetResult> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Bar
の値が文字列に縮小されましたが、サーバーでは受け入れられません。何度も試した結果、このリクエストは機能することがわかりました:
$ client = new \ SoapClient($ url_to_wsdl); $ result = $ client-> GetResult([ "Foo" => "foo_value"、 "Bar" => [ "any" => ["
bar_qux_value "] ] ]); いくつか質問があります:
- Bar> Bar> Quxがwsdlにないのはなぜですか?
- Barには2つのレベルがあるのはなぜですか?設計が不十分ですか?
<any>
ノードが必要なのはなぜですか?- 一部のxmlをインライン化せずにリクエストを作成する方法はありますか?
わからない
0
レビュー
答え :
解決策:
ローカルでテストしてエラーを確認してください。SOAP-UIを使用してwsdlからSOAPサーバーのモックを作成し、それを呼び出してログエラーを確認してください。< / p>
英語でごめんなさい。 頑張ってください!
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。