diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-06-28 21:32:21 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-06-28 21:32:21 +0200 |
commit | 91301d6a6672c812e2ea0bb78fc1517d2d18dfb0 (patch) | |
tree | a7ea8439dd0fb0575ccec3ecf810797bd2bc2d4b /vespa-feed-client/src/main/java | |
parent | 0e888703ca92c8fe7a4a55e607e8e5a883c6bf4e (diff) |
Parse tracese properly
Diffstat (limited to 'vespa-feed-client/src/main/java')
-rw-r--r-- | vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpFeedClient.java | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpFeedClient.java b/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpFeedClient.java index 6e0d9aa5ec2..95208d06208 100644 --- a/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpFeedClient.java +++ b/vespa-feed-client/src/main/java/ai/vespa/feed/client/HttpFeedClient.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.JsonToken; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.StringJoiner; @@ -129,14 +130,27 @@ class HttpFeedClient implements FeedClient { if (parser.nextToken() != JsonToken.START_OBJECT) throw new ResultParseException( documentId, - "Expected '" + JsonToken.START_OBJECT + "', but found '" + parser.currentToken() + "' in: " - + new String(response.body(), UTF_8)); + "Expected '" + JsonToken.START_OBJECT + "', but found '" + parser.currentToken() + "' in: " + + new String(response.body(), UTF_8)); String name; while ((name = parser.nextFieldName()) != null) { switch (name) { case "message": message = parser.nextTextValue(); break; - case "trace": trace = parser.nextTextValue(); break; + case "trace": { + if (parser.nextToken() != JsonToken.START_ARRAY) + throw new ResultParseException(documentId, + "Expected 'trace' to be an array, but got '" + parser.currentToken() + "' in: " + + new String(response.body(), UTF_8)); + int start = (int) parser.getTokenLocation().getByteOffset(); + int depth = 1; + while (depth > 0) switch (parser.nextToken()) { + case START_ARRAY: ++depth; break; + case END_ARRAY: --depth; break; + } + int end = (int) parser.getTokenLocation().getByteOffset() + 1; + trace = new String(response.body(), start, end - start, UTF_8); + }; break; default: parser.nextToken(); } } |