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.