2011-01-13 134 views
3

我在創建對此WSDL的請求時遇到了一些麻煩;它需要authHeaders,我沒有多少運氣添加它們。這就是我想:將authHeader添加到Perl SOAP :: Lite請求


# make proxy for the service 
my $soap = SOAP::Lite->service($wsdl); 

# add fault hanlder 
$soap->on_fault(

    sub { # SOAP fault handler 
     my $soap = shift; 
     my $res = shift; 

     # Map faults to exceptions 
     if(ref($res) eq '') { 
      die($res); 
     } 
     else { 
      die($res->faultstring); 
     } 

     return new SOAP::SOM; 
    } 

); 

# authentication request headers 
my @headers = (
    SOAP::Header->name('user')->value('[email protected]')->uri($apins), 
    SOAP::Header->name('password')->value('mypassword')->uri($apins), 
    SOAP::Header->name('appName')->value('TestApp')->uri($apins), 
    SOAP::Header->name('appVersion')->value('0.02')->uri($apins) 
); 

# request method 
print $soap->getCompanyInfo('NB', @headers); 

這樣做時,我得到的迴應是:預期的,而不是SOAP ::頭參考

字符串值

我請求的方法有兩個字符串參數,都是可選的。和建議?

回答

6

我能夠從SOAP :: Lite郵件列表中獲得幫助。如果我想傳遞我自己的頭文件,我必須使用call方法而不是實際的方法名稱。


# create header for requests 
my $authHeader = SOAP::Header->name("xsd:authHeader" => 
\SOAP::Header->value(
    SOAP::Header->name('xsd:user')->value($s7user)->type(''), 
    SOAP::Header->name('xsd:password')->value($s7pass)->type(''), 
    SOAP::Header->name('xsd:appName')->value('TestApp')->type(''), 
    SOAP::Header->name('xsd:appVersion')->value('0.03')->type('') 
)); 

# create data to pass as method paramaters 
my $params = SOAP::Data->name('ns:email')->value($s7user)->type(''); 

# request method 
$soap->call('checkLogin', $params, $authHeader); 

爲了使用call方法,你需要你的SOAP對象上定義代理(終點)。希望這對路上的其他人有幫助。

+0

謝謝,這對我有幫助。 – pojo 2012-02-07 11:30:25