2015-05-12 41 views
2

我有一個SOAP :: Lite客戶端使用服務方法來抓取wsdl。這需要使用不帶參數的單個操作和方法來調用Web服務。這導致了提供者告訴我的嵌套方法調用是錯誤的。而且我不太瞭解SOAP :: Lite或webservices。建議感激!Perl SOAP :: LITE服務生成存根方法內的方法

my $lookup = SOAP::Lite->service('http://hostname.com/path/SpringVerifierWebServicePort?wsdl') 
    -> proxy("$theURL") ; 
$response = $lookup->verifySpring(''); 

這就是在通話中產生這個存根。

<?xml version="1.0" encoding="UTF-8"?> 
    <soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://webservice.springverifier.toolslang.fedins.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> 
     <tns:verifySpring> 
     <verifySpring xsi:nil="true" xsi:type="tns:verifySpring" /> 
     </tns:verifySpring> </soap:Body></soap:Envelope> 

SOAP::Transport::HTTP::Client::send_receive: HTTP::Response=HASH(0x167bee8) 
SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 500 Internal Server Error 

該webservice的提供者告訴我500錯誤是由於調用中的嵌套verifySpring。我是否需要以不同於我的方式調用它,還是WSDL無效並搞砸了SOAP :: Lite?我不太瞭解SOAP和Web服務,以說明問題是否是WSDL,或者是否需要在SOAP :: LITE中以不同的方式調用它。有誰能給我一些方向嗎?

提供商WSDL是這樣的:

<?xml version="1.0" encoding="UTF-8" ?> 
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://webservice.springverifier.toolslang.fedins.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="SpringVerifierWebServiceService" targetNamespace="http://webservice.springverifier.toolslang.fedins.com"> 
    <wsdl:types> 
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://webservice.springverifier.toolslang.fedins.com" targetNamespace="http://webservice.springverifier.toolslang.fedins.com" version="1.0"> 
     <xs:element name="verifySpring" type="tns:verifySpring" /> 
     <xs:element name="verifySpringResponse" type="tns:verifySpringResponse" /> 
     <xs:complexType name="verifySpring"> 
     <xs:sequence /> 
     </xs:complexType> 
     <xs:complexType name="verifySpringResponse"> 
     <xs:sequence> 
      <xs:element minOccurs="0" name="return" type="tns:environmentInfo" /> 
     </xs:sequence> 
     </xs:complexType> 
     <xs:complexType name="environmentInfo"> 
     <xs:sequence> 
      <xs:element minOccurs="0" name="dbRegion" type="xs:string" /> 
      <xs:element minOccurs="0" name="jndi" type="xs:string" /> 
      <xs:element minOccurs="0" name="springProfile" type="xs:string" /> 
      <xs:element minOccurs="0" name="systemDate" type="xs:string" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:schema> 
    </wsdl:types> 
    <wsdl:message name="verifySpringResponse"> 
    <wsdl:part element="tns:verifySpringResponse" name="parameters" /> 
    </wsdl:message> 
    <wsdl:message name="verifySpring"> 
    <wsdl:part element="tns:verifySpring" name="parameters" /> 
    </wsdl:message> 
    <wsdl:portType name="SpringVerifierWebService"> 
    <wsdl:operation name="verifySpring"> 
     <wsdl:input message="tns:verifySpring" name="verifySpring" /> 
     <wsdl:output message="tns:verifySpringResponse" name="verifySpringResponse" /> 
    </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="SpringVerifierWebServiceServiceSoapBinding" type="tns:SpringVerifierWebService"> 
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
    <wsdl:operation name="verifySpring"> 
     <soap:operation soapAction="" style="document" /> 
     <wsdl:input name="verifySpring"> 
     <soap:body use="literal" /> 
     </wsdl:input> 
     <wsdl:output name="verifySpringResponse"> 
     <soap:body use="literal" /> 
     </wsdl:output> 
    </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="SpringVerifierWebServiceService"> 
    <wsdl:port binding="tns:SpringVerifierWebServiceServiceSoapBinding" name="SpringVerifierWebServicePort"> 
     <soap:address location="http://dev1.spring.service.fedins.com/fedservice/toolslang/springverifier/webservice/services/SpringVerifierWebServicePort" /> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

回答

1

'' 是一個實際值(空字符串),使用verifySpring();和不verifySpring('');

#!/usr/bin/perl -- 
use strict; 
use warnings; 
use SOAP::Lite; 
my $soap = SOAP::Lite 
    -> uri('http://127.0.0.1/MyModule') 
    -> proxy('http://127.0.0.1:1203') 
;;;;;;;;; 
$soap->readable(1); 
$soap->transport->add_handler("request_send", sub { print $_[0]->as_string,"\n"; return }); 
eval { $soap->verifySpring(''); 1 } or print "[email protected]\n"; 
eval { $soap->verifySpring(); 1 } or print "[email protected]\n"; 
__END__ 
POST http://127.0.0.1:1203 HTTP/1.1 
Accept: text/xml 
Accept: multipart/* 
Accept: application/soap 
User-Agent: SOAP::Lite/Perl/1.11 
Content-Length: 522 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "http://127.0.0.1/MyModule#verifySpring" 

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope 
    soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soap:Body> 
    <verifySpring xmlns="http://127.0.0.1/MyModule"> 
     <c-gensym3 xsi:type="xsd:string" /> 
      </verifySpring> 
    </soap:Body> 
</soap:Envelope> 

500 Can't connect to 127.0.0.1:1203 at - line 11. 

POST http://127.0.0.1:1203 HTTP/1.1 
Accept: text/xml 
Accept: multipart/* 
Accept: application/soap 
User-Agent: SOAP::Lite/Perl/1.11 
Content-Length: 475 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "http://127.0.0.1/MyModule#verifySpring" 

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope 
    soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soap:Body> 
    <verifySpring xmlns="http://127.0.0.1/MyModule" xsi:nil="true" /> 
     </soap:Body> 
</soap:Envelope> 

500 Can't connect to 127.0.0.1:1203 at - line 12.