как сопоставить сложный тип с существующим классом - PullRequest
3 голосов
/ 05 августа 2010

я хочу сопоставить существующий тип с типом 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 iиспользуйте этот код для сопоставления сложного типа

$soapClient = new SoapClient($soapServiceURL,array("classmap"=>array("RequestDescriptor","RequestDescriptor")));

, когда я вызываю любую функцию, полученную на сервере, в журнале этого сообщения

PHP Catchable fatal error: аргумент 1 передан в xx ::XXX () должен быть экземпляром RequestDescriptor, экземпляром stdClass, заданным

, но он запускается и возвращает ожидаемый результат, как и предполагалось, как исправить эту {PHP Catchable fatal error}

1 Ответ

0 голосов
/ 05 августа 2010

Имеет ли ваш RequestDescriptor класс, который вы утверждаете, что отправляете, какие-либо дополнительные функции помимо того, что он является держателем структуры / переменной? Если нет, отбросьте объект classmap и продолжайте бросать в него объекты stdClass.

Если он делает что-то еще, вам придется отследить , где передается объект stdClass вместо RequestDescriptor экземпляра (вероятно, в месте, которое вы не ожидаете, как запрос будет отказ AFAIK, так что больше запросов обрабатывается). Обратный след из этого экземпляра может вам сильно помочь, возможно, расширить ваш класс soapclient с помощью другого, имеющего пользовательский метод __call(), который явно проверяет это, выполняет debug_print_backtrace() при возникновении ошибки или просто вызывает parent::__call(), когда все хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...