Hi

What about isWriteable() code ? This code does not seem right :

type.equals(ArrayList.class) 

can you please change it to something like :
List.class.isAssignableFrom(type) ? 

Can you add a breakpoint to isWriteable ?

cheers, Sergey



mraible wrote:
> 
> I thought I replied to this a couple weeks ago, but apparently not. I'm
> still experiencing this error even after adding
> @Produces({"text/xml","text/plain","application/json"}).
> 
> Thanks,
> 
> Matt
> 
> 
> Sergey Beryozkin wrote:
>> 
>> Hi
>> 
>> CXF 2.2.3 only supports the arrays/collections of JAXB beans. I've added
>> a task to support the explicit collections/arrays of arbitrary (non-JAXB)
>> types. 
>> 
>> Now, as far as your provider is concerned, I think the problem is to do
>> with this declaration :
>> 
>> @Produces("text/xml,text/plain,application/json")
>> 
>> try this instead :
>> 
>> @Produces({"text/xml","text/plain","application/json"})
>> 
>> let me know if it works please...
>> 
>> cheers, Sergey
>> 
>> 
>> mraible wrote:
>>> 
>>> I'm getting this message when trying to return a String[] from a RESTful
>>> service. After searching the mailing list, it seems the best solution is
>>> to change my method to return a List<String> and create a
>>> StringListBodyWriter as a provider. However, after doing that, I'm still
>>> getting a similar error:
>>> 
>>> No message body writer found for response class : ArrayList
>>> 
>>> Here's my StringArrayBodyWriter:
>>> 
>>> @Provider
>>> @Produces("text/xml,text/plain,application/json")
>>> public class StringListBodyWriter implements
>>> MessageBodyWriter<List<String>> {
>>> 
>>>     public long getSize(List<String> t, Class<?> type, Type genericType,
>>>                         Annotation[] annotations, MediaType mediaType) {
>>>             Iterator<String> i = t.iterator();
>>>             long size = 0;
>>>             while (i.hasNext()) {
>>>                     size += i.next().length();
>>>             }
>>>             return size;
>>>     }
>>> 
>>>     public boolean isWriteable(Class<?> type, Type genericType,
>>>                                Annotation[] annotations, MediaType
>>> mediaType) {
>>>             return type.equals(ArrayList.class)
>>>                             && (mediaType.equals(MediaType.TEXT_PLAIN_TYPE) 
>>> |
>>>                             mediaType.equals(MediaType.TEXT_XML_TYPE) |
>>>                             
>>> mediaType.equals(MediaType.APPLICATION_JSON_TYPE));
>>>     }
>>> 
>>>     public void writeTo(List<String> t, Class<?> type, Type genericType,
>>>                         Annotation[] annotations, MediaType mediaType,
>>>                         MultivaluedMap<String, Object> httpHeaders,
>>>                         OutputStream entityStream) throws IOException,
>>>                     WebApplicationException {
>>>             BufferedWriter bw = new BufferedWriter(new
>>> OutputStreamWriter(entityStream));
>>>             String ts = null;
>>>             for (String aT : t) {
>>>                     ts += aT;
>>>             }
>>>             bw.write(ts);
>>>             bw.flush();
>>>     }
>>> }
>>> 
>>> Registered in Spring:
>>> 
>>>     <bean id="stringListProvider"
>>> class="com.company.app.service.StringListBodyWriter"/>
>>> 
>>>         .....
>>> 
>>>     <jaxrs:server id="restServer" address="/rest/">
>>>         <jaxrs:serviceBeans>
>>>             ...
>>>         </jaxrs:serviceBeans>
>>>         <jaxrs:providers>
>>>             <ref bean="jsonProvider"/>
>>>             <ref bean="stringListProvider"/>                
>>>         </jaxrs:providers>
>>> 
>>> Am I doing something wrong? I'm using CXF 2.2.3.
>>> 
>>> Thanks,
>>> 
>>> Matt
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/No-message-body-writer-found-for-response-class-%3A-String---tp25070046p25236729.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to