Benutzer-Werkzeuge

Webseiten-Werkzeuge


webservice:errorhandling

Clientseitige Fehlerbehandlung

:!: Die folgenden Informationen beziehen sich auf Versionen ab 1.20 des webservice_SmartGate.

Grundsätzlich

Um zu erkennen ob es bei der Ausführung des Requests einen Fehler gab, prüft man auf das Vorhandensein eines Elementes „ErrorResponse“ im Body der Rückgabe (Ausnahme bei engine-Methoden beachten, s. nächster Abschnitt). Liefert der folgende XPath Ausdruck ein Ergebnis gab es einen Fehler:

//ErrorResponse

Die Fehlermeldungen sind abhängig davon ob der Fehler vor oder nach dem Beginn der Auslieferung des Ergebnisses (dem „Streaming“) aufgetreten ist an den folgenden Stellen zu finden (Beispiele siehe weiter unten):

  • Fall 1: Einzelne Meldung direkt zum ErrorResponse-Element (vor dem Beginn des Streamings), XPath-Ausdruck:
    //ErrorResponse/text()
  • Fall 2: Eine oder mehrere Meldungen unterhalb der Errors-Elemente, XPath-Ausdruck:
    //ErrorResponse/Response/Errors/Error/Message

engine/execute

Kommt es bei der Methode engine/execute bzw. engine/<Prozedurname> zu einem Fehler, ist dies i.d.R. an einem Element „ErrorCode“ als Nachfolger des fehlgeschlagenen „Statement“ zu erkennen. Da es aber bestimmte Fehler gibt (z.B. die Prozedur ist nicht vorhanden oder kann erst gar nicht ausgeführt werden), bei denen kein „ErrorCode“ geliefert werden kann, ist auf jeden Fall zusätzlich auf ein „ErrorResponse“-Element (wie im vorherigen Abschnitt beschrieben) zu prüfen. Das Attribut „Code“ liefert den Fehler-Code und im Element „Messages“ befindet sich eine Klartext-Fehlermeldung.

Der XPath-Ausdruck zur Ermittlung des Fehlercodes (und damit implizit ob ein Fehler aufgetreten ist) lautet:

//Statement/ErrorCode[@Code != 0]/Code

Die Meldungen können über folgenden XPath-Ausdruck aus dem XML extrahiert werden:

//Statement/Messages/Message/text()

HTTP-Status-Codes

Der HTTP-Status-Code alleine eignet sich nicht zur Auswertung ob der Request erfolgreich ausgeführt wurde. Der Status-Code wird zwar so oft wie möglich gesetzt, jedoch unterstützt das webservice_SmartGate ein Streaming von Ergebnissen via chunked transfer encoding. Kommt es also zu einem Fehler nachdem bereits Daten (und damit der Response-Header) an den Client geschickt wurden ist der Status-Code 200, es existiert aber ein ErrorResponse-Element.

Beispiele für Fehler

Im folgenden provozieren wir mal einige typische Fehlerszenarien:

URL Beschreibung
http://dbap-demo.dstore.de/default/engine/mi_GetUnits?UnitID=260Parameter einer Prozedur hat einen ungültigen (gleichzeitig ein Beispiel für ein Fehler-XML der engine/execute)
http://dbap-demo.dstore.de/default/engine/mi_GetUnits?EinheitID=260Parameter einer Prozedur existiert nicht (gleichzeitig ein Beispiel für Fall 1 der Fehlermeldungen oben)
http://dbap-demo.dstore.de/default/engine/im_CountProductsFalsche HTTP-Methode für die Prozedur (gleichzeitig ein Beispiel für Fall 2 der Fehlermeldungen oben)
http://dbap-demo.dstore.de/default/item/get?Template=ArtikellisteParameter „Template“ hat falschen Wert

Weitere häufige Fehler die nicht durch „klickbare“ Beispiele zu provozieren sind:

item/get

:!: In der Methode item/get wurden mit dem webservice_SmartGate Version 1.23 folgende Fehlercodes eingeführt um bestimmte Fehlersituationen gesondert zu behandeln:

100Invalid index field
101Invalid filter value
102FieldQueryTranslation failed
103Price fields not available
104Invalid wildcard position
105Search Parameter too short
106Template unknown
107Field is not sortable
108Sort by SortNo not allowed
109Unknown sort type
110StartAtRowNo too high
111StartAtRowNo too low
112Parameter is static
113Index not configured
114Too many clauses
115Message Digest error
116Unable to read GetItems config
117Corrupt index
118Streaming error
119IO Error
120Interrupted
webservice/errorhandling.txt · Zuletzt geändert: 13.11.2014 (Externe Bearbeitung)

Seiten-Werkzeuge