in reply to Re^3: SOAP::Lite problem
in thread SOAP::Lite problem

Hello again :), here is the XML that the wsdl is expecting, I capture this from wireshark from another application:
<?xml version="1 .0" encoding="UT F-8"?> <SOAP-ENV :Envelope xmlns: SOAP-ENV="http:/ /schemas.xmlsoap .org/soap/envelo pe/" xmlns:ns1=" http://www.huawei.com/bme/cbsint erface/common" xmlns:ns2="http:/ /www.huawei.com/bme/cbsinterface /cbs/accountmgr +" xmlns:ns3="http ://www.huawei.com/bme/cbsinterfa ce/cbs/accountmg +rmsg"> <SOAP-ENV: Body> <ns3:PaymentRequestMsg> <RequestHeader> <ns1: CommandId>Payment</ns1:CommandId> <ns1:Version>1< /ns1:Version> <ns1:TransactionId></ns1:TransactionId> <ns1:SequenceId>1</ns1:SequenceId> <ns1:RequestType>Event</ns1:RequestType> <ns1:SerialNo>eTopup_193</ns1:SerialNo> </RequestHeader> <PaymentRequest> <ns2:SubscriberNo>123</ns2:SubscriberNo> <ns2:PaymentAmt>100</ns2:PaymentAmt> <ns2:Pay mentMode>1001</ns2:PaymentMode> </PaymentRequest> </ns3:PaymentRequestMsg> </SOAP-ENV:Body> </SOAP-E NV:Envelope>

