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.
Eine schwerwiegende Anfälligkeit hebelt die Sicherheitsfunktion Seitenisolierung auf. Betroffen sind Chrome für Windows, macOS und…
DeepL Voice ermöglicht Live‑Übersetzung von Meetings und Gesprächen in 13 Sprachen.
Betroffen sind Windows und Windows Server. Microsoft patcht aber auch Schwachstellen in Excel, Word und…
Es lässt sich um bis zu 50 Prozent dehnen. Allerdings besitzt es eine deutliche geringere…
Allerdings nimmt auch die Resilienz gegenüber Cyberattacken zu. Das BSI hat außerdem die Cybersicherheit anstehender…
Es ist das größte Wachstum in einem Jahr seit 2021. Unter anderem lässt das Interesse…