Die folgenden Informationen beziehen sich auf Versionen ab 1.20 des webservice_SmartGate.
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):
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()
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.
Im folgenden provozieren wir mal einige typische Fehlerszenarien:
URL | Beschreibung |
---|---|
http://dbap-demo.dstore.de/default/engine/mi_GetUnits?UnitID=260 | Parameter 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=260 | Parameter einer Prozedur existiert nicht (gleichzeitig ein Beispiel für Fall 1 der Fehlermeldungen oben) |
http://dbap-demo.dstore.de/default/engine/im_CountProducts | Falsche 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=Artikelliste | Parameter „Template“ hat falschen Wert |
Weitere häufige Fehler die nicht durch „klickbare“ Beispiele zu provozieren sind:
In der Methode item/get wurden mit dem webservice_SmartGate Version 1.23 folgende Fehlercodes eingeführt um bestimmte Fehlersituationen gesondert zu behandeln:
100 | Invalid index field |
101 | Invalid filter value |
102 | FieldQueryTranslation failed |
103 | Price fields not available |
104 | Invalid wildcard position |
105 | Search Parameter too short |
106 | Template unknown |
107 | Field is not sortable |
108 | Sort by SortNo not allowed |
109 | Unknown sort type |
110 | StartAtRowNo too high |
111 | StartAtRowNo too low |
112 | Parameter is static |
113 | Index not configured |
114 | Too many clauses |
115 | Message Digest error |
116 | Unable to read GetItems config |
117 | Corrupt index |
118 | Streaming error |
119 | IO Error |
120 | Interrupted |