|
21 | 21 |
|
22 | 22 | import co.elastic.clients.elasticsearch._types.ErrorCause; |
23 | 23 | import co.elastic.clients.elasticsearch._types.ErrorResponse; |
| 24 | +import co.elastic.clients.json.JsonData; |
24 | 25 | import co.elastic.clients.json.JsonpDeserializer; |
25 | 26 | import co.elastic.clients.json.JsonpDeserializerBase; |
26 | 27 | import co.elastic.clients.json.JsonpMapper; |
@@ -145,28 +146,43 @@ public JsonpDeserializer<ErrorResponse> errorDeserializer(int statusCode) { |
145 | 146 | @Override |
146 | 147 | public ErrorResponse deserialize(JsonParser parser, JsonpMapper mapper, JsonParser.Event event) { |
147 | 148 | ErrorResponse.Builder builder = new ErrorResponse.Builder(); |
| 149 | + ErrorCause.Builder errorCauseBuilder = new ErrorCause.Builder(); |
| 150 | + ErrorCause errorCause = null; |
148 | 151 | builder.status(statusCode); |
149 | 152 | while ((event = parser.next()) != JsonParser.Event.END_OBJECT) { |
150 | 153 | JsonpUtils.expectEvent(parser, JsonParser.Event.KEY_NAME, event); |
151 | 154 | switch (parser.getString()) { |
152 | 155 | case "error": |
153 | 156 | switch (event = parser.next()) { |
154 | 157 | case VALUE_STRING: |
155 | | - builder.error(e -> e.reason(parser.getString()).type("http_status_" + statusCode)); |
| 158 | + errorCauseBuilder.reason(parser.getString()).type("http_status_" + statusCode); |
156 | 159 | break; |
157 | 160 | default: |
158 | 161 | JsonpUtils.expectEvent(parser, JsonParser.Event.START_OBJECT, event); |
159 | | - builder.error(ErrorCause._DESERIALIZER.deserialize(parser, mapper, event)); |
| 162 | + errorCause = ErrorCause._DESERIALIZER.deserialize(parser, mapper, event); |
160 | 163 | break; |
161 | 164 | } |
162 | 165 | break; |
163 | 166 | case "status": |
164 | 167 | JsonpUtils.expectNextEvent(parser, JsonParser.Event.VALUE_NUMBER); |
165 | 168 | builder.status(parser.getInt()); |
166 | 169 | break; |
| 170 | + // could be additional information, deserializing it into error cause's metadata |
| 171 | + // for example 404 on GetAliasRequest |
| 172 | + default: |
| 173 | + String key = parser.getString(); |
| 174 | + event = parser.next(); |
| 175 | + JsonpUtils.expectEvent(parser, JsonParser.Event.START_OBJECT, event); |
| 176 | + errorCauseBuilder.metadata(key, JsonData._DESERIALIZER.deserialize(parser, mapper)); |
| 177 | + break; |
167 | 178 | } |
168 | 179 | } |
169 | | - |
| 180 | + if (errorCause != null) { |
| 181 | + builder.error(errorCause); |
| 182 | + } |
| 183 | + else { |
| 184 | + builder.error(errorCauseBuilder.build()); |
| 185 | + } |
170 | 186 | return builder.build(); |
171 | 187 | } |
172 | 188 | }; |
|
0 commit comments