This is because multiple media types should be specified like this:
@Produces({"application/json","application/xml"})
@Consumes({"application/json","application/xml"})
Cheers, Sergey
On Wed, Jun 15, 2011 at 4:52 PM, Pankaj Jangid <[email protected]> wrote:
> Changed the service class to:
>
>
> @Path("/")
> @Produces("application/json,application/xml")
> @Consumes("application/json,application/xml")
> public class Service
> {
> @GET
> @Path("/getCustomer")
> public JAXBElement<GreetingListType> getCustomer() {
> ObjectFactory of = new ObjectFactory();
> GreetingListType grList = of.createGreetingListType();
> GreetingType g = of.createGreetingType();
> g.setText("Hello World");
> g.setLanguage("en");
> grList.getGreeting().add(g);
> JAXBElement<GreetingListType> gl = of.createGreetings( grList );
> return gl;
> }
>
> It is now producing this message:
>
> No message body writer has been found for response class JAXBElement.
>
>
> --
> Regards
> Pankaj
>
> On 14 June 2011 22:14, Sergey Beryozkin <[email protected]> wrote:
>
>> I'd recommend you avoid returning Map directly and wrap it inside
>> custom JAXB bean,
>> Otherwise you need to add XmlJavaTypeAdaper. May be Jackson can handle
>> Map directly - not sure about it
>> Cheers, Sergey
>>
>> On Tue, Jun 14, 2011 at 5:17 PM, Pankaj Jangid <[email protected]>
>> wrote:
>> > I am new to CXF.
>> > I want to GET result as JSON. My getCustomer() resource method is like
>> this
>> >
>> > @Path("/")
>> > @Produces("application/json,application/xml")
>> > public class Service
>> > {
>> > @GET
>> > @Path("/getCustomers")
>> > public String getCustomers() {
>> > HashMap hm = new HashMap();
>> > hm.put("Hello", "World");
>> > return hm;
>> > }
>> >
>> > my bean.xml (which is referenced in web.xml is
>> >
>> > <beans xmlns="http://www.springframework.org/schema/beans"
>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> > xmlns:jaxrs="http://cxf.apache.org/jaxrs"
>> > xsi:schemaLocation="
>> > http://www.springframework.org/schema/beans
>> > http://www.springframework.org/schema/beans/spring-beans.xsd
>> > http://cxf.apache.org/jaxrs
>> > http://cxf.apache.org/schemas/jaxrs.xsd">
>> >
>> > <import resource="classpath:META-INF/cxf/cxf.xml" />
>> > <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>> >
>> > <jaxrs:server id="rest-api" address="/myservice">
>> > <jaxrs:serviceBeans>
>> > <ref bean="serviceBean"/>
>> > </jaxrs:serviceBeans>
>> > <jaxrs:extensionMappings>
>> > <entry key="json" value="application/json"/>
>> > <entry key="xml" value="application/xml"/>
>> > </jaxrs:extensionMappings>
>> > <jaxrs:providers>
>> > <ref bean="jaxbProvider"/>
>> > <ref bean="jsonProvider"/>
>> > </jaxrs:providers>
>> > </jaxrs:server>
>> >
>> > <bean id="serviceBean"
>> > class="my.Service"/>
>> > <bean id="jaxbProvider"
>> > class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/>
>> > <bean id="jsonProvider"
>> > class="org.apache.cxf.jaxrs.provider.JSONProvider"/>
>> >
>> > </beans>
>> >
>> > When I access the service it produces this message:-
>> >
>> > No message body writer has been found for response class HashMap.
>> >
>> > --
>> > Regards
>> > Pankaj
>> >
>>
>
--
Sergey Beryozkin
Application Integration Division of Talend
http://sberyozkin.blogspot.com