diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index 5d4aee7fc6..30f356e510 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -62,6 +62,7 @@ import org.alfresco.repo.model.filefolder.FileFolderServiceImpl; import org.alfresco.repo.node.getchildren.FilterProp; import org.alfresco.repo.node.getchildren.FilterPropBoolean; import org.alfresco.repo.node.getchildren.GetChildrenCannedQuery; +import org.alfresco.repo.node.integrity.IntegrityException; import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -2966,7 +2967,7 @@ public class NodesImpl implements Nodes if (!nodeMatches(nodeRef, Collections.singleton(ContentModel.TYPE_CONTENT), null, false)) { - throw new InvalidArgumentException("NodeId of content is expected: " + nodeRef.getId()); + throw new InvalidArgumentException("Node of type cm:content or a subtype is expected: " + nodeId); } lockInfo = validateLockInformation(lockInfo); @@ -3002,7 +3003,11 @@ public class NodesImpl implements Nodes { throw new PermissionDeniedException("Current user doesn't have permission to unlock node " + nodeId); } - + if (!lockService.isLocked(nodeRef)) + { + throw new IntegrityException("Can't unlock node " + nodeId + " because it isn't locked", null); + } + lockService.unlock(nodeRef); return getFolderOrDocument(nodeId, parameters); } diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java index c5e6c22f2d..91642c8255 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -3806,7 +3806,7 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest setRequestContext(user1); //Unlock on a not locked node - post(getNodeOperationUrl(folderId, "unlock"), null, null, 403); + post(getNodeOperationUrl(folderId, "unlock"), null, null, 422); // clean up setRequestContext(user1); // all locks were made by user1