felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hendy Irawan" <he...@rainbowpurple.com>
Subject Felix / ServiceMix + CXF + OSGi + JAX-RS -- Re: Exporting META-INF from maven-bundle-plugin / Bnd
Date Sun, 30 Nov 2008 18:45:32 GMT
Since I made it work ultimately, I want to share how I did it.

   1. From ServiceMix shell: `feature install web`
   2. From ServiceMix shell: `feature install cxf-osgi`
   3. CXF extension must be correct in META-INF/spring/beans.xml (include
cxf-extension-jaxrs-binding, cxf-extension-http, osgi/cxf-extension-osgi,
exclude cxf-servlet)
   4. add `META-INF/services/` JAX-RS delegate. From
http://rjrojas.blogspot.com/2008/09/restful-web-services-using-iona-fuse.html:
Note: JAX-RS needs to know what JAX-RS implementation would be used.
This
is done by creating a file called "javax.ws.rs.ext.RuntimeDelegate" in the
META-INF/services directory. The contents of the file specify the name of
the class performing this implementation
(org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl).
   5. Jettison is needed
   6. Embed jsr311-api

What I still don't like is that I need to embed jsr311-api... Shouldn't this
be in CXF bundle?

On Sun, Nov 30, 2008 at 1:55 PM, Hendy Irawan <hendy@rainbowpurple.com>wrote:

