diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java index 04912286be..c9d348949f 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/capability/RMAfterInvocationProvider.java @@ -951,24 +951,31 @@ public class RMAfterInvocationProvider extends RMSecurityCommon @SuppressWarnings({"unchecked", "rawtypes" }) private Map decide(Authentication authentication, Object object, ConfigAttributeDefinition config, Map returnedObject) throws AccessDeniedException { - if (returnedObject.containsKey(RecordsManagementModel.PROP_HOLD_REASON)) - { - HashMap filtered = new HashMap(); - filtered.putAll(returnedObject); - // get the node ref from the properties or delete - String protocol = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_STORE_PROTOCOL)); - String identifier = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_STORE_IDENTIFIER)); - String uuid = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_NODE_UUID)); - StoreRef storeRef = new StoreRef(protocol, identifier); - NodeRef nodeRef = new NodeRef(storeRef, uuid); - if ((nodeRef == null) || (permissionService.hasPermission(filePlanService.getFilePlan(nodeRef), RMPermissionModel.VIEW_UPDATE_REASONS_FOR_FREEZE) != AccessStatus.ALLOWED)) + try { + if (returnedObject.containsKey(RecordsManagementModel.PROP_HOLD_REASON)) { - filtered.remove(RecordsManagementModel.PROP_HOLD_REASON); + HashMap filtered = new HashMap(); + filtered.putAll(returnedObject); + // get the node ref from the properties or delete + String protocol = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_STORE_PROTOCOL)); + String identifier = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_STORE_IDENTIFIER)); + String uuid = DefaultTypeConverter.INSTANCE.convert(String.class, filtered.get(ContentModel.PROP_NODE_UUID)); + StoreRef storeRef = new StoreRef(protocol, identifier); + NodeRef nodeRef = new NodeRef(storeRef, uuid); + if ((nodeRef == null) || (permissionService.hasPermission(filePlanService.getFilePlan(nodeRef), RMPermissionModel.VIEW_UPDATE_REASONS_FOR_FREEZE) != AccessStatus.ALLOWED)) + { + filtered.remove(RecordsManagementModel.PROP_HOLD_REASON); + } + return filtered; + } + else + { + return returnedObject; } - return filtered; } - else + catch(ClassCastException ex) { + // This will happen if returnedObject is an instance of TreeMap containing anything other than instances of QName return returnedObject; } }