No, there're no utilities (in CXF) for wrapping String values into
corresponding name:value JSON sequences or xml elements.
What sort of wrapper names would be acceptable for Strings ?
is it 'string' ?

so List<String> can be then be serialized like :
<strings>
<string>foo</string>
<string>foo</string>
<strings>

or

{{"string":"foo"},{"string":"bar"}}

?

cheers, Sergey


mraible wrote:
> 
> That fixed it - thanks! 
> 
> Now I just need to figure the best way to write the output to JSON and
> XML. Are there some utilities I can use or should I just construct a
> StringBuffer with the necessary wrapper characters?
> 
> Thanks,
> 
> Matt
> 
> 
> Sergey Beryozkin wrote:
>> 
>> 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---tp25070046p25242617.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to