This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git
The following commit(s) were added to refs/heads/master by this push: new b8529a3 JOHNZON-333 respect RFC 7159 Section 7 (Strings) b8529a3 is described below commit b8529a3b8c45c759ccdd3d9ae2f27d67a5bb2d87 Author: Mark Struberg <strub...@apache.org> AuthorDate: Mon Jan 25 22:44:26 2021 +0100 JOHNZON-333 respect RFC 7159 Section 7 (Strings) "test" as Java Object should result in a String "\"test\"". Because the quotes are part of the JSON notation of a string. This is nothing we may 'enforce' - this is clearly requrested by the JSON RFC. And the JSON-B Spec points to the RFC. --- .../apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java | 4 ---- .../johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java | 4 ---- .../main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java | 3 --- .../java/org/apache/johnzon/jsonb/DefaultMappingTest.java | 14 +++++++++----- .../src/main/java/org/apache/johnzon/mapper/Mapper.java | 8 +++++++- .../main/java/org/apache/johnzon/mapper/MapperBuilder.java | 12 +----------- .../main/java/org/apache/johnzon/mapper/MapperConfig.java | 8 +------- .../java/org/apache/johnzon/mapper/MapperConfigTest.java | 2 +- .../test/java/org/apache/johnzon/mapper/MapperTest.java | 3 +-- .../src/test/java/org/superbiz/ExtendMappingTest.java | 2 +- 10 files changed, 21 insertions(+), 39 deletions(-) diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java index edcf545..ab616cc 100644 --- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java +++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java @@ -282,10 +282,6 @@ public class ConfigurableJohnzonProvider<T> implements MessageBodyWriter<T>, Mes builder.setReadAttributeBeforeWrite(rabw); } - public void setEnforceQuoteString(final boolean val) { - builder.setEnforceQuoteString(val); - } - public void setPrimitiveConverters(final boolean val) { builder.setPrimitiveConverters(val); } diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java index 5fc52fa..e841125 100644 --- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java +++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java @@ -222,10 +222,6 @@ public class WildcardConfigurableJohnzonProvider<T> implements MessageBodyWriter builder.setEncoding(encoding); } - public void setEnforceQuoteString(final boolean val) { - builder.setEnforceQuoteString(val); - } - public void setPrimitiveConverters(final boolean val) { builder.setPrimitiveConverters(val); } diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java index 0b749a4..d21bb18 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java @@ -164,9 +164,6 @@ public class JohnzonBuilder implements JsonbBuilder { .map(PropertyVisibilityStrategy.class::cast).orElse(new DefaultPropertyVisibilityStrategy()); config.getProperty("johnzon.attributeOrder").ifPresent(comp -> builder.setAttributeOrder(Comparator.class.cast(comp))); - config.getProperty("johnzon.enforceQuoteString") - .map(this::toBool) - .ifPresent(builder::setEnforceQuoteString); config.getProperty("johnzon.primitiveConverters") .map(this::toBool) .ifPresent(builder::setPrimitiveConverters); diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java index f8738ef..c930b44 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java @@ -61,6 +61,7 @@ import static org.junit.Assert.fail; // taken from the examples of the spec // TODO: bunch of asserts //CHECKSTYLE:OFF + public class DefaultMappingTest { private static final Jsonb JSONB = JsonbBuilder.create(); @@ -150,11 +151,11 @@ public class DefaultMappingTest { @Test public void simpleValues() { - assertEquals("\"strValue\"", JSONB.toJson("\"strValue\"")); - assertEquals("true", JSONB.toJson("true")); - assertEquals("false", JSONB.toJson("false")); - assertEquals("null", JSONB.toJson("null")); - assertEquals("strValue", JSONB.toJson(Optional.of("strValue"))); + assertEquals("\"\"strValue\"\"", JSONB.toJson("\"strValue\"")); + assertEquals("\"true\"", JSONB.toJson("true")); + assertEquals("\"false\"", JSONB.toJson("false")); + assertEquals("\"null\"", JSONB.toJson("null")); + assertEquals("\"strValue\"", JSONB.toJson(Optional.of("strValue"))); assertEquals("null", JSONB.toJson(Optional.ofNullable(null))); assertEquals("null", JSONB.toJson(Optional.empty())); assertEquals("1", JSONB.toJson(OptionalInt.of(1))); @@ -195,6 +196,9 @@ public class DefaultMappingTest { OptionalDouble emptyOptionalDouble = JSONB.fromJson("null", OptionalDouble.class); assertTrue(!emptyOptionalDouble.isPresent()); + + final String testText = "test"; + assertEquals(testText, JSONB.fromJson(JSONB.toJson(testText), String.class)); } public static void fromJsonPrimitives() { diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java index 709801f..775e7b6 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java @@ -173,7 +173,13 @@ public class Mapper implements Closeable { || object == null) { try { final String valueOf = String.valueOf(object); - stream.write(config.isEnforceQuoteString() && String.class.isInstance(object) && !valueOf.startsWith("\"") ? '"' + valueOf + '"' : valueOf); + if (object instanceof String) { + stream.write('"'); + stream.write(valueOf); + stream.write('"'); + } else { + stream.write(valueOf); + } } catch (final IOException e) { throw new MapperException(e); } finally { diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java index 9646a90..cf6de3d 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java @@ -88,7 +88,6 @@ public class MapperBuilder { private boolean treatByteArrayAsBase64; private boolean treatByteArrayAsBase64URL; private boolean readAttributeBeforeWrite; - private boolean enforceQuoteString; private AccessMode accessMode; private Charset encoding = Charset.forName(System.getProperty("johnzon.mapper.encoding", "UTF-8")); private LazyConverterMap adapters = new LazyConverterMap(); @@ -231,7 +230,7 @@ public class MapperBuilder { version, close, skipNull, skipEmptyArray, treatByteArrayAsBase64, treatByteArrayAsBase64URL, readAttributeBeforeWrite, - accessMode, encoding, attributeOrder, enforceQuoteString, failOnUnknownProperties, + accessMode, encoding, attributeOrder, failOnUnknownProperties, serializeValueFilter, useBigDecimalForFloats, deduplicateObjects, interfaceImplementationMapping, useJsRange, useBigDecimalForObjectNumbers, supportEnumContainerDeserialization, @@ -457,15 +456,6 @@ public class MapperBuilder { return this; } - public MapperBuilder setEnforceQuoteString() { - return setEnforceQuoteString(true); - } - - public MapperBuilder setEnforceQuoteString(final boolean val) { - this.enforceQuoteString = val; - return this; - } - public MapperBuilder setPrimitiveConverters(final boolean val) { this.primitiveConverters = val; return this; diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java index 6e2906b..eea1716 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperConfig.java @@ -73,7 +73,6 @@ public /* DON'T MAKE IT HIDDEN */ class MapperConfig implements Cloneable { private final Map<Class<?>, ObjectConverter.Writer<?>> objectConverterWriters; private final Map<Class<?>, ObjectConverter.Reader<?>> objectConverterReaders; private final Comparator<String> attributeOrder; - private final boolean enforceQuoteString; private final boolean failOnUnknown; private final SerializeValueFilter serializeValueFilter; private final boolean useBigDecimalForFloats; @@ -106,7 +105,7 @@ public /* DON'T MAKE IT HIDDEN */ class MapperConfig implements Cloneable { final boolean readAttributeBeforeWrite, final AccessMode accessMode, final Charset encoding, final Comparator<String> attributeOrder, - final boolean enforceQuoteString, final boolean failOnUnknown, + final boolean failOnUnknown, final SerializeValueFilter serializeValueFilter, final boolean useBigDecimalForFloats, final Boolean deduplicateObjects, @@ -149,7 +148,6 @@ public /* DON'T MAKE IT HIDDEN */ class MapperConfig implements Cloneable { this.attributeOrder = attributeOrder; - this.enforceQuoteString = enforceQuoteString; this.failOnUnknown = failOnUnknown; this.serializeValueFilter = serializeValueFilter == null ? (name, value) -> false : serializeValueFilter; this.interfaceImplementationMapping = interfaceImplementationMapping; @@ -410,10 +408,6 @@ public /* DON'T MAKE IT HIDDEN */ class MapperConfig implements Cloneable { return attributeOrder; } - public boolean isEnforceQuoteString() { - return enforceQuoteString; - } - public boolean isUseBigDecimalForFloats() { return useBigDecimalForFloats; } diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java index 506e74e..d512b41 100644 --- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java +++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperConfigTest.java @@ -169,7 +169,7 @@ public class MapperConfigTest { new FieldAccessMode(true, true), StandardCharsets.UTF_8, null, - false, false, null, false, false, emptyMap(), true, false, true, + false, null, false, false, emptyMap(), true, false, true, null, null, null, null, null, type -> new EnumConverter(type)); } diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java index 45def70..58b0b2b 100644 --- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java +++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/MapperTest.java @@ -302,7 +302,6 @@ public class MapperTest { public void justObjectAsModel() { final Mapper encodingAwareMapper = new MapperBuilder().setEncoding("UTF-8" /*otherwise guess algo fails for too small string*/).build(); final Mapper simpleMapper = new MapperBuilder().build(); - final Mapper enforcedQuotes = new MapperBuilder().setEnforceQuoteString().build(); { // object final String object = "{\"a\":1,\"b\":true,\"c\":null,\"d\":[1,2]," + "\"e\":[\"i\",\"j\"],\"k\":{\"a\":1,\"b\":true,\"c\":null,\"d\":[1,2],\"e\":[\"i\",\"j\"]}}"; @@ -339,7 +338,7 @@ public class MapperTest { assertEquals("true", simpleMapper.writeObjectAsString(true)); assertEquals("false", simpleMapper.writeObjectAsString(false)); assertEquals("1", simpleMapper.writeObjectAsString(1)); - assertEquals("\"val\"", enforcedQuotes.writeObjectAsString("val")); + assertEquals("\"val\"", simpleMapper.writeObjectAsString("val")); assertEquals("[\"val1\",\"val2\"]", simpleMapper.writeObjectAsString(asList("val1", "val2"))); assertEquals("{\"a\":\"val\",\"b\":true,\"c\":1,\"d\":true}", simpleMapper.writeObjectAsString(new TreeMap<String, Object>() {{ put("a", "val"); diff --git a/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java b/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java index fb6ccf8..febe682 100644 --- a/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java +++ b/johnzon-mapper/src/test/java/org/superbiz/ExtendMappingTest.java @@ -61,7 +61,7 @@ public class ExtendMappingTest { new LazyConverterMap(), new HashMap<>(), new HashMap<>(), -1, true, true, true, false, false, false, new FieldAccessMode(false, false), - StandardCharsets.UTF_8, String::compareTo, false, false, null, false, false, + StandardCharsets.UTF_8, String::compareTo, false, null, false, false, emptyMap(), true, false, true, null, null, null, null, null, type -> new EnumConverter(type)));