Categories: Software

SOAP::Lite Web Service erweitern

Als alter Perl-Hacker und Web Services-Veteran war ich überrascht, mit wie wenig Aufwand man mit SOAP::Lite loslegen kann (lesen Sie dazu den Artikel Ein Web Service mit SOAP::Lite). Ich kenne kein anderes so umfangreiches SOAP-Toolkit, das so einfach zu verwenden, schnell einzusetzen und flexibel ist. In den folgenden Beispielen werde ich Ihnen zeigen, wie man

  • auf Parameter-Elemente mit Namen zugreift;
  • auf SOAP Header-Elemente in einem Request zugreift;
  • einem Response einen SOAP-Header hinzufügt;
  • eine SOAP-Fault erzeugt;
  • eine Response unter Verwendung von Document Style Encoding erzeugt.

Auf ein SOAP Body-Element mit Namen zugreifen

Standardmäßig schlüsselt SOAP::Lite die einzelnen Daten der SOAP Request-Methode auf und speichert sie in einem entsprechenden Array. Dieses Array wird an die Subroutine des Request-Handlers übergeben. Die Request-Handler-Subroutine kann dann auf diese Parameter zugreifen wie auf jede andere Eingabe mit Parametern. Dies macht die Erstellung von Prototypen unterschiedlicher Services einfach, geht aber u.U. auf Kosten der Flexibilität. Wenn Ihre Methode optionale Parameter hat, wenn sie Attribute hat, auf die Sie zugreifen müssen, oder wenn es nicht auf die Reihenfolge der Parameter ankommt, die Ihrer Methode übergeben werden, dann ist diese zusätzliche Stufe der Vereinfachung eher schädlich als nützlich.

SOAP::Lite bietet eine bequemere Möglichkeit, auf Elemente im Request mit Namen zuzugreifen. Dies gibt einem die zusätzliche Flexibilität, was die Arten von Interfaces für den Service betrifft, die man festlegen möchte. Hier ein Beispiel dafür:


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 $str;
12 }
13 1;

Durch die Erweiterung des SOAP::Server::Parameters-Packages in Zeile 5 und 6 kann man den SOAP-Envelope nach Daten-Elementen abfragen. Um auf den SOAP-Body zuzugreifen, entfernt man zuerst mit der Funktion pop das SOAP-Envelope-Objekt, das automatisch an die Methode übergeben wird. Dann ruft man die Subroutine dataof() auf, um ein SOAP::Data-Objekt zurück zu erhalten, das dem Element name/XPath entspricht, das man angegeben hat (Zeile 10). Da dataof() ein SOAP::Data-Objekt zurückgibt, haben Sie Zugriff auf alle Subroutingen von SOAP::Data, einschließlich value(), name(), type(), uri() und attr(), und können so direkt auf Wert, Namen, Datentyp, URI und alle Attribute des jeweiligen Elements zugreifen.

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

Podcast: „Die Zero Trust-Architektur ist gekommen, um zu bleiben“

Unternehmen greifen von überall aus auf die Cloud und Applikationen zu. Dementsprechend reicht das Burg-Prinzip…

9 Stunden ago

Google schließt weitere Zero-Day-Lücke in Chrome

Hacker nutzen eine jetzt gepatchte Schwachstelle im Google-Browser bereits aktiv aus. Die neue Chrome-Version stopft…

11 Stunden ago

Hacker greifen Zero-Day-Lücke in Windows mit Banking-Trojaner QakBot an

Microsoft bietet seit Anfang der Woche einen Patch für die Lücke. Kaspersky-Forscher gehen davon aus,…

12 Stunden ago

Adobe schließt neun kritische Lücken in Reader und Acrobat

Das jüngste Update bringt insgesamt zwölf Fixes. Schadcode lässt sich unter Umständen ohne Interaktion mit…

19 Stunden ago

Fabrikautomatisierung: Siemens integriert SPS-Ebene

Eine softwarebasierte Workstation soll es Ingenieuren erlauben, sämtliche Steuerungen zentral zu verwalten. Pilotkunde ist Ford.

20 Stunden ago

Ebury-Botnet infiziert 400.000 Linux-Server weltweit

Kryptodiebstahl und finanzieller Gewinn sind laut ESET-Forschungsbericht die vorrangigen neuen Ziele.

1 Tag ago