Regarding registering Application from Spring: yes, it is not supported at the moment, given that from Spring one registers service beans and providers explicitly. Application can only be installed programmatically or from CXFNonSpringJaxrsServlet.

However, perhaps it does make sense to support registering it from Spring, guess if someone has a 'container' of services and providers which is what Application is then let users reuse it from Spring...
I'll take a look a bit later

Sergey



On 02/10/12 06:36, Rudi wrote:
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.


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to