0

我正在使用 PHP SOAP 扩展 ( SoapClient) 来调用远程操作。它的 WSDL 类型如下:

<s:element name="OperationResponse">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="OperationResult">
                <s:complexType mixed="true">
                    <s:sequence>
                        <s:any/>
                    </s:sequence>
                </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
</s:element>

据我所知,类型是“任何东西”。调用的结果被转换成一个嵌套stdClass对象,不容易处理:

object(stdClass)[3]
  public 'OperationResult' => 
    object(stdClass)[4]
      public 'any' => string 'xml string here...'

(这实际上是由 SOAP 扩展本身执行的)

如何控制这个对象的创建方式?我试图将classmap选项传递给 SOAP 客户端,但它不起作用:我得到了实例,但属性是null.

手动解析结果的问题一目了然。我可以SimpleXmlElement使用来自的字符串创建一个新的$result->OperationResult->any,但如果 WSDL 更改,它将不起作用。

4

1 回答 1

0

您可以通过该类映射功能将其转换为 PHP 中的几乎任何结果,但问题是您是否应该这样做,因为相同的 Soap 数据结构通常用于请求和响应。重复使用它们!

我的一般方法是使用类映射功能将所有这些 ComplexType 结构映射到 PHP 类。如果该结构不适合预期用途,我有一个映射器步骤,可以在 PHP 中转换结果。

于 2013-08-04T22:04:55.260 回答