This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git
commit bd46a434dd9a980c343dfa2415a23d95b4851c26 Author: Romain Manni-Bucau <[email protected]> AuthorDate: Sat Aug 10 16:52:31 2019 +0200 JOHNZON-236 ensure nillable conflicts are resolved properly --- johnzon-jsonb/pom.xml | 2 +- .../org/apache/johnzon/jsonb/JohnzonBuilder.java | 11 +++- .../org/apache/johnzon/jsonb/JsonbAccessMode.java | 29 ++++++--- .../serializer/JohnzonDeserializationContext.java | 19 +++--- .../org/apache/johnzon/jsonb/NillableTest.java | 54 ++++++++++++++++ .../java/org/apache/johnzon/jsonb/OrderTest.java | 71 ++++++++++++++++++++++ .../apache/johnzon/jsonb/model/NillableType.java | 26 ++++++++ .../model/nillable/NotNillablePropertyModel.java | 26 ++++++++ .../model/nillable/notnillable/StringHolder.java | 31 ++++++++++ .../model/nillable/notnillable/package-info.java | 22 +++++++ .../johnzon/jsonb/model/nillable/package-info.java | 22 +++++++ .../johnzon/mapper/MappingGeneratorImpl.java | 2 +- .../java/org/apache/johnzon/mapper/Mappings.java | 16 ++--- .../apache/johnzon/mapper/access/AccessMode.java | 2 +- .../johnzon/mapper/access/FieldAccessMode.java | 4 +- .../mapper/access/FieldAndMethodAccessMode.java | 4 +- .../johnzon/mapper/access/MethodAccessMode.java | 4 +- .../johnzon/mapper/AdvancedGenericsTest.java | 2 +- 18 files changed, 313 insertions(+), 34 deletions(-) diff --git a/johnzon-jsonb/pom.xml b/johnzon-jsonb/pom.xml index 21d8928..242f514 100644 --- a/johnzon-jsonb/pom.xml +++ b/johnzon-jsonb/pom.xml @@ -58,7 +58,7 @@ <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jsonb_1.0_spec</artifactId> - <version>1.1</version> + <version>1.2-SNAPSHOT</version> <!-- contains important fixes about JsonbConfig --> <scope>provided</scope> </dependency> 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 9dcbb59..eaf4465 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 @@ -157,7 +157,13 @@ public class JohnzonBuilder implements JsonbBuilder { } config.getProperty(JsonbConfig.ENCODING).ifPresent(encoding -> builder.setEncoding(String.valueOf(encoding))); - config.getProperty(JsonbConfig.NULL_VALUES).ifPresent(serNulls -> builder.setSkipNull(!Boolean.class.cast(serNulls))); + final boolean isNillable = config.getProperty(JsonbConfig.NULL_VALUES) + .map(it -> String.class.isInstance(it) ? Boolean.parseBoolean(it.toString()) : Boolean.class.cast(it)) + .map(serNulls -> { + builder.setSkipNull(!serNulls); + return serNulls; + }) + .orElse(false); final Optional<Object> namingStrategyValue = config.getProperty(JsonbConfig.PROPERTY_NAMING_STRATEGY); @@ -218,7 +224,8 @@ public class JohnzonBuilder implements JsonbBuilder { .orElseGet(() -> new FieldAndMethodAccessMode(true, true, false)), config.getProperty("johnzon.failOnMissingCreatorValues") .map(it -> String.class.isInstance(it) ? Boolean.parseBoolean(it.toString()) : Boolean.class.cast(it)) - .orElse(true) /*spec 1.0 requirement*/)); + .orElse(true) /*spec 1.0 requirement*/, + isNillable)); builder.setAccessMode(accessMode); // user adapters diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java index fcedbc5..c08d529 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JsonbAccessMode.java @@ -139,14 +139,19 @@ public class JsonbAccessMode implements AccessMode, Closeable { }; private boolean failOnMissingCreatorValues; private final Types types = new Types(); + private final boolean globalIsNillable; + // CHECKSTYLE:OFF public JsonbAccessMode(final PropertyNamingStrategy propertyNamingStrategy, final String orderValue, final PropertyVisibilityStrategy visibilityStrategy, final boolean caseSensitive, final Map<AdapterKey, Adapter<?, ?>> defaultConverters, final JohnzonAdapterFactory factory, final JsonProvider jsonProvider, final Supplier<JsonBuilderFactory> builderFactory, final Supplier<JsonParserFactory> parserFactory, final AccessMode delegate, - final boolean failOnMissingCreatorValues) { + final boolean failOnMissingCreatorValues, + final boolean globalIsNillable) { + // CHECKSTYLE:ON + this.globalIsNillable = globalIsNillable; this.naming = propertyNamingStrategy; this.order = orderValue; this.visibility = visibilityStrategy; @@ -459,7 +464,7 @@ public class JsonbAccessMode implements AccessMode, Closeable { final WriterConverters writerConverters = new WriterConverters(initialReader, types); final JsonbProperty property = initialReader.getAnnotation(JsonbProperty.class); final JsonbNillable nillable = initialReader.getClassOrPackageAnnotation(JsonbNillable.class); - final boolean isNillable = nillable != null || (property != null && property.nillable()); + final boolean isNillable = isNillable(property, nillable); final String key = property == null || property.value().isEmpty() ? naming.translateName(entry.getKey()) : property.value(); if (result.put(key, new Reader() { @Override @@ -493,7 +498,7 @@ public class JsonbAccessMode implements AccessMode, Closeable { } @Override - public boolean isNillable() { + public boolean isNillable(final boolean global) { return isNillable; } }) != null) { @@ -551,7 +556,7 @@ public class JsonbAccessMode implements AccessMode, Closeable { final ReaderConverters converters = new ReaderConverters(initialWriter); final JsonbProperty property = initialWriter.getAnnotation(JsonbProperty.class); final JsonbNillable nillable = initialWriter.getClassOrPackageAnnotation(JsonbNillable.class); - final boolean isNillable = nillable != null || (property != null && property.nillable()); + final boolean isNillable = isNillable(property, nillable); final String key = property == null || property.value().isEmpty() ? naming.translateName(entry.getKey()) : property.value(); if (result.put(key, new Writer() { @Override @@ -585,7 +590,7 @@ public class JsonbAccessMode implements AccessMode, Closeable { } @Override - public boolean isNillable() { + public boolean isNillable(final boolean global) { return isNillable; } }) != null) { @@ -649,6 +654,16 @@ public class JsonbAccessMode implements AccessMode, Closeable { }); } + private boolean isNillable(final JsonbProperty property, final JsonbNillable nillable) { + if (property != null) { + return property.nillable(); + } + if (nillable != null) { + return nillable.value(); + } + return globalIsNillable; + } + private ParsingCacheEntry getClassEntry(final Class<?> clazz) { ParsingCacheEntry cache = parsingCache.get(clazz); if (cache == null) { @@ -937,8 +952,8 @@ public class JsonbAccessMode implements AccessMode, Closeable { } @Override - public boolean isNillable() { - return false; + public boolean isNillable(final boolean global) { + return global; } } diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java index f64b034..a3b58dd 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/serializer/JohnzonDeserializationContext.java @@ -58,15 +58,20 @@ public class JohnzonDeserializationContext implements DeserializationContext { final JsonParser.Event next = /*RewindableJsonParser.class.isInstance(parser) ? RewindableJsonParser.class.cast(parser).getLast() : */ parser.next(); switch (next) { - case START_OBJECT: + case START_OBJECT: { final JsonObjectBuilder objectBuilder = builderFactory.createObjectBuilder(); - parseObject(parser, objectBuilder); + parseObject(null, parser, objectBuilder); return objectBuilder.build(); + } case START_ARRAY: final JsonArrayBuilder arrayBuilder = builderFactory.createArrayBuilder(); parseArray(parser, arrayBuilder); return arrayBuilder.build(); - case KEY_NAME: + case KEY_NAME: { // object + final JsonObjectBuilder objectBuilder = builderFactory.createObjectBuilder(); + parseObject(parser.getString(), parser, objectBuilder); + return objectBuilder.build(); + } case VALUE_STRING: return jsonp.createValue(parser.getString()); case VALUE_FALSE: @@ -82,8 +87,8 @@ public class JohnzonDeserializationContext implements DeserializationContext { } } - private void parseObject(final JsonParser parser, final JsonObjectBuilder builder) { - String key = null; + private void parseObject(final String originalKey, final JsonParser parser, final JsonObjectBuilder builder) { + String key = originalKey; while (parser.hasNext()) { final JsonParser.Event next = parser.next(); switch (next) { @@ -97,7 +102,7 @@ public class JohnzonDeserializationContext implements DeserializationContext { case START_OBJECT: final JsonObjectBuilder subObject = builderFactory.createObjectBuilder(); - parseObject(parser, subObject); + parseObject(null, parser, subObject); builder.add(key, subObject); break; @@ -157,7 +162,7 @@ public class JohnzonDeserializationContext implements DeserializationContext { case START_OBJECT: final JsonObjectBuilder subObject = builderFactory.createObjectBuilder(); - parseObject(parser, subObject); + parseObject(null, parser, subObject); builder.add(subObject); break; diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/NillableTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/NillableTest.java new file mode 100644 index 0000000..afa3f9b --- /dev/null +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/NillableTest.java @@ -0,0 +1,54 @@ +/* + * 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.jsonb; + +import static org.junit.Assert.assertEquals; + +import javax.json.bind.Jsonb; +import javax.json.bind.JsonbBuilder; +import javax.json.bind.JsonbConfig; + +import org.apache.johnzon.jsonb.model.NillableType; +import org.apache.johnzon.jsonb.model.nillable.NotNillablePropertyModel; +import org.apache.johnzon.jsonb.model.nillable.notnillable.StringHolder; +import org.apache.johnzon.jsonb.test.JsonbRule; +import org.junit.Rule; +import org.junit.Test; + +public class NillableTest { + @Rule + public final JsonbRule jsonb = new JsonbRule(); + + @Test + public void propertyWinsOverPackage() { + assertEquals("{}", jsonb.toJson(new NotNillablePropertyModel())); + } + + @Test + public void globalNillableConfigInNonNullablePackage() throws Exception { + try (final Jsonb jsonb = JsonbBuilder.create(new JsonbConfig().withNullValues(true))) { + assertEquals("{}", jsonb.toJson(new StringHolder())); + } + } + + @Test + public void type() { + assertEquals("{\"value\":null}", jsonb.toJson(new NillableType())); + } +} diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/OrderTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/OrderTest.java index 631a070..355032d 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/OrderTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/OrderTest.java @@ -22,6 +22,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.lang.reflect.Type; +import java.util.LinkedList; +import java.util.List; import javax.json.bind.annotation.JsonbPropertyOrder; import javax.json.bind.annotation.JsonbTypeDeserializer; @@ -64,6 +66,24 @@ public class OrderTest { assertEquals("Test String Deserialized", unmarshalledObject.getInstance().getInstance()); } + @Test + public void arrayTypes() { + final ArrayHolder container = new ArrayHolder(); + final StringHolder instance1 = new StringHolder(); + instance1.setInstance("Test String 1"); + final StringHolder instance2 = new StringHolder(); + instance2.setInstance("Test String 2"); + container.setInstance(new StringHolder[] { instance1, instance2 }); + + final String json = jsonb.toJson(container); + assertEquals("{\"instance\":[{\"instance\":\"Test String 1\"},{\"instance\":\"Test String 2\"}]}", json); + + final ArrayHolder unmarshalledObject = jsonb.fromJson( + "{ \"instance\" : [ { \"instance\" : \"Test String 1\" }, { \"instance\" : \"Test String 2\" } ] }", + ArrayHolder.class); + assertEquals("Test String 1", unmarshalledObject.getInstance()[0].getInstance()); + } + public static class StringHolder implements Holder<String> { private String instance = "Test"; @@ -124,6 +144,57 @@ public class OrderTest { } } + public static class ArrayHolder implements Holder<StringHolder[]> { + @JsonbTypeSerializer(StringArraySerializer.class) + @JsonbTypeDeserializer(StringArrayDeserializer.class) + private StringHolder[] instance; + + @Override + public StringHolder[] getInstance() { + return instance; + } + + @Override + public void setInstance(final StringHolder[] instance) { + this.instance = instance; + } + } + + public static class StringArraySerializer implements JsonbSerializer<StringHolder[]> { + @Override + public void serialize(final StringHolder[] containers, + final JsonGenerator jsonGenerator, + final SerializationContext serializationContext) { + jsonGenerator.writeStartArray(); + for (final StringHolder container : containers) { + serializationContext.serialize(container, jsonGenerator); + } + jsonGenerator.writeEnd(); + } + } + + public static class StringArrayDeserializer implements JsonbDeserializer<StringHolder[]> { + @Override + public StringHolder[] deserialize(final JsonParser jsonParser, + final DeserializationContext deserializationContext, + final Type type) { + final List<StringHolder> containers = new LinkedList<>(); + + while (jsonParser.hasNext()) { + JsonParser.Event event = jsonParser.next(); + if (event == JsonParser.Event.START_OBJECT) { + containers.add(deserializationContext.deserialize( + new StringHolder() {}.getClass().getGenericSuperclass(), jsonParser)); + } + if (event == JsonParser.Event.END_OBJECT) { + break; + } + } + + return containers.toArray(new StringHolder[0]); + } + } + @JsonbPropertyOrder({ "third", "fourth" }) public class PartialModel { private String first = "First"; diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/NillableType.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/NillableType.java new file mode 100644 index 0000000..7b3bfc3 --- /dev/null +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/NillableType.java @@ -0,0 +1,26 @@ +/* + * 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.jsonb.model; + +import javax.json.bind.annotation.JsonbNillable; + +@JsonbNillable +public class NillableType { + public String value; +} diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/NotNillablePropertyModel.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/NotNillablePropertyModel.java new file mode 100644 index 0000000..7f1aeb7 --- /dev/null +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/NotNillablePropertyModel.java @@ -0,0 +1,26 @@ +/* + * 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.jsonb.model.nillable; + +import javax.json.bind.annotation.JsonbProperty; + +public class NotNillablePropertyModel { + @JsonbProperty(nillable = false) + public String value; +} diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/notnillable/StringHolder.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/notnillable/StringHolder.java new file mode 100644 index 0000000..ced103c --- /dev/null +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/notnillable/StringHolder.java @@ -0,0 +1,31 @@ +/* + * 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.jsonb.model.nillable.notnillable; + +public class StringHolder { + private String string; + + public String getString() { + return string; + } + + public void setString(final String string) { + this.string = string; + } +} diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/notnillable/package-info.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/notnillable/package-info.java new file mode 100644 index 0000000..f548116 --- /dev/null +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/notnillable/package-info.java @@ -0,0 +1,22 @@ +/* + * 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. + */ +@JsonbNillable(false) +package org.apache.johnzon.jsonb.model.nillable.notnillable; + +import javax.json.bind.annotation.JsonbNillable; diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/package-info.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/package-info.java new file mode 100644 index 0000000..5071b4e --- /dev/null +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/model/nillable/package-info.java @@ -0,0 +1,22 @@ +/* + * 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. + */ +@JsonbNillable +package org.apache.johnzon.jsonb.model.nillable; + +import javax.json.bind.annotation.JsonbNillable; diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java index 34ae88e..e80629a 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java @@ -329,7 +329,7 @@ public class MappingGeneratorImpl implements MappingGenerator { } if (value == null) { - if (config.isSkipNull() && !getter.reader.isNillable()) { + if (!getter.reader.isNillable(!config.isSkipNull())) { continue; } else { generator.writeNull(getterEntry.getKey()); diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java index 16b42fe..e60e8f8 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mappings.java @@ -686,8 +686,8 @@ public class Mappings { } @Override - public boolean isNillable() { - return false; + public boolean isNillable(final boolean globalConfig) { + return globalConfig; } } @@ -765,8 +765,8 @@ public class Mappings { } @Override - public boolean isNillable() { - return false; + public boolean isNillable(final boolean globalConfig) { + return globalConfig; } } @@ -842,9 +842,9 @@ public class Mappings { } @Override - public boolean isNillable() { + public boolean isNillable(final boolean global) { for (final AccessMode.Reader r : delegates) { - if (r.isNillable()) { + if (r.isNillable(global)) { return true; } } @@ -912,9 +912,9 @@ public class Mappings { } @Override - public boolean isNillable() { + public boolean isNillable(final boolean global) { for (final AccessMode.Writer r : delegates) { - if (r.isNillable()) { + if (r.isNillable(global)) { return true; } } diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java index 6c95675..ece888b 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/AccessMode.java @@ -75,7 +75,7 @@ public interface AccessMode { <T extends Annotation> T getAnnotation(Class<T> clazz); <T extends Annotation> T getClassOrPackageAnnotation(Class<T> clazz); Adapter<?, ?> findConverter(); - boolean isNillable(); + boolean isNillable(boolean globalConfig); } interface Writer extends DecoratedType { diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java index 95a9780..e1de549 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAccessMode.java @@ -132,8 +132,8 @@ public class FieldAccessMode extends BaseAccessMode { } @Override - public boolean isNillable() { - return false; + public boolean isNillable(final boolean global) { + return global; } } diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAndMethodAccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAndMethodAccessMode.java index c61ead7..ea5a651 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAndMethodAccessMode.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/FieldAndMethodAccessMode.java @@ -220,8 +220,8 @@ public class FieldAndMethodAccessMode extends BaseAccessMode { } @Override - public boolean isNillable() { - return type1.isNillable() || type2.isNillable(); + public boolean isNillable(final boolean global) { + return type1.isNillable(global) || type2.isNillable(global); } public DecoratedType getType1() { diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java index 959d69f..fbaf167 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/access/MethodAccessMode.java @@ -139,8 +139,8 @@ public class MethodAccessMode extends BaseAccessMode { } @Override - public boolean isNillable() { - return false; + public boolean isNillable(final boolean global) { + return global; } } diff --git a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/AdvancedGenericsTest.java b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/AdvancedGenericsTest.java index 7dcdb83..fb0e219 100644 --- a/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/AdvancedGenericsTest.java +++ b/johnzon-mapper/src/test/java/org/apache/johnzon/mapper/AdvancedGenericsTest.java @@ -48,7 +48,7 @@ public class AdvancedGenericsTest { Assert.assertTrue("Serialized String must contain \"firstName\":\"Bruce\"", customerAsString.contains("\"firstName\":\"Bruce\"")); Assert.assertTrue("Serialized String must contain \"lastName\":\"Wayne\"", customerAsString.contains("\"lastName\":\"Wayne\"")); - Assert.assertFalse("Serialized String must not contain \"id\"", customerAsString.contains("\"id\"")); + Assert.assertFalse("Serialized String must not contain \"id\": " + customerAsString, customerAsString.contains("\"id\"")); Assert.assertFalse("Serialized String must not contain \"version\"", customerAsString.contains("\"version\"")); }
