diff --git a/src/main/java/com/arangodb/internal/util/ArangoDeserializerImpl.java b/src/main/java/com/arangodb/internal/util/ArangoDeserializerImpl.java index 9b6dc3c91..79fa9025b 100644 --- a/src/main/java/com/arangodb/internal/util/ArangoDeserializerImpl.java +++ b/src/main/java/com/arangodb/internal/util/ArangoDeserializerImpl.java @@ -48,7 +48,7 @@ public ArangoDeserializerImpl(final VPack vpacker, final VPackParser vpackParser public T deserialize(final VPackSlice vpack, final Type type) throws ArangoDBException { try { final T doc; - if (type == String.class && !vpack.isString()) { + if (type == String.class && !vpack.isString() && !vpack.isNull()) { doc = (T) vpackParser.toJson(vpack, true); } else { doc = vpacker.deserialize(vpack, type); diff --git a/src/main/java/com/arangodb/mapping/ArangoJack.java b/src/main/java/com/arangodb/mapping/ArangoJack.java index ad866f354..132a724b2 100644 --- a/src/main/java/com/arangodb/mapping/ArangoJack.java +++ b/src/main/java/com/arangodb/mapping/ArangoJack.java @@ -154,7 +154,7 @@ public VPackSlice serialize(final Object entity, final Options options) throws A public T deserialize(final VPackSlice vpack, final Type type) throws ArangoDBException { try { final T doc; - if (type == String.class && !vpack.isString()) { + if (type == String.class && !vpack.isString() && !vpack.isNull()) { final JsonNode node = vpackMapper.readTree( Arrays.copyOfRange(vpack.getBuffer(), vpack.getStart(), vpack.getStart() + vpack.getByteSize())); doc = (T) jsonMapper.writeValueAsString(node); diff --git a/src/test/java/com/arangodb/ArangoDatabaseTest.java b/src/test/java/com/arangodb/ArangoDatabaseTest.java index 7a746cf00..9e3c35093 100644 --- a/src/test/java/com/arangodb/ArangoDatabaseTest.java +++ b/src/test/java/com/arangodb/ArangoDatabaseTest.java @@ -700,7 +700,7 @@ public void queryWithFailOnWarningTrue() { public void queryWithFailOnWarningFalse() { final ArangoCursor cursor = db .query("RETURN 1 / 0", null, new AqlQueryOptions().failOnWarning(false), String.class); - assertThat(cursor.next(), is("null")); + assertThat(cursor.next(), nullValue()); } @Test diff --git a/src/test/java/com/arangodb/serde/CustomSerdeTest.java b/src/test/java/com/arangodb/serde/CustomSerdeTest.java index 7de47fedc..e56b1f7b5 100644 --- a/src/test/java/com/arangodb/serde/CustomSerdeTest.java +++ b/src/test/java/com/arangodb/serde/CustomSerdeTest.java @@ -28,6 +28,7 @@ import com.arangodb.mapping.ArangoJack; import com.arangodb.model.DocumentCreateOptions; import com.arangodb.util.ArangoSerialization; +import com.arangodb.velocypack.VPackBuilder; import com.arangodb.velocypack.VPackSlice; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; @@ -53,7 +54,7 @@ import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.*; /** @@ -234,4 +235,10 @@ public void getDocument() { assertThat(result.getAttribute("int"), is(BigInteger.valueOf(10))); } + @Test + public void parseNullString() { + final String json = arangoDB.util(CUSTOM).deserialize(new VPackBuilder().add((String) null).slice(), String.class); + assertThat(json, nullValue()); + } + } diff --git a/src/test/java/com/arangodb/util/ArangoSerializationTest.java b/src/test/java/com/arangodb/util/ArangoSerializationTest.java index 6c41f4164..3adf974dc 100644 --- a/src/test/java/com/arangodb/util/ArangoSerializationTest.java +++ b/src/test/java/com/arangodb/util/ArangoSerializationTest.java @@ -22,10 +22,7 @@ import com.arangodb.ArangoDB; import com.arangodb.entity.BaseDocument; -import com.arangodb.velocypack.Type; -import com.arangodb.velocypack.VPackBuilder; -import com.arangodb.velocypack.VPackSlice; -import com.arangodb.velocypack.ValueType; +import com.arangodb.velocypack.*; import org.junit.BeforeClass; import org.junit.Test; @@ -36,6 +33,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; /** * @author Mark Vollmary @@ -102,4 +100,11 @@ public void parseJsonIncludeNull() { final String json = util.deserialize(util.serialize(entity, new ArangoSerializer.Options()), String.class); assertThat(json, is("{\"value\":[\"test\",null]}")); } + + @Test + public void parseNullString() { + final String json = util.deserialize(new VPackBuilder().add((String) null).slice(), String.class); + assertThat(json, nullValue()); + } + }