Parameter über Soap senden
Seife
- perl
Hallo,
ich habe eine Frage zu SOAP::Lite.
Und zwar geht es um Abfragen an openligadb.de.
Das dort angegebene Beispiel in php funktioniert einwandfrei (nur um sicherzustellen, dass die Daten überhaupt da sind):
############ php #######################
<?php
$options = array('encoding' => 'UTF-8',
'connection_timeout' => 5,
'exceptions' => 1,
);
$location = 'http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx?WSDL';
try
{
$client = new SoapClient($location, $options);
$params = new stdClass;
$params->MatchID = 9998;
$response = $client->GetMatchByMatchID($params);
}
catch (SoapFault $e)
{
die($e->faultcode . ': ' . $e->faultstring);
}
catch (Exception $e)
{
die($e->getCode() . ': ' . $e->getMessage());
}
print_r($response->GetMatchByMatchIDResult);
############ php #######################
Nun in Perl:
############ perl #######################
use strict;
use warnings;
use SOAP::Lite;
use Data::Dumper;
my $soap = SOAP::Lite->new();
my $client = $soap
->soapversion('1.2')
->outputxml('true')
->service('http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx?WSDL');
print Dumper($client->GetMatchByMatchID(9998));
############ perl #######################
Das liefert leider eine leer Datenstruktur (im Gegensatz zur obigen php-Lösung). Methoden, die keine Parameter erfordern, funktionieren dagegen perfekt.
Was mache ich falsch?
Danke für jeden Hinweis!
hi,
my $soap = SOAP::Lite->new();
my $client = $soap ...
Warum sind das bei Dir zwei Dinge? SOAP::Lite->new();
liefert Dir den $client. Welche Parameter an new() zu übergeben sind, steht auch in der Dokumentation.
Hotti
hi,
my $soap = SOAP::Lite->new();
my $client = $soap ...Warum sind das bei Dir zwei Dinge?
SOAP::Lite->new();
liefert Dir den $client. Welche Parameter an new() zu übergeben sind, steht auch in der Dokumentation.
Hi,
ja, hätte man in einem Rutsch schreiben können - ist schon klar, dass $client oder $soap überflüssig ist.
Wäre ich mit der Doku klargekommen, hätte ich nicht gefragt! ;-)
Z.B. was als proxy anzugeben ist usw. - desw. habe ich zum Vergleich die Lösung in php gepostet. Also, was fehlt in meiner Version?
vG
Seife
hi,
Wäre ich mit der Doku klargekommen, hätte ich nicht gefragt! ;-)
Logo ;)
Mit solcher Art Doku habe ich auch zu kämpfen, schön ist die nicht. Sag Deinem Chef, dass Du ein bischen mehr Zeit brauchst, dafür hat jeder Verständnis ;)
Viele Grüße,
Horst Wühlmaus
hi,
Wäre ich mit der Doku klargekommen, hätte ich nicht gefragt! ;-)
Logo ;)
Mit solcher Art Doku habe ich auch zu kämpfen, schön ist die nicht. Sag Deinem Chef, dass Du ein bischen mehr Zeit brauchst, dafür hat jeder Verständnis ;)Viele Grüße,
Horst Wühlmaus
Ok, sag ich mir!
Grüße,
Susi Seife
Was mache ich falsch?
Erstmal nix schlimmes, aber es hätte dir geholfen, zu wissen, dass auf der Gegenseite ein .NET-SOAP-Stack von Microsoft sitzt, die sich noch nie an Standards halten konnten. (Die Endung .asmx ist der Hinweis.) In der Doku zu SOAP::Lite stehen verstreut diverse Workarounds, die man einbauen muss, damit es klappt.
use SOAP::Lite qw();
use URI qw();
our $NAMESPACE = 'http://msiggi.de/Sportsdata/Webservices';
my $soap = SOAP::Lite->new(proxy => 'http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx');
$soap->service('http://www.OpenLigaDB.de/Webservices/Sportsdata.asmx?WSDL');
$soap->default_ns($NAMESPACE);
$soap->on_action(sub {
my ($self, $service) = @_;
my $u = URI->new($NAMESPACE);
$u->path_segments($u->path_segments, $service);
return $u;
});
my $message = $soap->GetMatchByMatchID(SOAP::Data->new(name => 'MatchID', value => 9998));
# use Data::Dump::Streamer qw(DumpLex); DumpLex $message;
Siehe SOAP::SOM, um die Ergebnisse aus dem Objekt $message herauszupfriemeln.
Was mache ich falsch?
Erstmal nix schlimmes, aber es hätte dir geholfen, zu wissen, dass auf der Gegenseite ein .NET-SOAP-Stack von Microsoft sitzt, die sich noch nie an Standards halten konnten. (Die Endung .asmx ist der Hinweis.) In der Doku zu SOAP::Lite stehen verstreut diverse Workarounds, die man einbauen muss, damit es klappt.
...
Siehe SOAP::SOM, um die Ergebnisse aus dem Objekt $message herauszupfriemeln.
1000 Dank!
Da wäre ich nie drauf gekommen! Das mit SOM hatte ich gelesen, aber nicht hinbekommen. Woher hast Du das mit msiggi.de? Ich hatte es in einem Beispiel gesehen, aber für eine alte Version gehalten....
Nochmal ganz großen Dank!!!
Seifenlauge
Woher hast Du das mit msiggi.de?
Steht jeweils immer als XML-Namensraum in den HTTP-Nachrichten. Ich habe den Verkehr von der PHP-Version mittels Wireshark mitgeschnitten und mit den Ergebnissen der Perl-Version verglichen, und diese dann schrittweise verbessert, bis es ähnlich/brauchbar genug für jenen SOAP-Dienst war. Wie schon gesagt, lieferte die Doku die Hinweise darauf, was ich wo ändern musste.
Woher hast Du das mit msiggi.de?
Steht jeweils immer als XML-Namensraum in den HTTP-Nachrichten. Ich habe den Verkehr von der PHP-Version mittels Wireshark mitgeschnitten und mit den Ergebnissen der Perl-Version verglichen, und diese dann schrittweise verbessert, bis es ähnlich/brauchbar genug für jenen SOAP-Dienst war. Wie schon gesagt, lieferte die Doku die Hinweise darauf, was ich wo ändern musste.
Deine Version funktioniert allerdings auch irgendwie nicht.
Hast Du Dir mal "Dumper($result)" ausgeben lassen? Da kommen auf einmal Quelltexte angeflogen?!
Deine Version funktioniert allerdings auch irgendwie nicht.
Diesen Schluss zu ziehen, ist schon ein starkes Stück. Es funktioniert, es ist getestet. Ich bleibe bei dieser Ansicht bis zum Beweis des Gegenteils.
Hast Du Dir mal "Dumper($result)" ausgeben lassen?
Ja, hab ich. Das steht sogar als auskommentiertes Debuggingwerkzeug noch unten am meinem Code dran, wenn du genau hinschaust.
Da kommen auf einmal Quelltexte angeflogen?!
Na und?