Hi Sam,

Am Donnerstag, den 10.02.2011, 20:03 +0000 schrieb sam lee: 
> Hey,
> 
> I am using Sling and Felix (Day CQ to be exact).
> 
> I am trying to provide my own AdapterFactory so that I can do
> resource.adaptTo(Foo.class);
> 
> This is what I have:
> 
> @Component(name="...", metatype=false, immediate=true)
> @Service
> public class FooAdapterFactory implements AdapterFactory {
> ...
>     @Property(value={Resource.class.getCanonicalName()})
>     private static final String ADAPTERS = AdapterFactory.ADAPTER_CLASSES;
> }
> 
> 
> Obviously, this won't compile because Resource.class.getCanonicalName() is
> not constant expression.
> 
> 
> Workaround would be  using String literal:
>     @Property(value={"org.apache.sling.api.resource.Resource"})
>     private static final String ADAPTERS = AdapterFactory.ADAPTER_CLASSES;

This is actually wrong because ADAPTER_CLASSES lists the target classes
to adapt the objects to. In addition, instead of introducing unneeded
additional constants, I declare such things on the class level such as:


> @Properties({
>     @Property(name = AdapterFactory.ADAPTABLE_CLASSES, value = {
>         "org.apache.sling.api.resource.ResourceResolver",
>         "org.apache.sling.api.resource.Resource" }),
>     @Property(name = AdapterFactory.ADAPTER_CLASSES, value = {
>         "javax.jcr.security.AccessControlManager",
>         "org.apache.jackrabbit.api.security.JackrabbitAccessControlManager" 
> }) })

> 
> 
> 
> Is there other way to register AdapterFactory to Felix?
> @Property annotation does not take Class ....
> 
> And I don't want to use string literal.

Currently there is no way to use something like xyz.class. But out of my
belly it sounds like a reasonable extension to support something like

  @Property(name = AdapterFactory.ADAPTABLE_CLASSES,
       classValue = {
          org.apache.sling.api.resource.ResourceResolver.class,
          org.apache.sling.api.resource.Resource.class
})

where the class objects will then be converted to their fully qualified
names as is done for the @Service annotation.

Regards
Felix


> Thanks.


Reply via email to