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);
     }
 }

Reply via email to