Hi CXF developers,

1. How do I attach a dynamic list of JAX-RS resources in a jaxrs:server.

Currently, it's only possible to :

        <jaxrs:server id="apiRs" address="/api">
                <jaxrs:providers>
                        <bean 
class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
                        <bean class="org.soluvas.jaxrs.Jackson2ContextResolver">
                                <argument ref="jacksonMapperFactory"/>
                        </bean>
                </jaxrs:providers>
                <jaxrs:serviceBeans>
                        <ref component-id="productRsSys"/>
                        <ref component-id="productRsShop"/>
                        <ref component-id="productRsMall"/>
                        <ref component-id="productRsPub"/>
                </jaxrs:serviceBeans>
        </jaxrs:server>

However, what I'd like is something to the effect of:

        <jaxrs:server id="apiRs" address="/api">
                <jaxrs:providers>
                        <bean 
class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
                        <bean class="org.soluvas.jaxrs.Jackson2ContextResolver">
                                <argument ref="jacksonMapperFactory"/>
                        </bean>
                </jaxrs:providers>
                <jaxrs:serviceBeans>
                        <reference-list
filter="(&amp;(tenantId=berbatik)(tenantEnv=dev)(type=jaxrs)(address=api))"
                                availability="optional"/>
                </jaxrs:serviceBeans>
        </jaxrs:server>

So the actual JAX-RS resources in the server changes dynamically based on a
List bean.

2. I also tried using a JAX-RS Application bean with jaxrs:server:

        <bean id="dynamicRsApp" class="tmp.org.soluvas.rs.DynamicRsApplication">
                <argument>
                        <reference-list
filter="(&amp;(tenantId=berbatik)(tenantEnv=dev)(type=jaxrs)(address=api))"
                                availability="optional"/>
                </argument>
        </bean>

        <jaxrs:server id="apiRs" address="/api">
                <jaxrs:providers>
                        <bean 
class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
                        <bean class="org.soluvas.jaxrs.Jackson2ContextResolver">
                                <argument ref="jacksonMapperFactory"/>
                        </bean>
                </jaxrs:providers>
                <jaxrs:serviceBeans>
                        <ref component-id="dynamicRsApp"/>
                </jaxrs:serviceBeans>
        </jaxrs:server>

But got the following exception: 

2012-10-02 12:17:33,650 | WARN  | rint Extender: 1 | ResourceUtils              
     
| he.cxf.jaxrs.utils.ResourceUtils  373 | 235 -
org.apache.cxf.cxf-rt-frontend-jaxrs - 2.6.2 | No resource methods have been
found for resource class tmp.org.soluvas.rs.DynamicRsApplication
2012-10-02 12:17:33,655 | ERROR | rint Extender: 1 |
AbstractJAXRSFactoryBean         | f.jaxrs.AbstractJAXRSFactoryBean  314 |
235 - org.apache.cxf.cxf-rt-frontend-jaxrs - 2.6.2 | No resource classes
found
2012-10-02 12:17:33,657 | DEBUG | rint Extender: 1 | rs                         
     
| ?                                   ? | 337 - id.co.bippo.product.rs -
5.0.0.SNAPSHOT | ServiceEvent UNREGISTERING
2012-10-02 12:17:33,657 | ERROR | rint Extender: 1 | BlueprintContainerImpl     
     
| container.BlueprintContainerImpl  364 | 9 - org.apache.aries.blueprint -
0.3.2 | Unable to start blueprint container for bundle
id.co.bippo.product.rs
org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to
intialize bean apiRs
        at
org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:640)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:726)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:147)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:631)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:337)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:230)[9:org.apache.aries.blueprint:0.3.2]
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)[:1.7.0_07]
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)[:1.7.0_07]
        at
java.util.concurrent.FutureTask.run(FutureTask.java:166)[:1.7.0_07]
        at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)[:1.7.0_07]
        at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)[:1.7.0_07]
        at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)[:1.7.0_07]
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)[:1.7.0_07]
        at java.lang.Thread.run(Thread.java:722)[:1.7.0_07]
Caused by: org.apache.cxf.service.factory.ServiceConstructionException
        at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:194)
        at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.init(JAXRSServerFactoryBean.java:127)
        at sun.reflect.GeneratedMethodAccessor168.invoke(Unknown Source)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_07]
        at java.lang.reflect.Method.invoke(Method.java:601)[:1.7.0_07]
        at
org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:225)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:838)[9:org.apache.aries.blueprint:0.3.2]
        at
org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:638)[9:org.apache.aries.blueprint:0.3.2]
        ... 15 more
Caused by: javax.ws.rs.WebApplicationException
        at
org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean.checkResources(AbstractJAXRSFactoryBean.java:315)
        at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:144)
        ... 22 more

The error message "No resource methods have been found for resource class
tmp.org.soluvas.rs.DynamicRsApplication" seems like CXF is treating it as a
JAX-RS resource, not a JAX-RS Application.

Any help would be appreciated.

Thank you.

Rudi



--
View this message in context: 
http://cxf.547215.n5.nabble.com/How-to-use-dynamic-list-of-JAX-RS-resources-in-a-jaxrs-server-and-attaching-JAX-RS-Application-instae-tp5715291.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to