我想将现有类型映射到wsdl类型
wsdl复杂类型
<types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/service1/">
<xsd:complexType name="RequestDescriptor">
<xsd:all>
<xsd:element name="language" type="xsd:string" default="xx"></xsd:element>
<xsd:element name="siteAPIKey" type="xsd:string" default="xxxx"></xsd:element>
<xsd:element name="userID" type="xsd:int" default="-1"></xsd:element>
<xsd:element name="sessionID" type="xsd:string" default="-1"></xsd:element>
<xsd:element name="returnDataFormat" type="xsd:string" default="XX"></xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:schema>
</types>
我称之为
<wsdl:message name="getXXRequest">
<wsdl:part name="requestDescriptor" type="xsd1:RequestDescriptor"/>
</wsdl:message>
<wsdl:message name="getXXResponse">
<wsdl:part name="getXXResponse" type="xsd:anytype"/>
</wsdl:message>
在php中我使用此代码来映射复杂类型
$soapClient = new SoapClient($soapServiceURL,array("classmap"=>array("RequestDescriptor","RequestDescriptor")));
当我调用服务器中的任何功能时都会记录此消息
PHP Catchable致命错误:传递给xx :: XXX()的参数1必须是RequestDescriptor的实例,stdClass的实例给出
但它运行并按预期返回结果任何线索如何解决此问题{PHP Catchable致命错误}
答案 0 :(得分:0)
您声称发送的RequestDescriptor
课程除了作为结构/变量持有者之外还有其他功能吗?如果没有,请删除classmap并继续在其中抛出stdClass对象。
如果它做了其他事情,你将不得不追踪传递stdClass对象而不是RequestDescriptor
实例(可能在你不期望的位置,如请求将失败AFAIK,因此处理更多请求)。来自该实例的回溯可以帮助你很多,可能扩展你的soapclient类与另一个具有自定义__call()
方法,该方法明确地测试这个,在发生错误条件时执行debug_print_backtrace()
,或者只是调用{ {1}}一切都很好。