killbill-uncached

Fix NPEs in overdue and entitlements when basePlan does not

10/15/2012 8:12:05 PM

Details

diff --git a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
index e91adb2..d7b8d6e 100644
--- a/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
+++ b/entitlement/src/main/java/com/ning/billing/entitlement/api/user/DefaultEntitlementUserApi.java
@@ -247,6 +247,11 @@ public class DefaultEntitlementUserApi implements EntitlementUserApi {
                 continue;
             }
 
+            // If ADDON is cancelled, skip
+            if (cur.getState() == SubscriptionState.CANCELLED) {
+                continue;
+            }
+
             final DryRunChangeReason reason;
             // If baseProductName is null, it's a cancellation dry-run. In this case, return all addons, so they are cancelled
             if (baseProductName != null && addonUtils.isAddonIncludedFromProdName(baseProductName, requestedDate, cur.getCurrentPlan())) {
diff --git a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
index d76cf78..4934889 100644
--- a/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
+++ b/overdue/src/main/java/com/ning/billing/overdue/calculator/BillingStateCalculatorBundle.java
@@ -85,8 +85,10 @@ public class BillingStateCalculatorBundle extends BillingStateCalculator<Subscri
             final BillingPeriod basePlanBillingPeriod;
             final PriceList basePlanPriceList;
             final PhaseType basePlanPhaseType;
-            if (basePlan.getCurrentPlan() == null) {
-                // The subscription has been cancelled since
+            //
+            // basePlan is null for standalone subscriptions
+            // basePlan.getCurrentPlan() is null if basePlan has been cancelled
+            if (basePlan == null || basePlan.getCurrentPlan() == null) {
                 basePlanProduct = null;
                 basePlanBillingPeriod = null;
                 basePlanPriceList = null;