Sergey, Thanks for the tip. I indeed forgot an import of "org.codehaus.jackson.jaxrs" in my service manifest. Now Jackson works when felix contains the jackson bundles.
What can I do to continue debugging the jettison issues? I would like to figure out what is wrong there and if a bug may exist. Thanks! Tony On Tue, May 15, 2012 at 5:45 PM, Sergey Beryozkin <[email protected]>wrote: > Have a look at this email please: > http://cxf.547215.n5.nabble.**com/Problem-with-JAXBContext-** > which-is-not-populated-with-**MySecondClass-for-MyClass-lt-** > MySecondClass-gt-tt5574932.**html#a5582743<http://cxf.547215.n5.nabble.com/Problem-with-JAXBContext-which-is-not-populated-with-MySecondClass-for-MyClass-lt-MySecondClass-gt-tt5574932.html#a5582743> > > I think that if you import CXF JSONProvider or Jackson and register an > instance, either as Object or (inside) Array then it should work, > > ClassUtils.loadProviderClasses in > > http://svn.apache.org/repos/**asf/cxf/dosgi/trunk/dsw/cxf-** > dsw/src/main/java/org/apache/**cxf/dosgi/dsw/ClassUtils.java<http://svn.apache.org/repos/asf/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/ClassUtils.java> > > deals with loading the custom providers > > HTH, Sergey > > > On 15/05/12 22:33, Anthony Bargnesi wrote: > >> It is DOSGI version 1.3.1. I tried all jettison versions back to 1.1 and >> received the same error. >> >> I also tried including Jackson in the felix container using the following >> dependencies: >> - jackson-core-lgpl-1.9.7.jar >> - jackson-jaxrs-1.9.7.jar >> - jackson-mapper-lgpl-1.9.7.jar >> - jackson-mrbean-1.9.7.jar >> - jackson-smile-1.9.7.jar >> - jackson-xc-1.9.7.jar >> >> Then I updated my service Activator with the following: >> settings.put("org.apache.cxf.**rs.provider", >> "org.codehaus.jackson.jaxrs.**JacksonJsonProvider"); >> >> When I launched the felix container the Jackson bundles loaded but CXF >> through the error: >> >> java.lang.**ClassNotFoundException: >> org.codehaus.jackson.jaxrs.**JacksonJsonProvider not found by >> service.dashboard [12] >> at >> org.apache.felix.framework.**BundleWiringImpl.** >> findClassOrResourceByDelegatio**n(BundleWiringImpl.java:1460) >> at >> org.apache.felix.framework.**BundleWiringImpl.access$400(** >> BundleWiringImpl.java:72) >> at >> org.apache.felix.framework.**BundleWiringImpl$** >> BundleClassLoader.loadClass(**BundleWiringImpl.java:1843) >> at java.lang.ClassLoader.**loadClass(ClassLoader.java:**247) >> at org.apache.felix.framework.**Felix.loadBundleClass(Felix.**java:1723) >> at org.apache.felix.framework.**BundleImpl.loadClass(** >> BundleImpl.java:926) >> at org.apache.cxf.dosgi.dsw.**ClassUtils.loadProviders(** >> ClassUtils.java:124) >> at >> org.apache.cxf.dosgi.dsw.**ClassUtils.**loadProviderClasses(** >> ClassUtils.java:108) >> at >> org.apache.cxf.dosgi.dsw.**handlers.JaxRSUtils.** >> getProviders(JaxRSUtils.java:**67) >> at >> org.apache.cxf.dosgi.dsw.**handlers.**JaxRSPojoConfigurationTypeHand** >> ler.createServer(**JaxRSPojoConfigurationTypeHand**ler.java:119) >> at >> org.apache.cxf.dosgi.dsw.**service.**RemoteServiceAdminCore.** >> exportService(**RemoteServiceAdminCore.java:**247) >> at >> org.apache.cxf.dosgi.dsw.**service.**RemoteServiceAdminInstance$1.**run(* >> *RemoteServiceAdminInstance.**java:72) >> at >> org.apache.cxf.dosgi.dsw.**service.**RemoteServiceAdminInstance$1.**run(* >> *RemoteServiceAdminInstance.**java:66) >> at java.security.**AccessController.doPrivileged(**Native Method) >> at >> org.apache.cxf.dosgi.dsw.**service.**RemoteServiceAdminInstance.** >> exportService(**RemoteServiceAdminInstance.**java:66) >> at >> org.apache.cxf.dosgi.dsw.**service.**RemoteServiceAdminInstance.** >> exportService(**RemoteServiceAdminInstance.**java:38) >> at >> org.apache.cxf.dosgi.**topologymanager.**TopologyManager$2.run(** >> TopologyManager.java:267) >> at >> java.util.concurrent.**ThreadPoolExecutor$Worker.** >> runTask(ThreadPoolExecutor.**java:886) >> at >> java.util.concurrent.**ThreadPoolExecutor$Worker.run(** >> ThreadPoolExecutor.java:908) >> at java.lang.Thread.run(Thread.**java:662) >> >> Even though the "JAX-RS provider for JSON content type, using Jackson data >> binding (1.9.7)" is an active module >> CXF cannot seem to find it. Do I need to specify this package as an >> import >> to my service bundle? >> >> Thanks! >> Tony >> >> On Tue, May 15, 2012 at 4:48 PM, Sergey Beryozkin<[email protected]** >> >wrote: >> >> Hi, >>> >>> On 15/05/12 21:39, Anthony Bargnesi wrote: >>> >>> Sergey, >>>> >>>> Thanks for the quick reply. I thought that was the issue from another >>>> post<http://cxf.547215.n5.**na**bble.com/DOSGi-and-JSON-**<http://nabble.com/DOSGi-and-JSON-**> >>>> responses-td547432.html<http:/**/cxf.547215.n5.nabble.com/** >>>> DOSGi-and-JSON-responses-**td547432.html<http://cxf.547215.n5.nabble.com/DOSGi-and-JSON-responses-td547432.html> >>>> > >>>> >>>> >>>>> >>>> . >>>> >>>> I added jettison 1.3.1 into the felix osgi container and received a >>>> different error. This one >>>> seems to be around writing JSON for my REST service: >>>> >>>> java.lang.VerifyError: (class: org/apache/cxf/jaxrs/provider/** >>>> **JSONUtils, >>>> method: createBadgerFishWriter signature: >>>> (Ljava/io/OutputStream;)****Ljavax/xml/stream/****XMLStreamWriter;) >>>> >>>> Incompatible >>>> object argument for function call >>>> at >>>> org.apache.cxf.jaxrs.provider.****JSONProvider.createWriter(** >>>> JSONProvider.java:477) >>>> at org.apache.cxf.jaxrs.provider.****JSONProvider.marshal(** >>>> JSONProvider.java:453) >>>> at org.apache.cxf.jaxrs.provider.****JSONProvider.marshal(** >>>> JSONProvider.java:500) >>>> at org.apache.cxf.jaxrs.provider.****JSONProvider.writeTo(** >>>> JSONProvider.java:348) >>>> at >>>> org.apache.cxf.jaxrs.****interceptor.****JAXRSOutInterceptor.** >>>> serializeMessage(****JAXRSOutInterceptor.java:257) >>>> at >>>> org.apache.cxf.jaxrs.****interceptor.****JAXRSOutInterceptor.** >>>> processResponse(****JAXRSOutInterceptor.java:144) >>>> at >>>> org.apache.cxf.jaxrs.****interceptor.****JAXRSOutInterceptor.**** >>>> handleMessage( >>>> **JAXRSOutInterceptor.java:83) >>>> at >>>> org.apache.cxf.phase.****PhaseInterceptorChain.****doIntercept(** >>>> PhaseInterceptorChain.java:****263) >>>> at >>>> org.apache.cxf.interceptor.****OutgoingChainInterceptor.**** >>>> handleMessage(** >>>> OutgoingChainInterceptor.java:****77) >>>> at >>>> org.apache.cxf.phase.****PhaseInterceptorChain.****doIntercept(** >>>> PhaseInterceptorChain.java:****263) >>>> at >>>> org.apache.cxf.transport.****ChainInitiationObserver.****onMessage(** >>>> ChainInitiationObserver.java:****123) >>>> at >>>> org.apache.cxf.transport.http_****jetty.JettyHTTPDestination.**** >>>> serviceRequest(****JettyHTTPDestination.java:323) >>>> at >>>> org.apache.cxf.transport.http_****jetty.JettyHTTPDestination.*** >>>> *doService(** >>>> JettyHTTPDestination.java:289) >>>> at >>>> org.apache.cxf.transport.http_****jetty.JettyHTTPHandler.**handle(** >>>> JettyHTTPHandler.java:72) >>>> at >>>> org.eclipse.jetty.server.****handler.ContextHandler.** >>>> doHandle(ContextHandler.java:****939) >>>> at >>>> org.eclipse.jetty.server.****handler.ContextHandler.** >>>> doScope(ContextHandler.java:****875) >>>> at >>>> org.eclipse.jetty.server.****handler.ScopedHandler.handle(**** >>>> ScopedHandler.java:117) >>>> at >>>> org.eclipse.jetty.server.****handler.****ContextHandlerCollection.**** >>>> handle(** >>>> ContextHandlerCollection.java:****247) >>>> at >>>> org.eclipse.jetty.server.****handler.HandlerWrapper.handle(**** >>>> HandlerWrapper.java:110) >>>> at org.eclipse.jetty.server.****Server.handle(Server.java:342) >>>> at >>>> org.eclipse.jetty.server.****HttpConnection.handleRequest(**** >>>> HttpConnection.java:589) >>>> at >>>> org.eclipse.jetty.server.****HttpConnection$RequestHandler.**** >>>> headerComplete(HttpConnection.****java:1048) >>>> at org.eclipse.jetty.http.****HttpParser.parseNext(**** >>>> HttpParser.java:601) >>>> at org.eclipse.jetty.http.****HttpParser.parseAvailable(** >>>> HttpParser.java:214) >>>> at org.eclipse.jetty.server.****HttpConnection.handle(** >>>> HttpConnection.java:411) >>>> at >>>> org.eclipse.jetty.io.nio.****SelectChannelEndPoint.handle(**** >>>> SelectChannelEndPoint.java:****535) >>>> at >>>> org.eclipse.jetty.io.nio.****SelectChannelEndPoint$1.run(** >>>> SelectChannelEndPoint.java:40) >>>> at >>>> org.eclipse.jetty.util.thread.****QueuedThreadPool$3.run(** >>>> QueuedThreadPool.java:529) >>>> at java.lang.Thread.run(Thread.****java:662) >>>> >>>> >>>> Have you seen this? >>>> >>>> I did awhile back but I thought it somehow 'self-resolved' as other >>>> >>> users reported they set up the default JSON provider, I hope I did >>> actually >>> saw the confirmations but not 100% sure. >>> >>> I'm not how to resolve it, do you us DOSGI 1.3.1 ? Prehaps you can >>> experiment with importing Jackson into the custom bundle and registering >>> it >>> from the Activator >>> >>> Let me know how it goes please >>> Cheers, Sergey >>> >>> >>> Thanks! >>> >>>> Tony >>>> >>>> On Tue, May 15, 2012 at 4:35 PM, Sergey Beryozkin<[email protected]* >>>> *** >>>> >>>>> wrote: >>>>> >>>> >>>> Hi, >>>> >>>>> >>>>> DOSGI does not ship a jettison library by default, so it needs to be >>>>> installed and the DSW refreshed and it should solve the issue. >>>>> Jackson or other providers can be registered if needed >>>>> >>>>> Cheers, Sergey >>>>> >>>>> On 15/05/12 21:17, Anthony Bargnesi wrote: >>>>> >>>>> Hello, >>>>> >>>>>> >>>>>> I am not sure how to configure a JSONProvider in CXF DOSGI. >>>>>> >>>>>> I have a single OSGI bundle that declares a REST interface and >>>>>> implementation. >>>>>> >>>>>> The REST interface is defined as: >>>>>> >>>>>> @Path("dashboard") >>>>>> public interface DashboardRS { >>>>>> >>>>>> @GET >>>>>> @Path("get") >>>>>> @Produces(MediaType.******APPLICATION_JSON) >>>>>> >>>>>> >>>>>> Dashboards getDashboards(); >>>>>> >>>>>> @GET >>>>>> @Path("get/{name}") >>>>>> @Produces(MediaType.******APPLICATION_JSON) >>>>>> Dashboard getDashboard(@PathParam("name"******) final String >>>>>> name); >>>>>> >>>>>> >>>>>> } >>>>>> >>>>>> It is configured in its Activator as: >>>>>> >>>>>> Dictionary<String, String> settings = new Hashtable<String, >>>>>> String>(); >>>>>> settings.put("service.******exported.interfaces", "*"); >>>>>> settings.put("service.******exported.configs, "org.apache.cxf.rs"); >>>>>> settings.put("service.******exported.intents", "HTTP"); >>>>>> settings.put("org.apache.cxf.******rs.address", " >>>>>> http://localhost:9000/ >>>>>> "); >>>>>> >>>>>> Activator.context.******registerService(DashboardRS.**** >>>>>> **class.getName(), >>>>>> >>>>>> >>>>>> new DashboardRSImpl(), settings); >>>>>> >>>>>> The bundle manifest is created as: >>>>>> >>>>>> Manifest-Version: 1.0 >>>>>> Bnd-LastModified: 1337112570807 >>>>>> Build-Jdk: 1.6.0_26 >>>>>> Built-By: tony >>>>>> Bundle-Activator: dashboard.Activator >>>>>> Bundle-ManifestVersion: 2 >>>>>> Bundle-Name: Dashboard REST Service >>>>>> Bundle-SymbolicName: service.dashboard >>>>>> Bundle-Version: 0.0.1.SNAPSHOT >>>>>> Created-By: Apache Maven Bundle Plugin >>>>>> Export-Package: service.dashboard;uses:="org.******osgi.frame >>>>>> work,javax.xml.bind.******annotation,javax.ws.rs";**** >>>>>> version="0.0.1.SNAPSHOT" >>>>>> Import-Package: javax.ws.rs;version="[1.0,2)",****** >>>>>> javax.xml.bind.annotation; >>>>>> version="[2.1,3)",org.osgi.******framework;version="[1.5,2)" >>>>>> >>>>>> >>>>>> Tool: Bnd-1.50.0 >>>>>> >>>>>> Do I have to configure a JSON provider? If so how is that done in >>>>>> DOSGI? >>>>>> >>>>>> Thanks for the help! >>>>>> Tony >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>> Sergey Beryozkin >>>>> >>>>> Talend Community Coders >>>>> http://coders.talend.com/ >>>>> >>>>> Blog: http://sberyozkin.blogspot.com >>>>> >>>>> >>>>> >>>> >>> -- >>> Sergey Beryozkin >>> >>> Talend Community Coders >>> http://coders.talend.com/ >>> >>> Blog: http://sberyozkin.blogspot.com >>> >>> >> > > -- > Sergey Beryozkin > > Talend Community Coders > http://coders.talend.com/ > > Blog: http://sberyozkin.blogspot.com >
