PHP-SOAP: Ошибка при использовании Document-style WSDL

storozhilov

Новичок
PHP-SOAP: Ошибка при использовании Document-style WSDL

Здравствуйте! Возникла проблема с использованием SOAP-модуля PHP. Почему-то при использовании Document-style WSDL (авторитетные люди именно его рекомендуют к использованию) возникает ошибка приблизительного вида:

Код:
PHP Fatal error:  Uncaught SoapFault exception: [SOAP-ENV:Client] Method
'parameters' not implemented: method name or namespace not recognized in
/usr/home/illy/Programming/SOAP/PHP/document_style_wsdl/web_service_client.php:5
Stack trace:
#0 [internal function]: SoapClient->__call('initUserSession', Array)
#1 /usr/home/illy/Programming/SOAP/PHP/document_style_wsdl/web_service_client.php(5):
SoapClient->initUserSession(1, 'vasya_pupkin', 'password')
#2 {main}
  thrown in
/usr/home/illy/Programming/SOAP/PHP/document_style_wsdl/web_service_client.php on line
При использовании RPC-style WSDL (НЕ рекомендован) все отрабатывает нормально. Сам WSDL, вроде, нормальный, т.к. библиотека gSOAP, с помощью которой реализованы SOAP-сервер и клиентские приложения, "проглатывает" его без проблем, да и на валидаторе прогоняется...

Может кто сталкивался?

Собственно текст программы:

PHP:
<?php

ini_set('soap.wsdl_cache_enabled', '0');
$client = new SoapClient("web_service.wsdl");
$uuid = $client->initUserSession(1, 'vasya_pupkin', 'password');

?>
WSDL:

Код:
<?xml version="1.0"?>
<wsdl:definitions name="WebService"
	targetNamespace="http://soap.webservice.com/soapd/web_service.wsdl"
	xmlns:tns="http://soap.webservice.com/soapd/web_service.wsdl"
	xmlns:islxsd="http://soap.webservice.com/soapd/web_service.xsd"
	xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://soap.webservice.com/soapd/web_service.xsd"
      xmlns:tns="http://soap.webservice.com/soapd/web_service.xsd"
      xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
      xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
      <!-- Common types: -->
      <xsd:simpleType name="UUIDDataType">
        <xsd:restriction base="xsd:string">
          <xsd:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
        </xsd:restriction>
      </xsd:simpleType>
	
      <xsd:simpleType name="EntityIDDataType">
        <xsd:restriction base="xsd:int">
          <xsd:minInclusive value="0" />
        </xsd:restriction>
      </xsd:simpleType>

      <xsd:complexType name="EntityIDRequestDataType">
        <xsd:complexContent>
          <xsd:restriction base="xsd:anyType">
            <xsd:sequence>
              <xsd:element name="uuid" type="tns:UUIDDataType" />
              <xsd:element name="id" type="tns:EntityIDDataType" />
            </xsd:sequence>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>

      <!-- Custom types -->
      <xsd:complexType name="LoggedErrorsDataType">
        <xsd:complexContent>
          <xsd:restriction base="xsd:anyType">
            <xsd:sequence>
              <xsd:element name="id" type="tns:EntityIDDataType" />
              <xsd:element name="message" type="xsd:string" />
            </xsd:sequence>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>

      <xsd:complexType name="ArrayOfLoggedErrorsDataType">
        <xsd:complexContent>
          <xsd:restriction base="xsd:anyType">
            <xsd:sequence>
              <xsd:element name="errors" minOccurs="0" maxOccurs="unbounded" nillable="false" type="tns:LoggedErrorsDataType" />
            </xsd:sequence>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>

      <xsd:complexType name="InitUserSessionRequestDataType">
        <xsd:complexContent>
          <xsd:restriction base="xsd:anyType">
            <xsd:sequence>
        	    <xsd:element name="loginTypeID" type="tns:EntityIDDataType" />
        	    <xsd:element name="login" type="xsd:string" />
        	    <xsd:element name="password" type="xsd:string" />
          	</xsd:sequence>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>

      <!-- Elements: -->
      <xsd:element name="faultResponse" type="tns:ArrayOfLoggedErrorsDataType" />	
      <xsd:element name="initUserSessionRequest" type="tns:InitUserSessionRequestDataType"/>
      <xsd:element name="initUserSessionResponse" type="tns:UUIDDataType"/>
      
    </xsd:schema>
  </wsdl:types>

  <wsdl:message name="faultResponse">
    <wsdl:part name="parameters" element="islxsd:faultResponse"/>
  </wsdl:message>

  <wsdl:message name="initUserSessionRequest">
    <wsdl:part name="parameters" element="islxsd:initUserSessionRequest"/>
  </wsdl:message>

  <wsdl:message name="initUserSessionResponse">
    <wsdl:part name="parameters" element="islxsd:initUserSessionResponse"/>
  </wsdl:message>

  <wsdl:portType name="WebServiceInterface">
    <wsdl:operation name="initUserSession">
      <wsdl:input message="tns:initUserSessionRequest"/>
      <wsdl:output message="tns:initUserSessionResponse"/>
      <wsdl:fault message="tns:faultResponse" name="initUserSessionFault"/>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="WebServiceSoapHttpBinding" type="tns:WebServiceInterface">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="initUserSession">
      <soap:operation soapAction="http://soap.webservice.com/soapd"/>
      <wsdl:input>
        <soap:body use="literal" namespace="http://soap.webservice.com/soapd/web_service.wsdl"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal" namespace="http://soap.webservice.com/soapd/web_service.wsdl"/>
      </wsdl:output>
      <wsdl:fault name="initUserSessionFault">
        <soap:fault use="literal" namespace="http://soap.webservice.com/soapd/web_service.wsdl"/>
      </wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="WebServiceService">
    <wsdl:documentation>SOAP-service</wsdl:documentation>
    <wsdl:port name="WebServiceEndpoint" binding="tns:WebServiceSoapHttpBinding">
      <soap:address location="http://soap.webservice.com:8080/cgi-bin/soapd"/>
    </wsdl:port>
  </wsdl:service>
  
</wsdl:definitions>
 
Сверху