summaryrefslogtreecommitdiffstats
path: root/vespa-feed-client/src/main/java
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-06-28 21:32:21 +0200
committerJon Marius Venstad <venstad@gmail.com>2021-06-28 21:32:21 +0200
commit91301d6a6672c812e2ea0bb78fc1517d2d18dfb0 (patch)
treea7ea8439dd0fb0575ccec3ecf810797bd2bc2d4b /vespa-feed-client/src/main/java
parent0e888703ca92c8fe7a4a55e607e8e5a883c6bf4e (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.java20
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();
}
}