2011-01-13 128 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