SOAP::Lite Web Service erweitern

Es gibt viele SOAP Faults (Fehlermeldungen), die SOAP::Lite für Sie erzeugen kann. Falls jemand z.B. eine Methode aufruft, die im Dispatch-Handler nicht definiert ist, würde SOAP::Lite eine SOAP Fault mit etwa dem folgenden Fault-String zurückgeben: Failed To Locate Method (Foo) In Class (Echo). Es gibt noch weitere SOAP Faults, die SOAP::Lite für Sie automatisch erzeugt. Viele davon werden Ihnen beim Experimentieren mit SOAP::Lite begegnen. Leider sind es einfach zu viele, um sie alle hier aufzuführen.

Aber was ist mit Anwendungsfehlern, die SOAP::Lite noch nicht abfangen kann und für die es deshalb auch keine SOAP Faults zurückgibt? Erfahrene Perl-Programmierer, die mit der die()-Funktion von Perl vertraut sind, die ein Perl-Programm abbricht und eine entsprechende Fehlermeldung an STDERR ausgibt, werden keine Schwierigkeit haben, SOAP Faults von ihren Web Services erzeugen zu lassen. Durch die einfache Verwendung der die()-Funktion im Kontext eines Service erzeugt SOAP::Lite automatisch die jeweilige Fehlermeldung und gibt sie als SOAP Fault zurück.

Eine schlichte Fehlermeldung an die() zu übergeben, liefert natürlich nicht den aussagekräftigsten Output. Wenn man allerdings ein SOAP::Fault-Objekt an die die()-Funktion übergibt, kann man jeden oder alle dieser Werte setzen: fault code, fault string, fault actor und fault details. SOAP::Lite verwandelt automatisch das SOAP::Fault-Objekt in eine gültige SOAP Fault. Das folgende Code-Beispiel kann überall innerhalb eines Request-Handlers verwendet werden, um die entsprechende SOAP Fault zurückzugeben:


die SOAP::Fault->faultcode('Server.MyFaultCode')
->faultstring('The echo service died')
->faultdetail(bless {code => 1} => 'BadError')
->faultactor('http://$YOUR_NAMESPACE_$HERE');

Resultierende SOAP Fault


<xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:namesp1="http://namespaces.soaplite.com/perl">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xsi:type="xsd:string">SOAP-ENV:Server.
MyFaultCode</faultcode>
<faultstring xsi:type="xsd:string">The echo service died</
faultstring>
<detail>
<BadError xsi:type="namesp1:BadError">
<code xsi:type="xsd:int">1</code>
</BadError>
</detail>
<faultactor xsi:type="xsd:string">http://$YOUR_NAMESPACE_
$HERE</faultactor>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

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 *