如何将复杂类型映射到现有类

时间:2010-08-05 09:30:34

标签: php wsdl

我想将现有类型映射到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致命错误}

1 个答案:

答案 0 :(得分:0)

您声称发送的RequestDescriptor课程除了作为结构/变量持有者之外还有其他功能吗?如果没有,请删除classmap并继续在其中抛出stdClass对象。

如果它做了其他事情,你将不得不追踪传递stdClass对象而不是RequestDescriptor实例(可能在你不期望的位置,如请求将失败AFAIK,因此处理更多请求)。来自该实例的回溯可以帮助你很多,可能扩展你的soapclient类与另一个具有自定义__call()方法,该方法明确地测试这个,在发生错误条件时执行debug_print_backtrace(),或者只是调用{ {1}}一切都很好。