diff options
Diffstat (limited to 'document/src/main/java/com/yahoo/document/json')
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; } |