Henry Kuijpers created SLING-10720: -------------------------------------- Summary: "nt:unstructured" is used in case of overwriting node with no sling:resourceType property defined (JCR Resource Merger) Key: SLING-10720 URL: https://issues.apache.org/jira/browse/SLING-10720 Project: Sling Issue Type: Improvement Components: ResourceResolver Affects Versions: Resource Merger 1.4.0 Reporter: Henry Kuijpers
https://github.com/apache/sling-org-apache-sling-resourcemerger/blob/c9d742c8080a0976b778c678747d99289c9efbb7/src/main/java/org/apache/sling/resourcemerger/impl/MergedResource.java#L75 In this file I see logic that works as follows: 1. Try to find the sling:resourceType property, if that is found, use it 2. If not found, use the relative path So far, so good. Then, there is no guard around the logic that uses the resource type of the last resource that defines one. Unfortunately, in the JCR implementation, when a resource does not define a sling:resourceType-property, Resource::getResourceType() doesn't return null. It instead returns the node type of the node (in our case nt:unstructured). This makes the MergedResource have: * sling:resourceType = "nt:unstructured" * sling:resourceSuperType = "website/component" This then makes filters fail to invoke, since they require the resource to have a certain resource type. Node config: /libs/...../something: @jcr:primaryType = nt:unstructured @sling:resourceType = website/component @label = test /apps/..../something: @jcr:primaryType = nt:unstructured @label = test2 We then created a filter that is listening on the resource type "website/component", which fails to invoke because the Resource#getResourceType() yields "nt:unstructured". When we put sling:resourceType = "website/component" in the node in /apps, it works. But we believe that is not the correct fix. -- This message was sent by Atlassian Jira (v8.3.4#803005)