summaryrefslogtreecommitdiffstats
path: root/document/src/main
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-08-29 14:24:46 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-08-29 14:24:46 +0200
commitde08c53acbacbbc9a675d8c2f3240ca70c2d3d87 (patch)
tree0c23511f7ab4680db0ab9afcf66bcbb6db6f5114 /document/src/main
parenta3f3169824355f8b9b6bd2c08c8bb3c0c449eb09 (diff)
Better error messages on illegal input
Diffstat (limited to 'document/src/main')
-rw-r--r--document/src/main/java/com/yahoo/document/json/readers/ArrayReader.java2
-rw-r--r--document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java6
-rw-r--r--document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java2
-rw-r--r--document/src/main/java/com/yahoo/document/json/readers/VespaJsonDocumentReader.java22
4 files changed, 18 insertions, 14 deletions
diff --git a/document/src/main/java/com/yahoo/document/json/readers/ArrayReader.java b/document/src/main/java/com/yahoo/document/json/readers/ArrayReader.java
index 824a3073515..43dfa371361 100644
--- a/document/src/main/java/com/yahoo/document/json/readers/ArrayReader.java
+++ b/document/src/main/java/com/yahoo/document/json/readers/ArrayReader.java
@@ -14,6 +14,7 @@ import static com.yahoo.document.json.readers.JsonParserHelpers.expectArrayStart
import static com.yahoo.document.json.readers.SingleValueReader.readSingleValue;
public class ArrayReader {
+
public static void fillArrayUpdate(TokenBuffer buffer, int initNesting, DataType valueType, List<FieldValue> arrayContents) {
while (buffer.nesting() >= initNesting) {
Preconditions.checkArgument(buffer.currentToken() != JsonToken.VALUE_NULL, "Illegal null value for array entry");
@@ -33,4 +34,5 @@ public class ArrayReader {
buffer.next();
}
}
+
}
diff --git a/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java b/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java
index e8b3e514cb2..2808e98149f 100644
--- a/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java
+++ b/document/src/main/java/com/yahoo/document/json/readers/CompositeReader.java
@@ -6,6 +6,7 @@ import com.yahoo.document.DataType;
import com.yahoo.document.datatypes.CollectionFieldValue;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.MapFieldValue;
+import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.document.datatypes.StructuredFieldValue;
import com.yahoo.document.datatypes.TensorFieldValue;
import com.yahoo.document.datatypes.WeightedSet;
@@ -39,9 +40,8 @@ public class CompositeReader {
} else if (fieldValue instanceof TensorFieldValue) {
TensorReader.fillTensor(buffer, (TensorFieldValue) fieldValue);
} else {
- throw new IllegalStateException("Has created a composite field"
- + " value the reader does not know how to handle: "
- + fieldValue.getClass().getName() + " This is a bug. token = " + token);
+ throw new IllegalArgumentException("Expected a " + fieldValue.getClass().getName() + " but got an " +
+ (token == JsonToken.START_OBJECT ? "object" : "array" ));
}
expectCompositeEnd(buffer.currentToken());
}
diff --git a/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java b/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
index 5881267c252..f7bb5aecf0b 100644
--- a/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
+++ b/document/src/main/java/com/yahoo/document/json/readers/SingleValueReader.java
@@ -75,7 +75,7 @@ public class SingleValueReader {
update = ValueUpdate.createDivide(Double.valueOf(buffer.currentText()));
break;
default:
- throw new IllegalArgumentException("Operation \"" + buffer.currentName() + "\" not implemented.");
+ throw new IllegalArgumentException("Operation '" + buffer.currentName() + "' not implemented.");
}
return update;
}
diff --git a/document/src/main/java/com/yahoo/document/json/readers/VespaJsonDocumentReader.java b/document/src/main/java/com/yahoo/document/json/readers/VespaJsonDocumentReader.java
index e252e71407a..7e32a6b8b44 100644
--- a/document/src/main/java/com/yahoo/document/json/readers/VespaJsonDocumentReader.java
+++ b/document/src/main/java/com/yahoo/document/json/readers/VespaJsonDocumentReader.java
@@ -100,13 +100,17 @@ public class VespaJsonDocumentReader {
expectObjectStart(buffer.currentToken());
String fieldName = buffer.currentName();
- if (isFieldPath(fieldName)) {
- addFieldPathUpdates(update, buffer, fieldName);
- } else {
- addFieldUpdates(update, buffer, fieldName);
+ try {
+ if (isFieldPath(fieldName)) {
+ addFieldPathUpdates(update, buffer, fieldName);
+ } else {
+ addFieldUpdates(update, buffer, fieldName);
+ }
+ expectObjectEnd(buffer.currentToken());
+ }
+ catch (IllegalArgumentException | IndexOutOfBoundsException e) {
+ throw new IllegalArgumentException("Error in '" + fieldName + "'", e);
}
-
- expectObjectEnd(buffer.currentToken());
buffer.next();
}
}
@@ -177,16 +181,14 @@ public class VespaJsonDocumentReader {
private AssignFieldPathUpdate readAssignFieldPathUpdate(DocumentType documentType, String fieldPath, TokenBuffer buffer) {
AssignFieldPathUpdate fieldPathUpdate = new AssignFieldPathUpdate(documentType, fieldPath);
- FieldValue fv = SingleValueReader.readSingleValue(
- buffer, fieldPathUpdate.getFieldPath().getResultingDataType());
+ FieldValue fv = SingleValueReader.readSingleValue(buffer, fieldPathUpdate.getFieldPath().getResultingDataType());
fieldPathUpdate.setNewValue(fv);
return fieldPathUpdate;
}
private AddFieldPathUpdate readAddFieldPathUpdate(DocumentType documentType, String fieldPath, TokenBuffer buffer) {
AddFieldPathUpdate fieldPathUpdate = new AddFieldPathUpdate(documentType, fieldPath);
- FieldValue fv = SingleValueReader.readSingleValue(
- buffer, fieldPathUpdate.getFieldPath().getResultingDataType());
+ FieldValue fv = SingleValueReader.readSingleValue(buffer, fieldPathUpdate.getFieldPath().getResultingDataType());
fieldPathUpdate.setNewValues((Array) fv);
return fieldPathUpdate;
}