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---tp25070046p25229346.html
Sent from the cxf-user mailing list archive at Nabble.com.