【问题标题】:Perl SOAP::LITE service generated stub method within methodPerl SOAP::LITE 服务在方法中生成存根方法
【发布时间】:2015-05-12 14:13:50
【问题描述】:

我有一个 SOAP::Lite 客户端,它使用服务方法来获取 wsdl。这需要调用一个没有参数的单一操作和方法的 web 服务。这导致提供者告诉我错误的嵌套方法调用。而且我对 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

该网络服务的提供者告诉我 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>

【问题讨论】:

    标签: perl web-services wsdl soaplite


    【解决方案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 "$@\n";
    eval { $soap->verifySpring();   1 } or print "$@\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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 2013-07-03
      • 2010-10-03
      • 1970-01-01
      相关资源
      最近更新 更多