1

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

4

1 回答 1

0

您需要在传递给肥皂响应的返回对象中使用 SoapVar 对象。在您的情况下,返回的对象应该看起来像这样。

$recordObject = new stdClass;
$recordObject->prop1 = 'prop1';
$recordObject->prop2 = 'prop2';

$soapReturnObject = new SoapVar($recordObject, SOAP_ENC_OBJECT);

另请参阅:SOAP:返回 xsd 数组:PHP 中的任何元素

于 2014-04-11T13:30:33.787 回答