2011-01-13 3 views
3

Ich habe Probleme beim Erstellen einer Anfrage an diese WSDL, die funktioniert; es benötigt authHeaders und ich habe nicht viel Glück sie hinzuzufügen. Das ist, was ich versuche:Hinzufügen von AuthHeader zu Perl SOAP :: Lite-Anforderung


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

Die Antwort, die ich erhalten, wenn dies zu tun ist:

String-Wert anstelle von SOAP :: Header-Referenz erwartet

Die Methode, die ich anfordernden bin zwei String-Parameter , beide optional. Und Vorschläge?

Antwort

6

Ich konnte Hilfe von der SOAP :: Lite Mailingliste bekommen. Wenn ich meine eigenen Header übergeben möchte, muss ich die Aufrufmethode anstelle des tatsächlichen Methodennamens verwenden.


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

Um die Aufrufmethode zu verwenden, müssen Sie einen Proxy (Endpunkt) für Ihr Soap-Objekt definieren. Hoffe, das ist hilfreich für jemand anderen auf der Straße.

+0

Danke, das hat mir geholfen. – pojo

+0

Sie haben gesagt: "Um die Aufrufmethode zu verwenden, müssen Sie einen Proxy (Endpunkt) für Ihr Soap-Objekt definieren." Wie kann ich einen Proxy für mein Soap-Objekt definieren? bitte geben Sie den Code – Raheel

+0

Raheel, es ist in der Soap-Konstruktor - Beispiel 'my $ soap = SOAP :: Lite-> Proxy ($ url);' – Patrick

Verwandte Themen