Repository: johnzon Updated Branches: refs/heads/master f634af84f -> 60525af05
JOHNZON-94 making JsonValue serializable Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/60525af0 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/60525af0 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/60525af0 Branch: refs/heads/master Commit: 60525af05ea8154529fac1206b6231d9757d0333 Parents: f634af8 Author: Romain manni-Bucau <[email protected]> Authored: Fri Aug 26 10:11:44 2016 +0200 Committer: Romain manni-Bucau <[email protected]> Committed: Fri Aug 26 10:11:44 2016 +0200 ---------------------------------------------------------------------- .../johnzon/core/JsonArrayBuilderImpl.java | 11 +- .../org/apache/johnzon/core/JsonArrayImpl.java | 25 ++-- .../org/apache/johnzon/core/JsonDoubleImpl.java | 6 +- .../org/apache/johnzon/core/JsonLongImpl.java | 6 +- .../org/apache/johnzon/core/JsonNumberImpl.java | 8 +- .../johnzon/core/JsonObjectBuilderImpl.java | 4 +- .../org/apache/johnzon/core/JsonObjectImpl.java | 25 ++-- .../org/apache/johnzon/core/JsonReaderImpl.java | 6 +- .../org/apache/johnzon/core/JsonStringImpl.java | 5 +- .../johnzon/core/SerializablePrimitives.java | 97 ++++++++++++++ .../apache/johnzon/core/SerializationTest.java | 130 +++++++++++++++++++ .../johnzon/mapper/MappingParserImpl.java | 20 +-- 12 files changed, 277 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java index 5dfd839..ea46072 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java @@ -18,6 +18,10 @@ */ package org.apache.johnzon.core; +import javax.json.JsonArray; +import javax.json.JsonArrayBuilder; +import javax.json.JsonObjectBuilder; +import javax.json.JsonValue; import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; @@ -25,11 +29,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.json.JsonArray; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObjectBuilder; -import javax.json.JsonValue; - class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable { private List<JsonValue> tmpList; @@ -77,7 +76,7 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable { @Override public JsonArrayBuilder add(final boolean value) { - addValue(value ? JsonValue.TRUE : JsonValue.FALSE); + addValue(value ? SerializablePrimitives.TRUE : SerializablePrimitives.FALSE); return this; } http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java index fee44ce..6906645 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayImpl.java @@ -18,16 +18,15 @@ */ package org.apache.johnzon.core; -import java.io.Serializable; -import java.util.AbstractList; -import java.util.Iterator; -import java.util.List; - import javax.json.JsonArray; import javax.json.JsonNumber; import javax.json.JsonObject; import javax.json.JsonString; import javax.json.JsonValue; +import java.io.Serializable; +import java.util.AbstractList; +import java.util.Iterator; +import java.util.List; class JsonArrayImpl extends AbstractList<JsonValue> implements JsonArray, Serializable { private Integer hashCode = null; @@ -119,9 +118,9 @@ class JsonArrayImpl extends AbstractList<JsonValue> implements JsonArray, Serial public boolean getBoolean(final int index) { final JsonValue val = value(index, JsonValue.class); - if (val == JsonValue.TRUE) { + if (SerializablePrimitives.TRUE.equals(val)) { return true; - } else if (val == JsonValue.FALSE) { + } else if (SerializablePrimitives.FALSE.equals(val)) { return false; } else { throw new ClassCastException(); @@ -144,20 +143,12 @@ class JsonArrayImpl extends AbstractList<JsonValue> implements JsonArray, Serial } final JsonValue val = get(index); - - if (val == JsonValue.TRUE) { - return true; - } else if (val == JsonValue.FALSE) { - return false; - } else { - return defaultValue; - } - + return SerializablePrimitives.TRUE.equals(val) || !SerializablePrimitives.FALSE.equals(val) && defaultValue; } @Override public boolean isNull(final int index) { - return value(index, JsonValue.class) == JsonValue.NULL; + return JsonValue.NULL.equals(value(index, JsonValue.class)); } @Override http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java index bb51b36..cff63c0 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonDoubleImpl.java @@ -18,12 +18,12 @@ */ package org.apache.johnzon.core; +import javax.json.JsonNumber; +import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; -import javax.json.JsonNumber; - -final class JsonDoubleImpl implements JsonNumber { +final class JsonDoubleImpl implements JsonNumber, Serializable { private final double value; JsonDoubleImpl(final double value) { http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java index 1a85b0b..4068d9b 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonLongImpl.java @@ -18,12 +18,12 @@ */ package org.apache.johnzon.core; +import javax.json.JsonNumber; +import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; -import javax.json.JsonNumber; - -public final class JsonLongImpl implements JsonNumber { +public final class JsonLongImpl implements JsonNumber, Serializable { private final long value; JsonLongImpl(final long value) { http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonNumberImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonNumberImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonNumberImpl.java index 8b560ed..9ad7752 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonNumberImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonNumberImpl.java @@ -18,14 +18,14 @@ */ package org.apache.johnzon.core; +import javax.json.JsonNumber; +import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; -import javax.json.JsonNumber; - -final class JsonNumberImpl implements JsonNumber { +final class JsonNumberImpl implements JsonNumber, Serializable { private final BigDecimal value; - private Integer hashCode = null; + private transient Integer hashCode = null; JsonNumberImpl(final BigDecimal decimal) { if(decimal == null) { http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java index ea15a17..2a260f3 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java @@ -77,13 +77,13 @@ class JsonObjectBuilderImpl implements JsonObjectBuilder, Serializable { @Override public JsonObjectBuilder add(final String name, final boolean value) { - putValue(name, value ? JsonValue.TRUE : JsonValue.FALSE); + putValue(name, value ? SerializablePrimitives.TRUE : SerializablePrimitives.FALSE); return this; } @Override public JsonObjectBuilder addNull(final String name) { - putValue(name, JsonValue.NULL); + putValue(name, SerializablePrimitives.NULL); return this; } http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java index d7912cb..ef8b84d 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectImpl.java @@ -18,21 +18,20 @@ */ package org.apache.johnzon.core; -import java.io.Serializable; -import java.util.AbstractMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - import javax.json.JsonArray; import javax.json.JsonNumber; import javax.json.JsonObject; import javax.json.JsonString; import javax.json.JsonValue; +import java.io.Serializable; +import java.util.AbstractMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements JsonObject, Serializable { - private Integer hashCode = null; + private transient Integer hashCode = null; private final Map<String, JsonValue> unmodifieableBackingMap; private <T> T value(final String name, final Class<T> clazz) { @@ -109,20 +108,14 @@ final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements Jso @Override public boolean getBoolean(final String name) { - return value(name, JsonValue.class) == JsonValue.TRUE; + return SerializablePrimitives.TRUE.equals(value(name, JsonValue.class)); } @Override public boolean getBoolean(final String name, final boolean defaultValue) { final Object v = unmodifieableBackingMap.get(name); if (v != null) { - if (v == JsonValue.TRUE) { - return true; - } else if (v == JsonValue.FALSE) { - return false; - } else { - return defaultValue; - } + return SerializablePrimitives.TRUE.equals(v) || !SerializablePrimitives.FALSE.equals(v) && defaultValue; } else { return defaultValue; } @@ -130,7 +123,7 @@ final class JsonObjectImpl extends AbstractMap<String, JsonValue> implements Jso @Override public boolean isNull(final String name) { - return value(name, JsonValue.class) == JsonValue.NULL; + return JsonValue.NULL.equals(value(name, JsonValue.class)); } @Override http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java index b0107ee..2632c9a 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java @@ -79,19 +79,19 @@ public class JsonReaderImpl implements JsonReader { throw new JsonParsingException("Expected end of file", parser.getLocation()); } close(); - return JsonValue.FALSE; + return SerializablePrimitives.FALSE; case VALUE_TRUE: if (parser.hasNext()) { throw new JsonParsingException("Expected end of file", parser.getLocation()); } close(); - return JsonValue.TRUE; + return SerializablePrimitives.TRUE; case VALUE_NULL: if (parser.hasNext()) { throw new JsonParsingException("Expected end of file", parser.getLocation()); } close(); - return JsonValue.NULL; + return SerializablePrimitives.NULL; case VALUE_NUMBER: if (parser.hasNext()) { throw new JsonParsingException("Expected end of file", parser.getLocation()); http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStringImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStringImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStringImpl.java index a7e8f29..5ec8a36 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStringImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStringImpl.java @@ -19,11 +19,12 @@ package org.apache.johnzon.core; import javax.json.JsonString; +import java.io.Serializable; -final class JsonStringImpl implements JsonString { +final class JsonStringImpl implements JsonString, Serializable { private final String value; private String escape; - private Integer hashCode = null; + private transient Integer hashCode = null; JsonStringImpl(final String value) { http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/main/java/org/apache/johnzon/core/SerializablePrimitives.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/SerializablePrimitives.java b/johnzon-core/src/main/java/org/apache/johnzon/core/SerializablePrimitives.java new file mode 100644 index 0000000..c046f85 --- /dev/null +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/SerializablePrimitives.java @@ -0,0 +1,97 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.johnzon.core; + +import javax.json.JsonValue; +import java.io.InvalidObjectException; +import java.io.ObjectStreamException; +import java.io.Serializable; + +public final class SerializablePrimitives { + private SerializablePrimitives() { + // no-op + } + + public static final JsonValue NULL = new SerializableJsonValue(JsonValue.NULL); + public static final JsonValue TRUE = new SerializableJsonValue(JsonValue.TRUE); + public static final JsonValue FALSE = new SerializableJsonValue(JsonValue.FALSE); + + private static final class SerializableJsonValue implements JsonValue, Serializable { + private final JsonValue delegate; + + SerializableJsonValue(final JsonValue value) { + delegate = value; + } + + @Override + public ValueType getValueType() { + return delegate.getValueType(); + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + public boolean equals(final Object o) { + if (this == o || o == delegate) { + return true; + } + if (o == null) { + return false; + } + if (SerializableJsonValue.class.isInstance(o)) { + return SerializableJsonValue.class.cast(o).delegate.equals(delegate); + } + return JsonValue.class.isInstance(o) && o.equals(delegate); + + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + private Object writeReplace() throws ObjectStreamException { + return new SerializationReplacement(delegate.toString()); + } + } + + private static final class SerializationReplacement implements Serializable { + private final String value; + + private SerializationReplacement(final String value) { + this.value = value; + } + + private Object readResolve() throws ObjectStreamException { + if ("null".equals(value)) { + return NULL; + } + if ("true".equals(value)) { + return TRUE; + } + if ("false".equals(value)) { + return FALSE; + } + throw new InvalidObjectException("Unknown " + value); + } + } +} http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-core/src/test/java/org/apache/johnzon/core/SerializationTest.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/SerializationTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/SerializationTest.java new file mode 100644 index 0000000..b80aae7 --- /dev/null +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/SerializationTest.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.johnzon.core; + +import org.junit.Test; + +import javax.json.JsonArray; +import javax.json.JsonNumber; +import javax.json.JsonObject; +import javax.json.JsonString; +import javax.json.JsonValue; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertTrue; + +public class SerializationTest { + @Test + public void jsonString() throws IOException, ClassNotFoundException { + final JsonString source = new JsonStringImpl("test"); + final JsonString string = serialDeser(source); + assertNotSame(source, string); + assertEquals("test", string.getString()); + assertEquals("\"test\"", string.toString()); + } + + @Test + public void jsonNumber() throws IOException, ClassNotFoundException { + final JsonNumber source = new JsonNumberImpl(new BigDecimal("1.0")); + final JsonNumber deserialized = serialDeser(source); + assertNotSame(source, deserialized); + assertEquals(1.0, deserialized.doubleValue(), 0.); + assertEquals("1.0", deserialized.toString()); + } + + @Test + public void jsonLong() throws IOException, ClassNotFoundException { + final JsonNumber source = new JsonLongImpl(1); + final JsonNumber string = serialDeser(source); + assertNotSame(source, string); + assertEquals(1, string.longValue()); + assertEquals("1", string.toString()); + } + + @Test + public void jsonDouble() throws IOException, ClassNotFoundException { + final JsonNumber source = new JsonDoubleImpl(1.5); + final JsonNumber string = serialDeser(source); + assertNotSame(source, string); + assertEquals(1.5, string.doubleValue(), 0.); + assertEquals("1.5", string.toString()); + } + + @Test + public void jsonObject() throws IOException, ClassNotFoundException { + final Map<String, JsonValue> map = new LinkedHashMap<String, JsonValue>(); + map.put("test", new JsonStringImpl("val")); + final JsonObject source = new JsonObjectImpl(Collections.unmodifiableMap(map)); + final JsonObject serialization = serialDeser(source); + assertNotSame(source, serialization); + assertTrue(serialization.containsKey("test")); + assertEquals("val", serialization.getString("test")); + assertEquals(1, serialization.size()); + } + + @Test + public void jsonArray() throws IOException, ClassNotFoundException { + final List<JsonValue> list = new ArrayList<JsonValue>(); + list.add(new JsonStringImpl("test")); + final JsonArray source = new JsonArrayImpl(Collections.unmodifiableList(list)); + final JsonArray serialization = serialDeser(source); + assertNotSame(source, serialization); + assertEquals(1, serialization.size()); + assertEquals("test", JsonString.class.cast(serialization.iterator().next()).getString()); + } + + @Test + public void jsonPrimitives() throws IOException, ClassNotFoundException { // NOTE: spec jar primitives are not serializable + for (final JsonValue v : asList(SerializablePrimitives.FALSE, SerializablePrimitives.TRUE, SerializablePrimitives.NULL)) { + assertEquals(v, serialDeser(v)); + } + } + + @Test + public void primitiveInObject() throws IOException, ClassNotFoundException { + assertTrue(serialDeser(JsonProviderImpl.provider().createObjectBuilder() + .add("bool", true) + .build() + .getBoolean("bool"))); + } + + private static <T> T serialDeser(final T instance) throws IOException, ClassNotFoundException { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(instance); + oos.close(); + final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); + try { + return (T) in.readObject(); + } finally { + in.close(); + } + } +} http://git-wip-us.apache.org/repos/asf/johnzon/blob/60525af0/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java index a96a64e..e731b8f 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java @@ -173,13 +173,13 @@ public class MappingParserImpl implements MappingParser { return (T) new ArrayList(asList(Object[].class.cast(buildArrayWithComponentType(jsonArray, Object.class, null)))); } } - if (JsonValue.NULL == jsonValue) { + if (JsonValue.NULL.equals(jsonValue)) { return null; } - if (JsonValue.TRUE == jsonValue && (Boolean.class == targetType || boolean.class == targetType || Object.class == targetType)) { + if (jsonValue.equals(JsonValue.TRUE) && (Boolean.class == targetType || boolean.class == targetType || Object.class == targetType)) { return (T) Boolean.TRUE; } - if (JsonValue.FALSE == jsonValue && (Boolean.class == targetType || boolean.class == targetType || Object.class == targetType)) { + if (jsonValue.equals(JsonValue.FALSE) && (Boolean.class == targetType || boolean.class == targetType || Object.class == targetType)) { return (T) Boolean.FALSE; } throw new IllegalArgumentException("Unsupported " + jsonValue + " for type " + targetType); @@ -301,7 +301,7 @@ public class MappingParserImpl implements MappingParser { } final AccessMode.Writer setterMethod = value.writer; - if (jsonValue == JsonValue.NULL) { // forced + if (JsonValue.NULL.equals(jsonValue)) { // forced setterMethod.write(t, null); } else { Object existingInstance = null; @@ -422,15 +422,15 @@ public class MappingParserImpl implements MappingParser { private Object toObject(final Object baseInstance, final JsonValue jsonValue, final Type type, final Adapter itemConverter) { - if (jsonValue == null || JsonValue.NULL == jsonValue) { + if (jsonValue == null || JsonValue.NULL.equals(jsonValue)) { return null; } if (type == Boolean.class || type == boolean.class) { - if (jsonValue == JsonValue.TRUE) { + if (jsonValue.equals(JsonValue.TRUE)) { return true; } - if (jsonValue == JsonValue.FALSE) { + if (jsonValue.equals(JsonValue.FALSE)) { return false; } throw new MapperException("Unable to parse " + jsonValue + " to boolean"); @@ -441,10 +441,10 @@ public class MappingParserImpl implements MappingParser { } if (Object.class == type) { // handling specific types here to keep exception in standard handling - if (jsonValue == JsonValue.TRUE) { + if (jsonValue.equals(JsonValue.TRUE)) { return true; } - if (jsonValue == JsonValue.FALSE) { + if (jsonValue.equals(JsonValue.FALSE)) { return false; } if (JsonNumber.class.isInstance(jsonValue)) { @@ -584,7 +584,7 @@ public class MappingParserImpl implements MappingParser { } for (final JsonValue value : jsonArray) { - collection.add(value == JsonValue.NULL ? null : toObject(null, value, mapping.arg, itemConverter)); + collection.add(JsonValue.NULL.equals(value) ? null : toObject(null, value, mapping.arg, itemConverter)); } if (EnumSet.class == mapping.raw) {
