使用wsdl中的任何schema元素和PHP SoapServer

时间:2012-07-11 22:28:28

标签: php xsd wsdl soapserver

我似乎无法使用PHP SoapServer在我的wsdl中使用XSD元素。根据我所阅读的一切,看看其他几家公司如何实施"松散打字" WSDL文件。以下内容足以检索和发送记录信息。

<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选项。我只是希望能够发送/返回记录的额外字段,无论它们是否在模式中详细说明。

1 个答案:

答案 0 :(得分:0)

您需要在传递给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