[
https://issues.apache.org/jira/browse/SLING-3267?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Bertrand Delacretaz updated SLING-3267:
---------------------------------------
Attachment: SLING-3267.patch
Here's my suggested patch where a null ResourceDecorator.decorate() return
value causes a Resource to be ignored. All tests including the
launchpad/testing tests pass with this patch.
I think the IgnoredResourcesTest and ResourceIteratorDecoratorTest in the patch
demonstrate the behavior described by [~justinedelson], a review of that is
welcome.
We can discuss on list whether using the ResourceDecorator to handle feature
flags is appropriate, but in any case it might be good to clarify what
ResourceDecorator.decorate returning null means, and fix our code so that it
actually does what it should.
> ResourceDecorator returning null should cause Resources to be ignored
> ---------------------------------------------------------------------
>
> Key: SLING-3267
> URL: https://issues.apache.org/jira/browse/SLING-3267
> Project: Sling
> Issue Type: Improvement
> Components: ResourceResolver
> Affects Versions: Resource Resolver 1.0.6
> Reporter: Bertrand Delacretaz
> Assignee: Bertrand Delacretaz
> Priority: Minor
> Attachments: SLING-3267.patch
>
>
> The ResourceDecorator API's decorate(...) method javadocs currently specify
> that it can return null, but I don't think that's supported in a consistent
> way in the resource resolving process - returning null causes the resource
> resolver to supply a null Resource in some cases, which will probably cause
> NPEs downstream.
> The javadocs also say "If the service does not want to decorate the resource,
> it should return the original resource" which is consistent with how the
> resource resolver currently operates: returning null is clearly not a way of
> saying "do not decorate this resource".
> As we're discussing feature flags in Sling, we could clarify this behavior by
> specifying that a ResourceDecorator returning null causes the resource to be
> considered as non-existent, and making the corresponding (rather small)
> changes in the resource resolver code.
> As every Resource needs to go through the available ResourceDecorators, this
> is a simple way of making resources hideable based on feature flags. One then
> just needs to implement a ResourceDecorator that returns null when a Resource
> must be ignored.
--
This message was sent by Atlassian JIRA
(v6.1#6144)