killbill-memoizeit

Merge pull request #1094 from beccagaspard/add_payment_method_with_control_null_pointer_fix Fix

2/11/2019 7:12:48 AM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java
index 50fe61d..376e613 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PaymentMethodJson.java
@@ -25,6 +25,7 @@ import java.util.UUID;
 
 import javax.annotation.Nullable;
 
+import com.google.common.collect.ImmutableList;
 import org.joda.time.DateTime;
 import org.killbill.billing.account.api.Account;
 import org.killbill.billing.payment.api.PaymentMethod;
@@ -155,7 +156,7 @@ public class PaymentMethodJson extends JsonBase {
                             }
                             return result;
                         }
-                        return null;
+                        return ImmutableList.of();
                     }
                 };
             }
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java b/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java
index b8bcf61..e66b2fd 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/PaymentMethodProcessor.java
@@ -178,7 +178,7 @@ public class PaymentMethodProcessor extends ProcessorBase {
     public UUID addPaymentMethodWithControl(final String paymentMethodExternalKey, final String paymentPluginServiceName, final Account account,
                                             final boolean setDefault, final PaymentMethodPlugin paymentMethodProps, final Iterable<PluginProperty> properties,
                                             final List<String> paymentControlPluginNames, final CallContext callContext, final InternalCallContext context) throws PaymentApiException {
-        final Iterable<PluginProperty> mergedProperties = PluginProperties.merge(paymentMethodProps.getProperties(), properties);
+        final Iterable<PluginProperty> mergedProperties = paymentMethodProps.getProperties() != null ? PluginProperties.merge(paymentMethodProps.getProperties(), properties) : properties;
         return executeWithPaymentMethodControl(paymentPluginServiceName, account, mergedProperties, paymentControlPluginNames, callContext, uuidPluginNotificationDispatcher, new WithPaymentMethodControlCallback<UUID>() {
             @Override
             public UUID doPaymentMethodApiOperation(final String adjustedPaymentPluginServiceName, final Iterable<PluginProperty> adjustedPluginProperties) throws PaymentApiException {
diff --git a/util/src/main/java/org/killbill/billing/util/PluginProperties.java b/util/src/main/java/org/killbill/billing/util/PluginProperties.java
index c7e4e4e..28cb032 100644
--- a/util/src/main/java/org/killbill/billing/util/PluginProperties.java
+++ b/util/src/main/java/org/killbill/billing/util/PluginProperties.java
@@ -38,9 +38,11 @@ public abstract class PluginProperties {
     public static Map<String, Object> toMap(final Iterable<PluginProperty>... propertiesLists) {
         final Map<String, Object> mergedProperties = new HashMap<String, Object>();
         for (final Iterable<PluginProperty> propertiesList : propertiesLists) {
-            for (final PluginProperty pluginProperty : propertiesList) {
-                if (pluginProperty.getKey() != null) {
-                    mergedProperties.put(pluginProperty.getKey(), pluginProperty.getValue());
+            if(propertiesList != null) {
+                for (final PluginProperty pluginProperty : propertiesList) {
+                    if (pluginProperty != null && pluginProperty.getKey() != null) {
+                        mergedProperties.put(pluginProperty.getKey(), pluginProperty.getValue());
+                    }
                 }
             }
         }
diff --git a/util/src/test/java/org/killbill/billing/util/TestPluginProperties.java b/util/src/test/java/org/killbill/billing/util/TestPluginProperties.java
index 0978e16..e316a1b 100644
--- a/util/src/test/java/org/killbill/billing/util/TestPluginProperties.java
+++ b/util/src/test/java/org/killbill/billing/util/TestPluginProperties.java
@@ -63,6 +63,14 @@ public class TestPluginProperties extends UtilTestSuiteNoDB {
     }
 
     @Test(groups = "fast")
+    public void testToMapHandlesNull() throws Exception {
+        final Map<String, Object> properties = PluginProperties.toMap(null, pluginProperties1, pluginProperties2, null);
+        Assert.assertEquals(properties.get("baz"), (Long) 12L);
+        Assert.assertEquals(properties.get("baz2"), "something else");
+        Assert.assertEquals(properties.get("foo"), "override");
+    }
+
+    @Test(groups = "fast")
     public void testBuildPluginProperties() throws Exception {
         Assert.assertEquals(pluginProperties1.size(), 2);
         Assert.assertEquals(pluginProperties1.get(0).getKey(), "foo");