Zugriff auf Header-Daten im Request
Die Änderungen am Programmcode für den Zugriff auf Elemente des SOAP-Headers im Request sind im Prinzip identisch mit den entsprechenden Änderungen für den Zugriff über Namen auf Elemente des SOAP-Body. Um auf Elemente des Headers zuzugreifen, genügt es, die Subroutine headerof() wie folgt aufzurufen:
7 sub echo { 8 my $self = shift; 9 my $envelope = pop; 10 my $header = $envelope->headerof(" //MyHeaderElementName")->value; 12 # Hier kann man etwas mit den Header-Daten machen 13 my $str = $envelope->dataof("//echo/whatToEcho")->value; 14 return $str; 15 }
So wie bei der dataof()-Subroutine gibt die headerof()-Subroutine ein SOAP::Data-Element zurück, mit dem man auf Namen, Wert, Attribute, Namensraum und Datentyp des entsprechenden Header-Elements zugreifen kann.
Response im Klartext
In den bisherigen Beispielen verwendete die SOAP-Response die Standard SOAP-Codierung von SOAP::Lite. Sollten Sie eines der Beispiele im Debugging-Modus ausgeführt haben, haben Sie sicherlich die merkwürdigen Element-Namen im SOAP-Body der Response bemerkt. Schauen Sie sich dazu einmal das Beispiel für eine SOAP-Response unten an – und dort das Element namens s gensym3.
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENC=http://schemas.xmlsoap.org/soap/encoding/ SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <namesp1:echoResponse xmlns:namesp1="urn:Echo"> <s-gensym3 xsi:type="xsd:string">Echo this statement</ s-gensym3> </namesp1:echoResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Falls Ihr Service verlangt, dass dieses Element ausdrücklich benannt wird oder dass der SOAP-Body in der Response komplexere Datenstrukturen enthält, ändern Sie Ihren Request-Handler einfach so, dass er ein SOAP::Data-Objekt zurückgibt statt eines einfachen Skalarwertes. SOAP::Lite wird automatisch das zurückgegebene SOAP::Data-Element in die entsprechende XML-Repräsentation umwandeln. Damit haben Sie die volle Kontrolle über das Ausgabeformat Ihrer Methode.
1 #!/usr/bin/perl 2 # Dateiname: Echo.pm 3 package Echo; 4 use strict; 5 use vars qw(@ISA); 6 @ISA = qw(SOAP::Server::Parameters); 7 sub echo { 8 my $self = shift; 9 my $envelope = pop; 10 my $str = $envelope->dataof("//echo/whatToEcho")->value; 11 return SOAP::Data->name("whatWasEchoed" => "$str"); 12 } 13 1;
Das Erstellen komplexer XML-Datenstrukturen mit SOAP::Lite ist nicht immer ganz einfach. Weitere Informationen darüber, wie man komplexe XML-Datenstrukturen mit SOAP::Lite erstellt, nebst praktischen Beispielen zu SOAP::Lite finden Sie in diesem Artikel.
Neueste Kommentare
Noch keine Kommentare zu SOAP::Lite Web Service erweitern
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.