I'm building a service using CXF 2.4.1 by reusing most of the setup of a
project that was using CXF 2.3.2. The first project was using Jackson, but I'm
going to try using Jettison for this.
My first unit test method uses the default of xml, and that parses the response
just fine. The second method uses the ".json" extension, and I see in the
console output that it returned a Jettison-formatted JSON response (it had the
namespace prefix on the element name), but it just said this (class name
changed):
Jul 12, 2011 8:12:15 AM org.apache.cxf.jaxrs.client.AbstractClient
reportMessageHandlerProblem
SEVERE: .Problem with reading the response message, class : class
mypackage.Myclass, ContentType : application/json.
I'm referencing "cxf-rt-transports-http" and "cxf-rt-frontend-jaxrs" in my POM.
The following is in my unit test class (with some class names and paths
changed):
------------------------
@BeforeClass
public static void startServer() {
setController(new StuffController());
getController().init();
ServerFactory.create(getController(), TestHelper.BASE_SERVICE_URI);
}
@Test
public void testBasic() throws Exception {
getController().setService(service);
WebClient client =
WebClient.create(TestHelper.BASE_SERVICE_URI).path("/stuff");
Stuffs mockStuffs = new Stuffs();
when(service.getStuff()).thenReturn(mockStuffs);
Stuffs stuffs = client.get(Stuffs.class);
assertThat(stuffs).isNotNull();
}
@Test
public void testBasicJson() throws Exception {
getController().setService(service);
WebClient client =
WebClient.create(TestHelper.BASE_SERVICE_URI).path("/stuff.json");
Stuffs mockStuffs = new Stuffs();
when(service.getStuff()).thenReturn(mockStuffs);
Stuffs stuffs = client.get(Stuffs.class);
assertThat(stuffs).isNotNull();
}
---------------
This is my ServerFactory class:
----------------------
public class ServerFactory {
public static void create(Object serviceBean, String uri) {
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
BindingFactoryManager manager =
sf.getBus().getExtension(BindingFactoryManager.class);
JAXRSBindingFactory factory = new JAXRSBindingFactory();
factory.setBus(sf.getBus());
manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID,
factory);
Map<Object, Object> extensionsMap = new HashMap<Object, Object>();
extensionsMap.put("json", "application/json");
extensionsMap.put("xml", "application/xml");
sf.setExtensionMappings(extensionsMap);
sf.setServiceBean(serviceBean);
sf.getInInterceptors().add(new LoggingInInterceptor());
sf.getOutInterceptors().add(new LoggingOutInterceptor());
sf.setAddress(uri);
sf.create();
}
}
--------------------