Replies are listed 'Best First'.
Re^5: SOAP::Lite problem
by Anonymous Monk on Oct 20, 2015 at 01:23 UTC

    Ok, you're using  my $result = $soap->Payment(@data); but you're expecting the xml to say PaymentRequestMsg, well you have to use ->PaymentRequestMsg for that to happen

    Does that get you closer?

      #!/usr/bin/perl -- use strict; use warnings; use SOAP::Lite +trace => 'debug', readable => 1; my $soap = SOAP::Lite -> uri('http://127.0.0.1/MyModule') -> proxy('http://127.0.0.1:1203') ;;;;;;;;; $soap->ns( "http://www.huawei.com/bme/cbsinterface/common" => 'ns1' ); $soap->ns( "http://www.huawei.com/bme/cbsinterface/cbs/accountmgr" => +'ns2' ); $soap->ns( "http://www.huawei.com/bme/cbsinterface/cbs/accountmgrmsg" + => 'ns3',); $soap->envprefix('SOAP-ENV'); my @data = SOAP::Data->name("RequestHeader" => \SOAP::Data->value( SOAP::Data->name("CommandId" => 'Payment')->prefix('ns1'), SOAP::Data->name("Version" => '1')->prefix('ns1'), SOAP::Data->name("TransactionId" => '')->prefix('ns1'), SOAP::Data->name("SequenceId" => '1')->prefix('ns1'), SOAP::Data->name("RequestType" => 'Event')->prefix('ns1'), SOAP::Data->name("SerialNo" => 'USSD_00000001')->prefix('ns1'), ) ); push (@data, SOAP::Data->name("PaymentRequest" => \SOAP::Data->value( SOAP::Data->name("SubscriberNo" => '123')->prefix('ns2'), SOAP::Data->name("PaymentAmt" => 100)->prefix('ns2'), SOAP::Data->name("PaymentMode" => 1001)->prefix('ns2'), ) )); my $result = $soap->PaymentRequestMsg(@data); __END__ $ perl soap-lite-1145282.pl SOAP::Transport::HTTP::Client::send_receive: POST http://127.0.0.1:120 +3 HTTP/1.1 Accept: text/xml Accept: multipart/* Accept: application/soap Content-Length: 1380 Content-Type: text/xml; charset=utf-8 SOAPAction: "http://www.huawei.com/bme/cbsinterface/cbs/accountmgrmsg# +PaymentRequestMsg" <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.huawei.com/bme/cbsinterface/common" xmlns:ns2="http://www.huawei.com/bme/cbsinterface/cbs/accountmgr" xmlns:ns3="http://www.huawei.com/bme/cbsinterface/cbs/accountmgrms +g" 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-ENV:Body> <ns3:PaymentRequestMsg> <RequestHeader> <ns1:CommandId xsi:type="xsd:string">Payment</ns1:CommandId> <ns1:Version xsi:type="xsd:int">1</ns1:Version> <ns1:TransactionId xsi:type="xsd:string" /> <ns1:SequenceId xsi:type="xsd:int">1</ns1:SequenceId> <ns1:RequestType xsi:type="xsd:string">Event</ns1:RequestType> <ns1:SerialNo xsi:type="xsd:string">USSD_00000001</ns1:SerialN +o> </RequestHeader> <PaymentRequest> <ns2:SubscriberNo xsi:type="xsd:int">123</ns2:SubscriberNo> <ns2:PaymentAmt xsi:type="xsd:int">100</ns2:PaymentAmt> <ns2:PaymentMode xsi:type="xsd:int">1001</ns2:PaymentMode> </PaymentRequest> </ns3:PaymentRequestMsg> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP::Transport::HTTP::Client::send_receive: 500 Can't connect to 127. +0.0.1:1203 Content-Type: text/plain Client-Date: Tue, 20 Oct 2015 01:56:11 GMT Client-Warning: Internal response Can't connect to 127.0.0.1:1203 No connection could be made because the target machine actively refuse +d it. at .../site/lib/LWP/Protocol/http.pm line 47. 500 Can't connect to 127.0.0.1:1203 at soap-lite-1145282.pl line 40.
        I tried that just now, my current code is:
        #!/usr/bin/perl -- use strict; use warnings; use SOAP::Lite +trace => 'debug', readable => 1; my $soap = SOAP::Lite-> service('http://10.230.0.22:7782/services/CBSI +nterfaceAccountMgrService?wsdl'); $soap->ns("http://www.huawei.com/bme/cbsinterface/common" => 'ns1'); $soap->ns("http://www.huawei.com/bme/cbsinterface/cbs/accountmgr" => ' +ns2'); $soap->ns("http://www.huawei.com/bme/cbsinterface/cbs/accountmgrmsg" = +> 'ns3'); $soap->envprefix('SOAP-ENV'); my @data = SOAP::Data->name("RequestHeader" => \SOAP::Data->value( SOAP::Data->name("CommandId" => 'Payment')->prefix('ns1'), SOAP::Data->name("Version" => '1')->prefix('ns1'), SOAP::Data->name("TransactionId" => '')->prefix('ns1'), SOAP::Data->name("SequenceId" => '1')->prefix('ns1'), SOAP::Data->name("RequestType" => 'Event')->prefix('ns1'), SOAP::Data->name("SerialNo" => 'USSD_00000001')->prefix('ns1'), ) ); push (@data, SOAP::Data->name("PaymentRequestMsg" => \SOAP::Data->value( SOAP::Data->name("SubscriberNo" => '123')->prefix('ns2'), SOAP::Data->name("PaymentAmt" => 100)->prefix('ns2'), SOAP::Data->name("PaymentMode" => 1001)->prefix('ns2'), ) )); my $result = $soap->Payment(@data)
        However none of the settings are reflected in the output
        SOAP::Transport::HTTP::Client::send_receive: POST http://10.230.0.22:7 +782//services/CBSInterfaceAccountMgrService HTTP/1.1 Accept: text/xml Accept: multipart/* Accept: application/soap Content-Length: 1075 Content-Type: text/xml; charset=utf-8 SOAPAction: "Payment" <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope SOAP-ENV:enco +dingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV= +"http://schemas.xmlsoap.org/soap/envelope/" xmlns:account="http://www +.huawei.com/bme/cbsinterface/cbs/accountmgr" xmlns:accountmgrmsg="htt +p://www.huawei.com/bme/cbsinterface/cbs/accountmgrmsg" xmlns:common=" +http://www.huawei.com/bme/cbsinterface/common" xmlns:http="http://sch +emas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/w +sdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s +oap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapenc="http:/ +/schemas.xmlsoap.org/soap/encoding/" xmlns:wsaw="http://www.w3.org/20 +06/05/addressing/wsdl" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" +xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3. +org/2001/XMLSchema-instance"><SOAP-ENV:Body><account:Payment><Request +Header xsi:nil="true" xsi:type="common:RequestHeader" /><PaymentReque +st xsi:nil="true" xsi:type="account:PaymentRequest" /></account:Payme +nt></SOAP-ENV:Body></SOAP-ENV:Envelope> SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 500 Internal Ser +ver Error Connection: close Date: Tue, 20 Oct 2015 06:46:42 GMT Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=utf-8 Client-Date: Tue, 20 Oct 2015 06:44:52 GMT Client-Peer: 10.230.0.22:7782 Client-Response-Num: 1 Set-Cookie: JSESSIONID=9B4FC1D1F720D25705C2CC7FC46B9616.server1; Path= +/ X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0 da +te=200610162339)/Tomcat-5.5 X-UA-Compatible: IE=EmulateIE7 <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv= +"http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header /><soapen +v:Body><soapenv:Fault><faultcode>soapenv:Client</faultcode><faultstri +ng>Data binding error</faultstring><detail /></soapenv:Fault></soapen +v:Body></soapenv:Envelope>