Я использую клиент CXF rest, который хорошо работает с простыми типами данных (например: строки, ints). Однако, когда я пытаюсь использовать пользовательские объекты, я получаю следующее:
Exception in thread "main" org.apache.cxf.interceptor.Fault: .No message body writer found for class : class com.company.datatype.normal.MyObject.
at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:523)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:438)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:177)
at $Proxy13.execute(Unknown Source)
at com.company.JaxTestClient.main(JaxTestClient.java:26)
Caused by: org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body writer found for class : class com.company.datatype.normal.MyObject.
at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:491)
at org.apache.cxf.jaxrs.client.AbstractClient.writeBody(AbstractClient.java:401)
at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:515)
... 5 more
Я вызываю это так:
JaxExample jaxExample = JAXRSClientFactory.create( "http://localhost:8111/", JaxExample.class );
MyObject before = ...
MyObject after = jaxExample.execute( before );
Вот метод в интерфейсе:
@POST
@Path( "execute" )
@Produces( "application/json" )
MyObject execute( MyObject myObject );
Библиотека рестлета делает это довольно просто, добавляя XStream в зависимости от вашего пути он «просто работает». Есть ли у CXF что-то подобное?
РЕДАКТИРОВАТЬ №1:
Я разместил это как улучшение функции системы управления проблемами CXF здесь . Я могу только надеяться, что этим займутся.