我似乎无法使用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选项。我只是希望能够发送/返回记录的额外字段,无论它们是否在模式中详细说明。
答案 0 :(得分:0)
您需要在传递给soap响应的返回对象中使用SoapVar对象。 在你的情况下,返回的对象应该是这样的。
$recordObject = new stdClass;
$recordObject->prop1 = 'prop1';
$recordObject->prop2 = 'prop2';
$soapReturnObject = new SoapVar($recordObject, SOAP_ENC_OBJECT);