summaryrefslogtreecommitdiffstats
path: root/document
diff options
context:
space:
mode:
authorOlli Virtanen <olli.virtanen@oath.com>2018-06-27 12:22:10 +0200
committerOlli Virtanen <olli.virtanen@oath.com>2018-06-27 12:22:10 +0200
commit236711778bd4747210e8b26a1ef0a68bc05cb005 (patch)
tree4f752d36946b56f1a29ef26a22abf5077eef19a1 /document
parentd001cf9e63e6b35b43425835f972e39a0423b640 (diff)
Include .toJson() in Document analogously to .toXml()
Diffstat (limited to 'document')
-rw-r--r--document/src/main/java/com/yahoo/document/Document.java29
-rw-r--r--document/src/test/java/com/yahoo/document/DocumentTestCase.java35
2 files changed, 59 insertions, 5 deletions
diff --git a/document/src/main/java/com/yahoo/document/Document.java b/document/src/main/java/com/yahoo/document/Document.java
index 025166b5ef9..cac0156a98c 100644
--- a/document/src/main/java/com/yahoo/document/Document.java
+++ b/document/src/main/java/com/yahoo/document/Document.java
@@ -1,15 +1,25 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.document;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.Struct;
import com.yahoo.document.datatypes.StructuredFieldValue;
-import com.yahoo.document.serialization.*;
+import com.yahoo.document.json.JsonWriter;
+import com.yahoo.document.serialization.DocumentReader;
+import com.yahoo.document.serialization.DocumentSerializer;
+import com.yahoo.document.serialization.DocumentSerializerFactory;
+import com.yahoo.document.serialization.DocumentWriter;
+import com.yahoo.document.serialization.FieldReader;
+import com.yahoo.document.serialization.FieldWriter;
+import com.yahoo.document.serialization.SerializationException;
+import com.yahoo.document.serialization.XmlSerializationHelper;
+import com.yahoo.document.serialization.XmlStream;
import com.yahoo.io.GrowableByteBuffer;
import com.yahoo.vespa.objects.BufferSerializer;
import com.yahoo.vespa.objects.Ids;
import com.yahoo.vespa.objects.Serializer;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
@@ -266,6 +276,17 @@ public class Document extends StructuredFieldValue {
XmlSerializationHelper.printDocumentXml(this, xml);
}
+ /**
+ * Get JSON representation of the document root and its children contained in a JSON object
+ * @return JSON representation of document
+ */
+ public String toJson() {
+ ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+ JsonWriter writer = new JsonWriter(buffer);
+ writer.write(this);
+ return buffer.toString();
+ }
+
/** Returns true if the argument is a document which has the same set of values */
@Override
public boolean equals(Object o) {
@@ -314,8 +335,8 @@ public class Document extends StructuredFieldValue {
@SuppressWarnings("deprecation")
public void serializeHeader(Serializer data) throws SerializationException {
if (data instanceof DocumentWriter) {
- if (data instanceof VespaDocumentSerializer42) {
- ((VespaDocumentSerializer42)data).setHeaderOnly(true);
+ if (data instanceof com.yahoo.document.serialization.VespaDocumentSerializer42) {
+ ((com.yahoo.document.serialization.VespaDocumentSerializer42)data).setHeaderOnly(true);
}
serialize((DocumentWriter)data);
} else if (data instanceof BufferSerializer) {
diff --git a/document/src/test/java/com/yahoo/document/DocumentTestCase.java b/document/src/test/java/com/yahoo/document/DocumentTestCase.java
index f7cc6974176..3822df123ef 100644
--- a/document/src/test/java/com/yahoo/document/DocumentTestCase.java
+++ b/document/src/test/java/com/yahoo/document/DocumentTestCase.java
@@ -1,6 +1,10 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.document;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.compress.CompressionType;
import com.yahoo.document.datatypes.Array;
import com.yahoo.document.datatypes.ByteFieldValue;
@@ -15,9 +19,15 @@ import com.yahoo.document.datatypes.Raw;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.document.datatypes.Struct;
import com.yahoo.document.datatypes.WeightedSet;
-import com.yahoo.document.serialization.*;
+import com.yahoo.document.serialization.DocumentDeserializer;
+import com.yahoo.document.serialization.DocumentDeserializerFactory;
+import com.yahoo.document.serialization.DocumentReader;
+import com.yahoo.document.serialization.DocumentSerializer;
+import com.yahoo.document.serialization.DocumentSerializerFactory;
+import com.yahoo.document.serialization.XmlDocumentWriter;
import com.yahoo.io.GrowableByteBuffer;
import com.yahoo.vespa.objects.BufferSerializer;
+import org.hamcrest.Matchers;
import org.junit.Test;
import java.io.FileInputStream;
@@ -27,10 +37,13 @@ import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.Map;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -1202,6 +1215,26 @@ public class DocumentTestCase extends DocumentTestCaseBase {
}
@Test
+ public void testSerializationToJson() throws Exception {
+ setUpSertestDocType();
+ Document doc = getSertestDocument();
+ String json = doc.toJson();
+ Map<String, Object> parsed = new ObjectMapper().readValue(json, new TypeReference<Map<String, Object>>() {
+ });
+ assertEquals(parsed.get("id"), "doc:sertest:foobar");
+ assertThat(parsed.get("fields"), instanceOf(Map.class));
+ Object fieldMap = parsed.get("fields");
+ if (fieldMap instanceof Map) {
+ Map<?, ?> fields = (Map<?, ?>) fieldMap;
+ assertEquals(fields.get("mailid"), "emailfromalicetobob");
+ assertEquals(fields.get("date"), -2013512400);
+ assertThat(fields.get("docindoc"), instanceOf(Map.class));
+ assertThat(fields.keySet(),
+ containsInAnyOrder("mailid", "date", "attachmentcount", "rawfield", "weightedfield", "docindoc", "mapfield"));
+ }
+ }
+
+ @Test
public void testEmptyStringsSerialization() {
docMan = new DocumentTypeManager();
DocumentType docType = new DocumentType("emptystrings");