killbill-aplcache

Details

diff --git a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
index f129496..e01e6a9 100644
--- a/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
+++ b/util/src/main/java/com/ning/billing/util/dao/AuditedCollectionDaoBase.java
@@ -16,6 +16,7 @@
 
 package com.ning.billing.util.dao;
 
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -112,7 +113,7 @@ public abstract class AuditedCollectionDaoBase<T extends Entity, V> implements A
         // Find all pairs <entity id, record id> (including those that are about to be deleted) for this parent object
         final List<Mapper<UUID, Long>> recordIds = dao.getRecordIds(objectId.toString(), objectType);
         // Flip the map to look up the record id associated with an entity id
-        final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
+        final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds, objectType);
 
         // Perform the deletes
         if (objsToRemove.size() != 0) {
@@ -169,7 +170,12 @@ public abstract class AuditedCollectionDaoBase<T extends Entity, V> implements A
 
         for (final T entity : entities) {
             final UUID id = entity.getId();
-            histories.add(new EntityHistory<T>(id, recordIds.get(id), entity, changeType));
+
+            final Long recordId = recordIds.get(id);
+            if (recordId == null) {
+                throw new IllegalStateException("recordId for object " + entity.getClass() + " is null ");
+            }
+            histories.add(new EntityHistory<T>(id, recordId, entity, changeType));
         }
 
         return histories;
@@ -187,9 +193,16 @@ public abstract class AuditedCollectionDaoBase<T extends Entity, V> implements A
         return audits;
     }
 
-    protected Map<UUID, Long> convertToHistoryMap(final List<Mapper<UUID, Long>> recordIds) {
+    protected Map<UUID, Long> convertToHistoryMap(final List<Mapper<UUID, Long>> recordIds, final ObjectType objectType) {
         final Map<UUID, Long> recordIdMap = new HashMap<UUID, Long>();
         for (final Mapper<UUID, Long> recordId : recordIds) {
+            if (recordId.getKey() == null) {
+                throw new IllegalStateException("UUID for object " + objectType + " is null for recordId " + recordId.getValue());
+            }
+            if (recordId.getValue() == null) {
+                throw new IllegalStateException("recordId for object " + objectType + " is null for UUID " + recordId.getKey());
+            }
+
             recordIdMap.put(recordId.getKey(), recordId.getValue());
         }
 
diff --git a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
index 67410ee..d990f7e 100644
--- a/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
+++ b/util/src/main/java/com/ning/billing/util/tag/dao/AuditedTagDao.java
@@ -83,7 +83,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
 
                 // Gather the tag ids for this object id
                 final List<Mapper<UUID, Long>> recordIds = tagSqlDao.getRecordIds(objectId.toString(), objectType);
-                final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
+                final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds, objectType);
 
                 // Update the history table
                 final List<EntityHistory<Tag>> entityHistories = convertToHistory(tagList, recordIdMap, ChangeType.INSERT);
@@ -131,7 +131,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
 
                     // Before the deletion, gather the tag ids for this object id
                     final List<Mapper<UUID, Long>> recordIds = tagSqlDao.getRecordIds(objectId.toString(), objectType);
-                    final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds);
+                    final Map<UUID, Long> recordIdMap = convertToHistoryMap(recordIds, objectType);
 
                     // Delete the tag
                     tagSqlDao.deleteFromTransaction(objectId.toString(), objectType, tagList, context);
@@ -163,6 +163,7 @@ public class AuditedTagDao extends AuditedCollectionDaoBase<Tag, Tag> implements
                 }
             });
         } catch (TransactionFailedException exception) {
+
             if (exception.getCause() instanceof TagDefinitionApiException) {
                 throw (TagApiException) exception.getCause();
             } else {