我正在使用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 官方文档和其他论坛条目中发现了这条评论,就如何解决这个问题给出了两种不同的想法,但我无法将这两个想法中的任何一个变成一个可行的解决方案:我似乎没有完全理解给出的例子背后的逻辑。
如果有人能在这方面指导我,我将不胜感激:欢迎在另一个 Web 服务上使用一些工作代码,但我主要追求的是真正理解问题和提出的解决方案的逻辑(鱼道,而不是鱼!) . :)