Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.99 KB | None | 0 0
  1. Exception in thread "main" org.apache.cxf.interceptor.Fault: .No message body writer found for class : class com.company.datatype.normal.MyObject.
  2. at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:523)
  3. at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
  4. at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:438)
  5. at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:177)
  6. at $Proxy13.execute(Unknown Source)
  7. at com.company.JaxTestClient.main(JaxTestClient.java:26)
  8. Caused by: org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body writer found for class : class com.company.datatype.normal.MyObject.
  9. at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:491)
  10. at org.apache.cxf.jaxrs.client.AbstractClient.writeBody(AbstractClient.java:401)
  11. at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:515)
  12. ... 5 more
  13.  
  14. JaxExample jaxExample = JAXRSClientFactory.create( "http://localhost:8111/", JaxExample.class );
  15. MyObject before = ...
  16. MyObject after = jaxExample.execute( before );
  17.  
  18. @POST
  19. @Path( "execute" )
  20. @Produces( "application/json" )
  21. MyObject execute( MyObject myObject );
  22.  
  23. //TestApi parts
  24. @GET
  25. @Path ( "test" )
  26. @Produces ( "application/json" )
  27. public Demo getDemo () {
  28. Demo d = new Demo ();
  29. d.id = 1;
  30. d.name = "test";
  31. return d;
  32. }
  33.  
  34. //client config for a TestApi interface
  35. List providers = new ArrayList ();
  36. JSONProvider jsonProvider = new JSONProvider ();
  37. Map<String, String> map = new HashMap<String, String> ();
  38. map.put ( "http://www.myserviceapi.com", "myapi" );
  39. jsonProvider.setNamespaceMap ( map );
  40. providers.add ( jsonProvider );
  41. TestApi proxy = JAXRSClientFactory.create ( url, TestApi.class,
  42. providers, true );
  43.  
  44. Demo d = proxy.getDemo ();
  45. if ( d != null ) {
  46. System.out.println ( d.id + ":" + d.name );
  47. }
  48.  
  49. //the Demo class
  50. @XmlRootElement ( name = "demo", namespace = "http://www.myserviceapi.com" )
  51. @XmlType ( name = "demo", namespace = "http://www.myserviceapi.com",
  52. propOrder = { "name", "id" } )
  53. @XmlAccessorType ( XmlAccessType.FIELD )
  54. public class Demo {
  55.  
  56. public String name;
  57. public int id;
  58. }
  59.  
  60. @Produces ( "application/json" )
  61. @Consumes ( "application/json" )
  62. @Provider
  63. public class XstreamJsonProvider implements MessageBodyReader<Object>,
  64. MessageBodyWriter<Object> {
  65.  
  66. @Override
  67. public boolean isWriteable ( Class<?> type, Type genericType,
  68. Annotation[] annotations, MediaType mediaType ) {
  69. return MediaType.APPLICATION_JSON_TYPE.equals ( mediaType )
  70. && type.equals ( Demo.class );
  71. }
  72.  
  73. @Override
  74. public long getSize ( Object t, Class<?> type, Type genericType,
  75. Annotation[] annotations, MediaType mediaType ) {
  76. // I'm being lazy - should compute the actual size
  77. return -1;
  78. }
  79.  
  80. @Override
  81. public void writeTo ( Object t, Class<?> type, Type genericType,
  82. Annotation[] annotations, MediaType mediaType,
  83. MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream )
  84. throws IOException, WebApplicationException {
  85. // deal with thread safe use of xstream, etc.
  86. XStream xstream = new XStream ( new JettisonMappedXmlDriver () );
  87. xstream.setMode ( XStream.NO_REFERENCES );
  88. // add safer encoding, error handling, etc.
  89. xstream.toXML ( t, entityStream );
  90. }
  91.  
  92. @Override
  93. public boolean isReadable ( Class<?> type, Type genericType,
  94. Annotation[] annotations, MediaType mediaType ) {
  95. return MediaType.APPLICATION_JSON_TYPE.equals ( mediaType )
  96. && type.equals ( Demo.class );
  97. }
  98.  
  99. @Override
  100. public Object readFrom ( Class<Object> type, Type genericType,
  101. Annotation[] annotations, MediaType mediaType,
  102. MultivaluedMap<String, String> httpHeaders, InputStream entityStream )
  103. throws IOException, WebApplicationException {
  104. // add error handling, etc.
  105. XStream xstream = new XStream ( new JettisonMappedXmlDriver () );
  106. return xstream.fromXML ( entityStream );
  107. }
  108. }
  109.  
  110. //now your client just needs this
  111. List providers = new ArrayList ();
  112. XstreamJsonProvider jsonProvider = new XstreamJsonProvider ();
  113. providers.add ( jsonProvider );
  114. TestApi proxy = JAXRSClientFactory.create ( url, TestApi.class,
  115. providers, true );
  116.  
  117. Demo d = proxy.getDemo ();
  118. if ( d != null ) {
  119. System.out.println ( d.id + ":" + d.name );
  120. }
  121.  
  122. <?xml version="1.0" encoding="UTF-8"?>
  123. <beans xmlns="http://www.springframework.org/schema/beans"
  124. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  125. xmlns:jaxrs="http://cxf.apache.org/jaxrs"
  126. xmlns:cxf="http://cxf.apache.org/core"
  127. xsi:schemaLocation="http://www.springframework.org/schema/beans
  128. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  129. http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
  130. http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
  131.  
  132. <import resource="classpath:META-INF/cxf/cxf.xml" />
  133.  
  134. <jaxrs:server id="TestApi">
  135. <jaxrs:serviceBeans>
  136. <ref bean="testApi" />
  137. </jaxrs:serviceBeans>
  138. <jaxrs:providers>
  139. <bean id="xstreamJsonProvider" class="webtests.rest.XstreamJsonProvider" />
  140. </jaxrs:providers>
  141. </jaxrs:server>
  142.  
  143. <bean id="testApi" class="webtests.rest.TestApi">
  144. </bean>
  145.  
  146. </beans>
  147.  
  148. return MediaType.APPLICATION_JSON_TYPE.getType ().equals ( mediaType.getType () )
  149. && MediaType.APPLICATION_JSON_TYPE.getSubtype ().equals ( mediaType.getSubtype () )
  150. && type.equals ( Demo.class );
  151.  
  152. org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet
  153.  
  154. jaxrs.serviceClasses
  155. jaxrs.providers
  156.  
  157. <servlet>
  158. <servlet-name>cxfservlet</servlet-name>
  159. <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
  160. <init-param>
  161. <param-name>jaxrs.serviceClasses</param-name>
  162. <param-value>webtests.rest.TestApi</param-value>
  163. </init-param>
  164. <init-param>
  165. <param-name>jaxrs.providers</param-name>
  166. <param-value>webtests.rest.XstreamJsonProvider</param-value>
  167. </init-param>
  168. <load-on-startup>1</load-on-startup>
  169. </servlet>
  170.  
  171. <init-param>
  172. <param-name>jaxrs.providers</param-name>
  173. <param-value>
  174. org.apache.cxf.jaxrs.provider.JSONProvider
  175. (writeXsiType=false)
  176. </param-value>
  177. </init-param>
  178.  
  179. <jaxrs:client id="serviceId"
  180. serviceClass="classname"
  181. address="">
  182. <jaxrs:providers>
  183. <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider">
  184. <property name="mapper" ref="jacksonMapper" />
  185. </bean>
  186. </jaxrs:providers>
  187. </jaxrs:client>
  188.  
  189. <bean id="jacksonMapper" class="org.codehaus.jackson.map.ObjectMapper">
  190. </bean>
  191.  
  192. <dependency>
  193. <groupId>org.apache.cxf</groupId>
  194. <artifactId>cxf-rt-rs-extension-providers</artifactId>
  195. <version>3.0.2</version>
  196. </dependency>
  197.  
  198. <dependency>
  199. <groupId>org.codehaus.jackson</groupId>
  200. <artifactId>jackson-jaxrs</artifactId>
  201. <version>1.9.0</version>
  202. </dependency>
  203.  
  204. <jaxrs:providers>
  205. <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider" />
  206. </jaxrs:providers>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement