diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index f673f48821..5f378f85a0 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -911,7 +911,7 @@ public class NodesImpl implements Nodes boolean includeFiles = true; QName filterNodeTypeQName = null; - boolean filterIncludeSubTypes = true; + boolean filterIncludeSubTypes = false; Query q = parameters.getQuery(); @@ -932,12 +932,20 @@ public class NodesImpl implements Nodes if ((nodeTypeStr != null) && (! nodeTypeStr.isEmpty())) { filterNodeTypeQName = createQName(nodeTypeStr); + if (dictionaryService.getType(filterNodeTypeQName) == null) + { + throw new InvalidArgumentException("Unknown filter nodeType: "+nodeTypeStr); + } } - // optionally used with nodeType filter (default is to include subTypes, if not specified as "subTypes=false") + // optionally used with nodeType filter (default is *not* to include sub-types) Boolean subTypes = propertyWalker.getProperty(PARAM_SUBTYPES, WhereClauseParser.EQUALS, Boolean.class); if (subTypes != null) { + if (nodeTypeStr == null) + { + throw new InvalidArgumentException("Expected nodeType and subTypes (not just subTypes) filter: "+parentNodeRef.getId()); + } filterIncludeSubTypes = subTypes; } } 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 050827fc2f..01d2fe5dda 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -1427,20 +1427,31 @@ public class NodeApiTest extends AbstractBaseApiTest n1.expected(nodeResp); - // filtering, via where clause (nodeType) + // filtering, via where clause (nodeType + subTypes) + + List linkIds = Arrays.asList(n1Id, n2Id); + Map params = new HashMap<>(); params.put("where", "(nodeType='cm:link')"); Paging paging = getPaging(0, Integer.MAX_VALUE); - List linkIds = Arrays.asList(n1Id, n2Id); - response = getAll(myChildrenUrl, user1, paging, params, 200); List nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class); + assertEquals(0, nodes.size()); + + params = new HashMap<>(); + params.put("where", "(nodeType='cm:link' and subTypes=true)"); + + paging = getPaging(0, Integer.MAX_VALUE); + + response = getAll(myChildrenUrl, user1, paging, params, 200); + nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class); assertEquals(2, nodes.size()); assertTrue(linkIds.contains(nodes.get(0).getId())); assertTrue(linkIds.contains(nodes.get(1).getId())); + // delete file delete("nodes", user1, n1Id, 204); @@ -1465,6 +1476,11 @@ public class NodeApiTest extends AbstractBaseApiTest // -ve test - create - duplicate name post(myChildrenUrl, user1, toJsonAsStringNonNull(n2), 409); + + // -ve test - unknown nodeType when filtering + params = new HashMap<>(); + params.put("where", "(nodeType='my:unknown'"); + getAll(myChildrenUrl, user1, paging, params, 400); }