SOAP::Lite Web Service erweitern

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.

Themenseiten: Software, Webentwicklung

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu SOAP::Lite Web Service erweitern

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *