killbill-memoizeit

Guard against NPE in PluginProperties::merge. Return empty

2/8/2019 7:30:24 PM

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/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");