2011-08-18 41 views
4

因此,這裏是我的SOAP::Lite代碼移動到XML ::編譯:: SOAP

#!/usr/bin/perl 
use 5.006; 
use strict; 
use warnings; 
use SOAP::Lite +trace => [ 'debug' ]; 

my $req1 = SOAP::Lite->new(
    readable => 1, 
    autotype => 0, 
    proxy => 'https://ics2wstest.ic3.com/commerce/1.x/transactionProcessor', 
); 

$req1->requestMessage(
    \SOAP::Data->new(
     name => 'item', 
     attr => { foo => '0' }, 
     value => \SOAP::Data->new(
      name => 'foo', 
      value => 1, 
     ), 
    ), 
); 

它生成此XML

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
<requestMessage> 
    <c-gensym9> 
    <item foo="0"> 
     <foo>1</foo> 
    </item> 
    </c-gensym9> 
</requestMessage> 
</soap:Body> 
</soap:Envelope> 

我怎麼能產生同樣的事情(不gensym's)使用XML::Compile::SOAP

回答

2

嘗試

cpan BERLE/SOAP-Simple-0.00_03.tar.gz 

然後

#!/usr/bin/perl -- 
use strict; use warnings; 
use Data::Dumper; 
use SOAP::Simple; 
my $wsdlfile = '...'; 
my $soap = SOAP::Simple->new($wsdlfile); 
print Dumper(
    $soap->requestMessage(
     item => [ 
      { foo => 1 }, 
     ], 
    ) 
); 


或看到 http://cpansearch.perl.org/src/MARKOV/XML-Compile-SOAP-2.24/t/53wsdlrpclit.t和複製 http://cpansearch.perl.org/src/MARKOV/XML-Compile-SOAP-2.24/t/examples/rpc-literal/element.pl並使用

schema2example -s element.wsdl -s type.wsdl -x requestMessage.xml 

以產生用於element.pl一%請求,所以在結束你最終的一些像

#!/usr/bin/perl 
use warnings; 
use strict; 

# general debugging of XML::Compile modules 
#~ use Log::Report mode => 3; 

# Data::Dumper is your friend in understanding the answer 
use Data::Dumper; 
$Data::Dumper::Indent = 1; 

# The features we use 
use XML::Compile::WSDL11; 
use XML::Compile::SOAP11; 
use XML::Compile::Transport::SOAPHTTP; # we fake an HTTP server 

# 
# During initiation 'compile time' 
# 

my $wsdl = XML::Compile::WSDL11->new('element.wsdl'); 
my $call = $wsdl->compileClient('using_element' 
#~ , transport_hook => \&fake_server # hook simulates a remote server at test 
); 

# 
# Reuse often at 'run time' 
# 

my %request = 
(item => 
    [ { foo => 1} 
    ] 
); 

my $answer = $call->(requestMessage => \%request); 

# Useful for debugging. Also useful to report to syslog 
# my ($answer, $trace) = $call->(\%request); 
# $trace->printTimings; 

# When you do not know how the answer is structured 
#print Dumper $answer; 

if($answer->{Fault}) 
{ print "Oops\n"; 
} 
else 
{ print "*** RESULT=$answer->{answer_via_element}{result}\n"; 
} 

exit 0; 

事情一旦你生成你想要的XML,嘗試生活

+0

這個例子忽略了富=「0」屬性 – plusplus