[ 
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)

Reply via email to