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="(&(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="(&(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