【问题标题】:Using the any schema element in wsdl with PHP SoapServer将 wsdl 中的任何模式元素与 PHP SoapServer 一起使用
【发布时间】:2012-07-11 22:28:27
【问题描述】:

我似乎无法使用 PHP SoapServer 让 XSD 元素在我的 wsdl 中工作。根据我所阅读的所有内容,并了解其他几家公司如何实施“松散类型”wsdls。以下内容应该足以检索和发送记录信息。

<complexType name="Record">
    <sequence>
        <any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </sequence>
</complexType>

不幸的是,似乎 php SoapServer 类丢弃了任何未严格定义的元素。我得到的是创建请求的空记录和检索/过滤请求的空记录,尽管这些字段在 SoapServer 处理之前就已经存在。

如果我像这样专门定义缺少的字段...

<complexType name="Record">
    <sequence>
        <element name="FirstName" type="xsd:string" minOccurs="0"/>
        <element name="LastName" type="xsd:string" minOccurs="0"/>
        <any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </sequence>
</complexType>

然后一切都很好,这些字段将传递给客户端/从客户端传递。我错过了什么吗?我已经尝试了所有命名空间选项##any、##local 等以及 processContents 选项。我只想能够发送/返回记录的额外字段,无论它们是否在架构中详细说明。

【问题讨论】:

    标签: php xsd wsdl soapserver


    【解决方案1】:

    您需要在传递给soap 响应的返回对象中使用SoapVar 对象。 在您的情况下,返回的对象应如下所示。

    $recordObject = new stdClass;
    $recordObject->prop1 = 'prop1';
    $recordObject->prop2 = 'prop2';
    
    $soapReturnObject = new SoapVar($recordObject, SOAP_ENC_OBJECT);
    

    另请参阅:SOAP: Returning an array of xsd:any elements in PHP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多