> By the way, I have no problem using JAX-WS in ServiceMix4, thanks to
> ServiceMix+CXF's excellent built-in support (I do get occasional "cannot
> start bundle due to (unspecified) constraints" so I clear the data/cache
> directory often)
>
> My problem is when using JAX-RS...
> http://rjrojas.blogspot.com/2008/09/restful-web-services-using-iona-fuse.htmlgives example
of CXF+SMX4+JAX-RS however it uses Spring-DM OSGi service
> reference in JAX-RS server's <serviceBeans>, my app directly refers to a
> JAX-RS-annotated bean, probably this is the cause... (however in a pure Java
> / non-OSGi setting, it works well)
>
> Thank you.
>
> PS: I should've changed the subject... And sorry for cross-posting, because
> I think now this is related more to ServiceMix than Felix.
>
>
> On Sun, Nov 30, 2008 at 1:43 PM, Hendy Irawan <hendy@rainbowpurple.com>wrote:
>
>> Thanks David, that's exactly what I'm trying to do.
>>
>> Frustrated with trying to assemble my own CXF OSGi jar(s), ...
>>
>> Then I used cxf-bundle with Felix... however it requires a lot of
>> dependencies.. especially external dependencies (I take from SpringSource)
>> because a lot of dependencies of cxf-bundle are not OSGi bundles but simple
>> Java jars.
>>
>> Even with all dependencies satisfied, I still get:
>> java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
>> that until now I cannot resolve. Note that the jaxb JARs from CXF
>> (jaxb-api, jaxb-impl, jaxb-xjc) are not OSGi bundles, therefore I use the
>> ones from SpringSource.
>>
>> Frustrated with com.sun.xml.bind.v2 problem, I tried ServiceMix 4, this
>> time I use the FUSE version because of a broken link in Apache ServiceMix 4
>> web site* (my bad, actually)
>>
>> My app uses JAX-RS and this doesn't just work in ServiceMix 4 so I had to
>> download jsr311-api-0.8 OSGified from Roberto Rojas'
>> http://rjrojas.blogspot.com/2008/09/restful-web-services-using-iona-fuse.html
>>
>> This time, I got a "better" error, which is ClassNotFoundException on
>> jaxa.ws.rs.Path. It turns out I have to do a "osgi refresh" on the
>> cxf-bundle JAR everytime making a change on my manifest or deploying a new
>> library. (why is this? Shouldn't FileMonitor do this for me?)
>>
>> The current state, is I'm getting two different errors, depending on which
>> bundle I try to refresh.
>>
>> If I refresh cxf-bundle (#91 on my list), I get:
>>
>> servicemix osgi> refresh 91
>> servicemix osgi> Nov 30, 2008 1:40:46 PM
>> org.apache.cxf.endpoint.ServerImpl initDestination
>> INFO: Setting the server's publish address to be /Test
>> Exception in thread "SpringOsgiExtenderThread-88"
>> org.springframework.beans.factory.BeanCreationException: Error creating bean
>> with name 'restServer': Error setting property values; nested exception is
>> org.springframework.beans.PropertyBatchUpdateException; nested
>> PropertyAccessExceptions (1) are:
>> PropertyAccessException 1:
>> org.springframework.beans.MethodInvocationException: Property 'serviceBeans'
>> threw exception; nested exception is java.lang.NoClassDefFoundError: Could
>> not initialize class javax.ws.rs.core.MediaType
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1278)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
>>         at java.security.AccessController.doPrivileged(Native Method)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
>>         at
>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
>>         at
>> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
>>         at
>> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
>>         at
>> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:276)
>>         at
>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:145)
>>         at java.lang.Thread.run(Thread.java:619)
>> Caused by: org.springframework.beans.PropertyBatchUpdateException; nested
>> PropertyAccessExceptions (1) are:
>> PropertyAccessException 1:
>> org.springframework.beans.MethodInvocationException: Property 'serviceBeans'
>> threw exception; nested exception is java.lang.NoClassDefFoundError: Could
>> not initialize class javax.ws.rs.core.MediaType
>>         at
>> org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:104)
>>         at
>> org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1275)
>>         ... 15 more
>>
>> However if I refresh my own bundle (#34), I get:
>>
>> servicemix osgi> refresh 34
>> servicemix osgi> Nov 30, 2008 1:41:34 PM
>> org.apache.cxf.endpoint.ServerImpl initDestination
>> INFO: Setting the server's publish address to be /Test
>> Exception in thread "SpringOsgiExtenderThread-90"
>> org.springframework.beans.factory.BeanCreationException: Error creating bean
>> with name 'restServer': Error setting property values; nested exception is
>> org.springframework.beans.PropertyBatchUpdateException; nested
>> PropertyAccessExceptions (1) are:
>> PropertyAccessException 1:
>> org.springframework.beans.MethodInvocationException: Property 'serviceBeans'
>> threw exception; nested exception is java.lang.NoClassDefFoundError: Could
>> not initialize class org.apache.cxf.jaxrs.utils.JAXRSUtils
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1278)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
>>         at java.security.AccessController.doPrivileged(Native Method)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
>>         at
>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
>>         at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
>>         at
>> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
>>         at
>> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
>>         at
>> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:276)
>>         at
>> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:145)
>>         at java.lang.Thread.run(Thread.java:619)
>> Caused by: org.springframework.beans.PropertyBatchUpdateException; nested
>> PropertyAccessExceptions (1) are:
>> PropertyAccessException 1:
>> org.springframework.beans.MethodInvocationException: Property 'serviceBeans'
>> threw exception; nested exception is java.lang.NoClassDefFoundError: Could
>> not initialize class org.apache.cxf.jaxrs.utils.JAXRSUtils
>>         at
>> org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:104)
>>         at
>> org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59)
>>         at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1275)
>>         ... 15 more
>>
>> Same error, different offending class, one is from package
>> org.apache.cxf.jaxrs.utils and one is from package javax.ws.rs.core, both
>> packages are Import-Package-ed from in app's manifest.
>>
>> What a chronology... I hope you're willing to help me debug this problem.
>> Thank you.
>>
>>
>> * http://servicemix.apache.org/SMX4/runtime.html contains broken link
>> "You can grab a download of the minimum ServiceMix 4 Runtime here<http://people.apache.org/repo/m2-snapshot-repository/org/apache/servicemix/runtime/org.apache.servicemix.runtime.minimum/4.0-SNAPSHOT/org.apache.servicemix.runtime.minimum-4.0-SNAPSHOT.tar.gz>."
>> It probably should just point to
>> http://servicemix.apache.org/SMX4/download.html or SMX4KNL (?)
>>
>>
>> On Sun, Nov 30, 2008 at 3:23 AM, David Bosschaert <
>> david.bosschaert@gmail.com> wrote:
>>
>>> Hi Hendy,
>>>
>>> Not sure what you're exactly trying to do but just to let you know
>>> that CXF is already available as an OSGi bundle. E.g. you may want to
>>> take a look at cxf-minimal:
>>>  http://svn.apache.org/repos/asf/cxf/trunk/distribution/bundle/minimal/
>>>
>>> If you want to get an easy dsitribution of CXF running inside an OSGi
>>> container, have a look at ServiceMix 4
>>> (http://servicemix.apache.org/SMX4/download.html). When you start SMX4
>>> it will actually launch Felix and run all the functionality in that as
>>> OSGi bundles. This includes CXF.
>>>
>>> Cheers,
>>>
>>> David
>>>
>>
>
>
> --
> Best regards,
> Hendy Irawan
> http://hendyirawan.com/
>



-- 
Best regards,
Hendy Irawan
http://hendyirawan.com/

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message