On Wed, Nov 27, 2024 at 11:18:45AM -0500, apache-karaf-...@pyr3x.com.INVALID wrote: > Hello, > > There seems to be an issue with the Jackson JSON processing. > > From a clean karaf 4.4.6 install I do: > > feature:install scr > feature:repo-add aries.jax.rs.whiteboard > feature:repo-add cxf > feature:install aries-jax-rs-whiteboard-jackson > > I then deploy a simple bundle: > > @Component(service = TestResource.class, scope = ServiceScope.PROTOTYPE) > @JaxrsResource > //@JaxrsApplicationSelect("(" + JaxrsWhiteboardConstants.JAX_RS_NAME + "=" + > MyApplication.NAME + ")") > public class TestResource { > > @GET > @Path("hello") > @Produces(MediaType.APPLICATION_JSON) > public Woot sayHello(){ > return new Woot(); > } > > @GET > @Path("hello2") > @Produces(MediaType.TEXT_PLAIN) > public String sayHello2(){ > return "test\n"; > } > } > > curl localhost:8181/hello2 returns 'test' > > the second curl should return the json of Woot which is just a simple > class with a getName(), however, the first invocation will return the > following. The second invocation does what is expected. > > Caused by: java.lang.ClassNotFoundException: > com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector not found by > com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider [62] > at > org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1591) > ~[?:?] > at > org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) > ~[?:?] > at > org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976) > ~[?:?] > at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?] > at > com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator._resolveIntrospector(JsonMapperConfigurator.java:126) > ~[?:?] > at > com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator._resolveIntrospectors(JsonMapperConfigurator.java:101) > ~[?:?] > at > com.fasterxml.jackson.jaxrs.cfg.MapperConfiguratorBase._setAnnotations(MapperConfiguratorBase.java:120) > ~[?:?] > at > com.fasterxml.jackson.jaxrs.json.JsonMapperConfigurator.getDefaultMapper(JsonMapperConfigurator.java:51) > ~[?:?] > at > com.fasterxml.jackson.jaxrs.base.ProviderBase.locateMapper(ProviderBase.java:925) > ~[?:?] > at > com.fasterxml.jackson.jaxrs.base.ProviderBase._endpointForWriting(ProviderBase.java:697) > ~[?:?] > at > com.fasterxml.jackson.jaxrs.base.ProviderBase.writeTo(ProviderBase.java:572) > ~[?:?] > at > org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1651) > ~[!/:3.6.4] > at > org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:249) > ~[!/:3.6.4] > > This assumes using the default whiteboard. If I create an application > and set the following: > > @Component(service = Application.class, property = { > "servlet.init.hide-service-list-page=false" }) > @JaxrsName(MyApplication.NAME) > @JaxrsApplicationBase("/test") > public class MyApplication extends Application { > > public static final String NAME = "my-app"; > } > > And then I uncomment the JaxRsApplicationSelect, it will report there > are no message body writers at all. I had assumed that bringing in the > aries-jax-rs-whiteboard-jackson feature would register the provider to > all contexts. It seems only to work with the default context but only > after the first invocation fails. > > A side note when deploying multiple applications I have to set the > > org.apache.cxf.osgi.http.transport.disable=true > > This is neither here nor there I just found it on a forum. I think there > should be more examples. > > I have also noticed that bringing in that aries whiteboard jackson > relies on cxf-jaxrs which brings in different versions of the jackson > libraries. Perhaps this should be removed. > > Any ideas how to resolve this for the case of the default whiteboard and > registering the provider when not deployed to the default using > Application? > > -- > Chaz
Upon further testing, if I had a @XmlRootElement to the Woot class, I no longer have an issue with finding the message body writer when deploying using an Application, however, using the default whiteboard still produces that issue of having to invoke it once first. -- Chaz