diff options
author | Olli Virtanen <olli.virtanen@oath.com> | 2018-06-27 12:22:10 +0200 |
---|---|---|
committer | Olli Virtanen <olli.virtanen@oath.com> | 2018-06-27 12:22:10 +0200 |
commit | 236711778bd4747210e8b26a1ef0a68bc05cb005 (patch) | |
tree | 4f752d36946b56f1a29ef26a22abf5077eef19a1 /document | |
parent | d001cf9e63e6b35b43425835f972e39a0423b640 (diff) |
Include .toJson() in Document analogously to .toXml()
Diffstat (limited to 'document')
-rw-r--r-- | document/src/main/java/com/yahoo/document/Document.java | 29 | ||||
-rw-r--r-- | document/src/test/java/com/yahoo/document/DocumentTestCase.java | 35 |
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"); |