Hello all, I would like to use MOXY in order to handle interfaces as input arguments on my service methods. First, I tested MOXY data binding with interfaces as it is given in the following blog: http://blog.bdoughan.com/2010/07/moxy-jaxb-map-interfaces-to-xml.html
It works oK for me, thus I can serialize and deserialize messages by declaring a service method with an interface argument, without defining any implementation classes of this interface. In order to do a similar think integrated to cxf, I followed the discussion at this link: http://cxf.547215.n5.nabble.com/How-to-configure-CXF-to-use-different-JAXBContextFactory-td5281773.html Here is my ContextResolver Class: ----------------------------------------- package project; @Provider public class MyContextResolver implements ContextResolver<JAXBContext> { private JAXBContext jc; public MyContextResolver() { try { jc = JAXBContext.newInstance(MyObjectFactory.class); } catch(JAXBException e) { throw new RuntimeException(e); } } public JAXBContext getContext(Class<?> type) { try { jc = JAXBContextFactory.createContext(new Class[] {MyObjectFactory.class}, null); return jc; } catch (JAXBException e) { e.printStackTrace(); } return null; } } Here is my ObjectFactory class: ----------------------------------------- @XmlRegistry public class MyObjectFactory { public Customer createCustomer() { return createInstance(Customer.class); } ... private <T> T createInstance(Class<T> anInterface) { return (T) Proxy.newProxyInstance(anInterface.getClassLoader(), new Class[] {anInterface}, new InterfaceInvocationHandler()); } private static class InterfaceInvocationHandler implements InvocationHandler { private Map<String, Object> values = new HashMap<String, Object>(); public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String methodName = method.getName(); if(methodName.startsWith("get")) { return values.get(methodName.substring(3)); } else { values.put(methodName.substring(3), args[0]); return null; } } } } Here is my bean.xml file: ----------------------------------- <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxrs:server id="test" address="/"> <jaxrs:serviceBeans> <ref bean="myWebService" /> </jaxrs:serviceBeans> <jaxrs:providers> <ref bean="MOXYProvider" /> </jaxrs:providers> </jaxrs:server> <bean id="MOXYProvider" class="project.MyContextResolver" /> <bean id="myWebService" class="project.Service" /> </beans> Here is a the constructor of my service class: ---------------------------------------------------- public Service(){ ObjectFactory objectFactory = new ObjectFactory(); Customer c = objectFactory.createCustomer(); c.setName("defaultName"); Address address = objectFactory.createAddress(); address.setCity("defaultAddress"); address.setStreet("defaultStreet"); c.setAddress(address); this.resources.put(c.getName(), s); } and here is my GET method: @GET @Path("/resources/{name}/") public Customer getCustomer(@PathParam("name") String name) { return this.resources.get(name); } When I call my service, I get the following error: Exception in thread "main" Status : 500 Headers : Date : Wed, 20 Feb 2013 16:02:30 GMT Content-Length : 65 Content-Type : text/plain Connection : close Server : Apache-Coyote/1.1 Error message : No message body writer has been found for response class $Proxy5. at org.apache.cxf.jaxrs.client.ClientProxyImpl.checkResponse(ClientProxyImpl.java:250) at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:517) at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:487) at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:188) at $Proxy18.getResource(Unknown Source) at project.Client.main(Client.java:35) Any idea about this error please? Regards, Diana -- View this message in context: http://cxf.547215.n5.nabble.com/How-to-configure-cxf-to-use-MOXY-Jaxb-for-RESTful-tp5723506.html Sent from the cxf-user mailing list archive at Nabble.com.
