2013-02-15 9 views
2

Я получаю следующий ответ от веб-сервисатипа Apex не найдено для элемента: UserDetails

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><GetUserResponse xmlns="urn:wwservice"><userDetails xmlns="">Successfully write a web service hurray</userDetails></GetUserResponse></SOAP-ENV:Body></SOAP-ENV:Envelope> 

Но я получаю типа Apex не найдено для элемента: UserDetails

Вот мой файл WSDL

<?xml version="1.0" encoding="ISO-8859-1"?> 
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:wwservice" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:wwservice"> 
<types> 
<xsd:schema elementFormDefault="qualified" targetNamespace="urn:wwservice"> 
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/> 
<xsd:complexType name="GetUserRequestType"> 
    <xsd:all> 
    <xsd:element name="Username" type="xsd:string" form="unqualified"/> 
    <xsd:element name="Password" type="xsd:string" form="unqualified"/> 
    </xsd:all> 
</xsd:complexType> 
<xsd:complexType name="GetUserResponseType"> 
    <xsd:all> 
    <xsd:element name="userDetails" type="xsd:string" form="unqualified"/> 
    </xsd:all> 
</xsd:complexType> 
<xsd:element name="GetUser" type="tns:GetUserRequestType"/> 
<xsd:element name="GetUserResponse" type="tns:GetUserResponseType"/> 
</xsd:schema> 
</types> 
<message name="GetUserRequest"> 
    <part name="parameters" element="tns:GetUser"/></message> 
<message name="GetUserResponse"> 
    <part name="parameters" element="tns:GetUserResponse"/></message> 
<portType name="PsocialPortType"> 
    <operation name="GetUser"> 
    <input message="tns:GetUserRequest"/> 
    <output message="tns:GetUserResponse"/> 
    </operation> 
</portType> 
<binding name="PsocialBinding" type="tns:PsocialPortType"> 
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetUser"> 
    <soap:operation soapAction="urn:wwservice#GetUser" style="document"/> 
    <input><soap:body use="literal" namespace="urn:wwservice"/></input> 
    <output><soap:body use="literal" namespace="urn:wwservice"/></output> 
    </operation> 
</binding> 
<service name="Psocial"> 
    <port name="PsocialPort" binding="tns:PsocialBinding"> 
    <soap:address location="http://example.com/webservice/wwservice.php"/> 
    </port> 
</service> 
</definitions> 

Пожалуйста, дайте мне знать, где я ошибаюсь

Я использую это для создания ели WSDL

$server = new soap_server(); 
    // Changed for coupons data start 
    $server->soap_defencoding = 'UTF-8'; 
    $server->decode_utf8 = false; 
    // Changed for coupons data end 

    //$server->configureWSDL('m-way', 'urn:wwservice'); 
    $server->configureWSDL('Psocial', 'urn:wwservice',false,'document'); 


    // New function for spiff 
    $server->register("GetUser", 
    array('Username'=>'xsd:string','Password'=>'xsd:string'), 
    array('userDetails'=>'xsd:string'), 
    'urn:wwservice', 
    'urn:wwservice#GetUser', 'document', 'literal' 
    ); 



    $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA : file_get_contents('php://input'); 
    $server->service($HTTP_RAW_POST_DATA); 
+0

Я получил ответ только что заменил
частная String [] apex_schema_type_info = новый String [] { 'урна: wwservice', 'истина', 'ложь'}; private String [] apex_schema_type_info = new String [] {'urn: wwservice', 'false', 'false'}; 'true' от false, и это сработало так что новое заявление –

ответ

2

Проблема заключается в том, что ответ SOAP вы получаете не соответствует описанию его в WSDL, то WSDL имеет elementFormDefault="qualified" для схемы, в которой говорится, что дочерний элемент будет находиться в пространстве имен, например, его говоря, ответ должен быть

<GetUserResponse xmlns="urn:wwservice"> 
    <userDetails>Hello</userDetails> 
</GetUserResponse> 

но фактический ответ вы получите имеет

<GetUserResponse xmlns="urn:wwservice"> 
    <userDetails xmlns="">Successfully write a web service hurray</userDetails> 
</GetUserResponse> 

Обратите внимание, как пространство имен для элемента UserDetails отличается. Вы должны либо обновить WSDL, чтобы сказать elementForDefault = "unqualified", либо обновить веб-службу, чтобы вернуть правильное пространство имен в элементе userDetails.

+0

спасибо за ваш ответ –

Смежные вопросы