0

我正在使用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 服务上使用一些工作代码,但我主要追求的是真正理解问题和提出的解决方案的逻辑(鱼道,而不是鱼!) . :)

4

3 回答 3

1

老问题,没有答案。我最近偶然发现了这篇文章,它解释了问题并给出了解决方案:Consuming SOAP complexType webservice with PHP

于 2011-04-28T07:58:07.653 回答
0

这是我的直接想法,对不起,这不是一个正确的答案,只是一些想法......

首先,您是否尝试过查看发送到soap 服务器的soap 请求(信封)?它看起来应该工作吗?你能看出哪里出错了吗?你只是得到一个错误,一个soapFault,或者错误的数据,或者什么都没有?

其次,您是否尝试过使用SoapParam该类?

最后,我确定您这样做是正确的,但我注意到您正在构建的对象具有并排的用户名和 fieldOne 和 fieldTwo,但是您的 WSDL 显示 fieldOne 和 fieldTwo 是类 Cliente 的一部分(从显示在您的示例中)而用户名应该在 utilizzatore 数组中,所以它不应该更像:

stdClass Object
(
    [Cliente] => stdClass Object
        (
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

SoapClient 类对我来说非常令人沮丧,所以不要把这当作批评,因为我只希望通过提供可能对您有所帮助的想法来更好地理解它。

于 2010-02-09T07:05:20.523 回答
0

Mac,非常感谢您的及时回复。看看我跌倒了什么……我之前没看过这个。因此想分享这个

于 2010-02-17T13:24:33.700 回答