Repository: johnzon Updated Branches: refs/heads/master e20f42730 -> 40e75bc56
ensure JsonbConfig accumulate varargs params instead of overriding them Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/40e75bc5 Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/40e75bc5 Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/40e75bc5 Branch: refs/heads/master Commit: 40e75bc5613ab8fd4e7e1ff486d93faf1c388e42 Parents: e20f427 Author: rmannibucau <[email protected]> Authored: Wed Mar 22 14:32:22 2017 +0100 Committer: rmannibucau <[email protected]> Committed: Wed Mar 22 14:32:22 2017 +0100 ---------------------------------------------------------------------- .../main/java/javax/json/bind/JsonbConfig.java | 35 +++++++++++--------- 1 file changed, 20 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/40e75bc5/jsonb-api/src/main/java/javax/json/bind/JsonbConfig.java ---------------------------------------------------------------------- diff --git a/jsonb-api/src/main/java/javax/json/bind/JsonbConfig.java b/jsonb-api/src/main/java/javax/json/bind/JsonbConfig.java index 149c871..2545961 100644 --- a/jsonb-api/src/main/java/javax/json/bind/JsonbConfig.java +++ b/jsonb-api/src/main/java/javax/json/bind/JsonbConfig.java @@ -23,6 +23,7 @@ import javax.json.bind.config.PropertyNamingStrategy; import javax.json.bind.config.PropertyVisibilityStrategy; import javax.json.bind.serializer.JsonbDeserializer; import javax.json.bind.serializer.JsonbSerializer; +import java.lang.reflect.Array; import java.util.Collections; import java.util.HashMap; import java.util.Locale; @@ -100,19 +101,7 @@ public class JsonbConfig { } public final JsonbConfig withAdapters(final JsonbAdapter... adapters) { - if (adapters == null || adapters.length == 0) { - return this; - } - - final Optional<Object> opt = getProperty(ADAPTERS); - if (opt.isPresent()) { - final JsonbAdapter[] existing = JsonbAdapter[].class.cast(opt.get()); - final JsonbAdapter[] aggregated = new JsonbAdapter[existing.length + adapters.length]; - System.arraycopy(existing, 0, aggregated, 0, existing.length); - System.arraycopy(adapters, 0, aggregated, existing.length + 1, adapters.length); - return setProperty(ADAPTERS, aggregated); - } - return setProperty(ADAPTERS, adapters); + return accumulate(ADAPTERS, adapters, JsonbAdapter.class); } public final JsonbConfig withBinaryDataStrategy(final String binaryDataStrategy) { @@ -120,10 +109,26 @@ public class JsonbConfig { } public final JsonbConfig withSerializers(final JsonbSerializer... serializers) { - return setProperty(SERIALIZERS, serializers); + return accumulate(SERIALIZERS, serializers, JsonbSerializer.class); } public final JsonbConfig withDeserializers(final JsonbDeserializer... deserializers) { - return setProperty(DESERIALIZERS, deserializers); + return accumulate(DESERIALIZERS, deserializers, JsonbDeserializer.class); + } + + private <T> JsonbConfig accumulate(final String key, final T[] values, final Class<T> componentType) { + if (values == null || values.length == 0) { + return this; + } + + final Optional<Object> opt = getProperty(key); + if (opt.isPresent()) { + final T[] existing = (T[]) opt.get(); + final T[] aggregated = (T[]) Array.newInstance(componentType, existing.length + values.length); + System.arraycopy(existing, 0, aggregated, 0, existing.length); + System.arraycopy(values, 0, aggregated, existing.length + 1, values.length); + return setProperty(key, aggregated); + } + return setProperty(key, values); } }
