PHP 5.2.10を使用していて、標準のSOAP拡張機能を使用して複雑なデータ型を返すWebサービスを利用しようとしています。
問題は、SoapClientが他のオブジェクト/オブジェクトの配列にネストされているオブジェクトを設定しないことです。getUtenteメソッドを呼び出して、パラメーターとして「my_unique_id」を指定すると、次のようになります。
stdClass Object
(
[getUtenteReturn] => stdClass Object
(
[userName] => my_unique_id
[fieldOne] => ...
[fieldTwo] => ...
[utilizzatore] => stdClass Object
( // This is EMPTY instead of containing a series of userName's
)
)
)
WDSLの説明の関連部分は次のとおりです。
<element name="getUtenteResponse">
<complexType>
<sequence>
<element name="getUtenteReturn" type="tns1:Cliente"/>
</sequence>
</complexType>
</element>
...
<complexType name="Utilizzatore">
<sequence>
<element name="userName" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
...
<complexType name="Cliente">
<complexContent>
<extension base="tns1:Utilizzatore">
<sequence>
<element name="fieldOne" nillable="true" type="xsd:string"/>
<element name="fieldTwo" nillable="true" type="xsd:string"/>
<element name="utilizzatore" nillable="true" type="impl:ArrayOf_tns1_Utilizzatore"/>
</sequence>
</extension>
</complexContent>
</complexType>
私が見つけたのは、この問題を経験しているのは私だけではありません。特に、PHPの公式ドキュメントと他のフォーラムエントリでこのコメントを見つけて、問題へのアプローチ方法について2つの異なるアイデアを提供しましたが、これら2つのアイデアのいずれも実用的な解決策に変えることができませんでした。与えられた例の背後にあるロジックを完全に理解してください。
誰かがこれについて私を導いてくれたらありがたいです:別のWebサービスで動作するコードを歓迎しますが、私が主に求めているのは、問題と提案された解決策のロジックを本当に理解することです(魚ではなく魚のレーン!) 。:)