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>
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.