Wow - cooked that up quick! Let me take a look...
On Wed, Jul 15, 2015 at 10:43 AM, Sergey Beryozkin <[email protected]> wrote: > See > http://git-wip-us.apache.org/repos/asf/cxf/commit/02ec499a > > I'm not sure why it does not work for you, this should work with > 3.0.0-milestone1 but also try 3.0.5. > Register Jackson on both ends, on the server and on the client, and make > sure cxf-rt-rs-extension-providers is not on the classpath, as the server > will register it automatically (something I will consider to change for a > new trunk) > Sergey > On 15/07/15 17:24, Sergey Beryozkin wrote: >> >> I'll have a look >> Sergey >> On 15/07/15 16:58, Chris Wolf wrote: >>> >>> Oh, my bad - I had JacksonJsonProvider not JacksonJaxbJsonProvider. >>> Well, I just tried both and got the same error. I have a feeling I >>> may not be registering it correctly. The CXF version is >>> 3.0.0-milestone1 >>> >>> Thanks... >>> >>> On Wed, Jul 15, 2015 at 9:52 AM, Sergey Beryozkin >>> <[email protected]> wrote: >>>> >>>> Is it JacksonJaxbJsonProvider (you referred to it in the other email) or >>>> JacksonJsonProvider ? And which CXF version ? >>>> >>>> Sergey >>>> On 15/07/15 16:47, Chris Wolf wrote: >>>>> >>>>> >>>>> Ok, I tried to register Jackson, like this: >>>>> >>>>> public void testGetBookWithJSONDatabinding() { >>>>> List<Object> providers = new ArrayList<Object>(); >>>>> // add custom providers if any >>>>> providers.add(JacksonJsonProvider.class); >>>>> WebClient client = WebClient.create(ENDPOINT_ADDRESS, >>>>> providers); >>>>> client.accept("application/json"); >>>>> client.path("shelf/book"); >>>>> Book book = client.query("id", 123L).get(Book.class); >>>>> assertEquals(123L, book.getId()); >>>>> } >>>>> >>>>> ...but then I got this exception: >>>>> >>>>> ResponseProcessingException: No message body reader has been found for >>>>> class CXF_Test.cxf_test.Book, ContentType: application/json >>>>> >>>>> Again, I cannot use spring, so the doc page at: >>>>> >>>>> >>>>> >>>>> http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-Jackson >>>>> >>>>> >>>>> was not too helpful, except pointing out the proper provider class >>>>> name. >>>>> >>>>> Thanks, >>>>> >>>>> Chris >>>>> >>>>> On Wed, Jul 15, 2015 at 2:50 AM, Sergey Beryozkin >>>>> <[email protected]> >>>>> wrote: >>>>>> >>>>>> >>>>>> CXF JAX-RS supports registered custom providers, the default >>>>>> JSONProvider >>>>>> is >>>>>> Jettison based and depends on JAXB, register Jackson instead if needed >>>>>> Sergey >>>>>> On 15/07/15 02:55, Chris Wolf wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> No, it's just a plain POJO with no annotations. I'm pretty sure I >>>>>>> used Jackson to handle JSON-to-POJO and POJO-to_JSON without >>>>>>> requiring >>>>>>> annotations. That's not supported in CXF/JAX-RS? >>>>>>> >>>>>>> Thanks >>>>>>> >>>>>>> Chris >>>>>>> >>>>>>> On Tue, Jul 14, 2015 at 2:59 PM, Sergey Beryozkin >>>>>>> <[email protected]> >>>>>>> wrote: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> CXF JSONProvider only supports JAXB annotated beans, with >>>>>>>> XmlRootElement, >>>>>>>> is >>>>>>>> Book.class in your code below a JAXB bean ? >>>>>>>> Sergey >>>>>>>> On 14/07/15 18:26, Chris Wolf wrote: >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> Again, referring to the example code at: >>>>>>>>> >>>>>>>>> https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing >>>>>>>>> >>>>>>>>> This client code works: >>>>>>>>> >>>>>>>>> @Test >>>>>>>>> public void testGetBookWithProxy() { >>>>>>>>> MyJaxrsResource client = >>>>>>>>> JAXRSClientFactory.create(ENDPOINT_ADDRESS, MyJaxrsResource.class); >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> WebClient.getConfig(client).getRequestContext().put(LocalConduit.DIRECT_DISPATCH, >>>>>>>>> >>>>>>>>> Boolean.TRUE); >>>>>>>>> WebClient.getConfig(client).setBus(bus); >>>>>>>>> Response r = client.getBook("123"); >>>>>>>>> String bookJSON = r.readEntity(String.class); >>>>>>>>> log.info("JAXRS Client result: {}", bookJSON); >>>>>>>>> } >>>>>>>>> >>>>>>>>> ...but this client code (which should try to unmarshall to object) >>>>>>>>> doesn't >>>>>>>>> work: >>>>>>>>> >>>>>>>>> @Test >>>>>>>>> public void testGetBookWithWebClient() { >>>>>>>>> List<Object> providers = new ArrayList<Object>(); >>>>>>>>> // add custom providers if any >>>>>>>>> providers.add(JSONProvider.class); >>>>>>>>> >>>>>>>>> WebClient client = WebClient.create(ENDPOINT_ADDRESS, >>>>>>>>> providers); >>>>>>>>> client.accept("application/json"); >>>>>>>>> client.path("shelf/book"); >>>>>>>>> Book book = client.query("id", 123L).get(Book.class); >>>>>>>>> assertEquals(123L, book.getId()); >>>>>>>>> } >>>>>>>>> >>>>>>>>> >>>>>>>>> The error is: >>>>>>>>> >>>>>>>>> ResponseProcessingException: No message body reader has been >>>>>>>>> found for >>>>>>>>> class CXF_Test.cxf_test.Book, ContentType: application/json >>>>>>>>> >>>>>>>>> However, as can be seen, I configured the "JSONProvider", which I >>>>>>>>> thought would unmarshal JSON to POJOs. >>>>>>>>> >>>>>>>>> Any ideas? >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> 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 >> >> >
