|
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