2011-01-13 6 views
3

このWSDLへのリクエストを作成するのに問題があります。それはauthHeadersを必要とし、私はそれらを追加する多くの運がないです。これは私がしようとしているものです:Perl SOAP :: LiteリクエストにauthHeaderを追加する


# 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 ::ヘッダー参照の予想

String値

私は要求しています方法は、2つの文字列パラメータを持っていますどちらもオプションです。そして提案?

答えて

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); 

コールメソッドを使用するには、soapオブジェクトにプロキシ(エンドポイント)を定義する必要があります。これは誰かが道を歩くのに役立つことを願っています。

+0

ありがとう、これは私を助けました。 – pojo

+0

あなたは "コールメソッドを使用するには、あなたのsoapオブジェクトにプロキシ(エンドポイント)を定義する必要があります。 私はどのように私の石鹸オブジェクトにプロキシを定義できますか?親切にコード – Raheel

+0

を提供するRaheel、それは石鹸のコンストラクタにあります - 例 'my $ soap = SOAP :: Lite-> proxy($ url);' – Patrick

関連する問題