Fehlerbehandlung in Web Services

Aufruf eines zusätzlichen Parameters

Als Nächstes verwenden Sie beim Aufruf der Funktion oder der Subroutine, welche den Fehler erzeugen soll bzw. kann, einen zusätzlichen Parameter vom Typ WS_Fault. Diesen müssen Sie als letzten innerhalb der Parameterliste angeben. Andernfalls erhalten Sie beim Kompilieren des Programmcodes eine Fehlermeldung (Bild 3).

Bild 3: Die Fehlermeldung beim Kompilieren des Programmcodes.
Bild 3: Die Fehlermeldung beim Kompilieren des Programmcodes.

Function getReiseziele(Reisenummer As String, f1 As
WS_Fault) As FeldReiseziele

Um auch unerwartete Fehler abzufangen, aktivieren Sie die Fehlerbehandlung:

On Error Goto Fehler

Innerhalb der Routine erzeugen Sie mit der Methode setFault() an den notwendigen Stellen einen Fehler:

f1.setFault(True)

Anschließend definieren Sie den zu übergebenden Fehlertext:

Call f1.setFaultString("Keine Reise mit der angegebenen
Nummer vorhanden.")

Listing 2 zeigt den um die Verwendung des Elements Fault erweiterten Beispiel-Web Service. Tritt beim Aufruf des Web Service ein Fehler auf, wird der faultcode vom Domino Server generiert und zusammen mit dem faultstring in der SOAPResponse übergeben. Im Beispiel wird eine ungültige Reisenummer beim Aufruf des Web Service verwendet. Bild 4 zeigt die daraus resultierende SOAP-Response. Im Unterschied zur Vermeidung des Fehlers mittels einer If-Anweisung, bei der als normaler Rückgabewert ebenfalls ein Fehlertext zurückgeliefert werden kann (Bild 2), ist das jetzige Ergebnis über das Element Fault eindeutig als Fehlermeldung zu erkennen.

Class ReisezielInfo
Sub new
Set se = New NotesSession
Set db = se.CurrentDatabase
Set vw = db.GetView("AlleReisen")
End Sub
Function getReiseziele(Reisenummer As String, f1 As WS_Fault) As
FeldReiseziele
On Error Goto Fehler
Dim doc As NotesDocument
Dim i As Integer
Set getReiseziele = New FeldReiseziele
Set doc = vw.GetDocumentByKey(Reisenummer)
If doc Is Nothing Then
f1.setFault(True)
Call f1.setFaultString("Keine Reise mit der angegebenen Nummer
vorhanden.")
Else
Redim getReiseziele.Reiseziele(0 To Ubound(doc.Reiseziel))
For i = 0 To Ubound(doc.Reiseziel)
getReiseziele.Reiseziele(i) = doc.Reiseziel(i)
Next
End If
Exit Function
Fehler:
f1.setFault(True)
Call f1.setFaultString("Ein Fehler ist aufgetreten.")
Exit Function
End Function End Class

Die im Artikel beschriebene Beispieldatenbank steht auf der Website des Autors zum kostenlosen Download zur Verfügung.