Hello,

when I call a resource using my custom ResourceProvider [1] I get a server error (500) saying "java.lang.UnsupportedOperationException: JcrNodeResourceMetadata is locked" [3]. At the moment I don't see a way to get around that and it would be great if someone has a hint on what to do.

In my ResEditorResourceProvider.java:61 [1] I return a resource that I get from a ResourceResolver. While resolving, the 'ResourceDecoratorTracker.decorate(Resource)' method 'result.getResourceMetadata().lock()' is called and after I returned my resource 'ResourceResolverImpl.getAbsoluteResourceInternal(String path, boolean isResolve)' calls 'resource.getResourceMetadata().setResolutionPath(path)' which triggers the exception. You can see that in the stack trace [3].

++ Background ++
I'm working on a custom ResourceProvider [1] for the Sling Resource Editor [2] that returns a wrapped resource for every Sling resource. This wrapped resource will later get the resource type for the Resource Editor set. That way the Resource Editor script would get called for all resources.

[1] - https://github.com/sandroboehme/resourceeditor/blob/master/src/main/java/org/apache/sling/reseditor/ResEditorResourceProvider.java
[2] - https://issues.apache.org/jira/browse/SLING-4001
[3] -
java.lang.UnsupportedOperationException: JcrNodeResourceMetadata is locked
at org.apache.sling.api.resource.ResourceMetadata.checkReadOnly(ResourceMetadata.java:310) at org.apache.sling.api.resource.ResourceMetadata.put(ResourceMetadata.java:322) at org.apache.sling.api.resource.ResourceMetadata.setResolutionPath(ResourceMetadata.java:254) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getAbsoluteResourceInternal(ResourceResolverImpl.java:955) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.resolveInternal(ResourceResolverImpl.java:810) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.resolveInternal(ResourceResolverImpl.java:327) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.resolve(ResourceResolverImpl.java:225) at org.apache.sling.engine.impl.request.RequestData.initResource(RequestData.java:223) at org.apache.sling.engine.impl.SlingRequestProcessorImpl.doProcessRequest(SlingRequestProcessorImpl.java:142) at org.apache.sling.engine.impl.SlingMainServlet.service(SlingMainServlet.java:217)

Thanks!

Sandro

Reply via email to