Vishnu
Vishnu

Reputation: 159

A message body writer for Java type, class java.util.ArrayList, and MIME media type, application/xml, was not found

This is the code I am calling from Android

    RESTClient rs = new RESTClient(WebServicePatterns.SERVICES_URL);
    rs.addParam("role_id", "6");
    try
    {
    rs.sendParams_receiveText();// Call WebService
    }

    rs.getResponse()

Here is my RESTClient's method.

public void sendParams_receiveText() throws Exception 
{
    http_client = new DefaultHttpClient();
    http_post = new HttpPost(uri);
    http_post.setEntity(new UrlEncodedFormEntity(params));
    http_response = http_client.execute(http_post);
    http_entity = http_response.getEntity();

    response =  EntityUtils.toString(http_entity);
}

Here is my Server side Web Service Code

@Produces("application/xml")
@Path("Services")
@Singleton
public class Services_Service
{
    public Services_Service()
    {

    }

@POST
@Path("getServices")
public List<ServicesBean> getServices(@FormParam("role_id") String role_id) 
{

    Services_DB db = new Services_DB();
    List<ServicesBean> services_data = db.myServices(role_id); 
    return services_data;
}

}

here is myServices code

.........
private TreeMap<Integer, ServicesBean>  servicesData    = new TreeMap<Integer, ServicesBean>();
.........

public List<ServicesBean> myServices(String role_id)
{

    List<ServicesBean> entireList = new ArrayList<ServicesBean>();
    ServicesBean bean = new ServicesBean();

    try
    {

        sql = "SELECT A,B,C from TESTTable where .......";

        rs = stmt.executeQuery(sql);

        if (rs != null && rs.next())
        {
            do
            {
                bean = new ServicesBean();

                bean.setService_id(rs.getString("A"));
                bean.setService_name(rs.getString("B"));
                bean.setService_short_name(rs.getString("C"));

                int id = servicesData.size();
                servicesData.put(id, bean);

            } while (rs.next());
        }

        entireList.addAll(servicesData.values());
    } 


    return entireList;

The problem is I am getting Errors like this.

7 Oct, 2013 5:08:05 PM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java type, class java.util.ArrayList, and MIME media type, application/xml, was not found
7 Oct, 2013 5:08:05 PM com.sun.jersey.server.impl.application.WebApplicationImpl onException
SEVERE: Internal server error
javax.ws.rs.WebApplicationException
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:241)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:724)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:647)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:638)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:309)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:425)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:590)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

Could Someone please help me out.

Upvotes: 2

Views: 11844

Answers (3)

azraelAT
azraelAT

Reputation: 762

The error message is telling you, that Jersey does not know how to transform your List of ServiceBean objects into valid xml.

What you are missing is an object marshaller like JAXB which does this job for you.

Take a look at chapter 6 of this tutorial. It is well explained.

Upvotes: 1

Kishan Bheemajiyani
Kishan Bheemajiyani

Reputation: 3439

Well a sort and simple answer is. You can not transform directly list to the xml. You need to put list into the class means make your user defined data type and put list into it.

you can mark class as @XmlRootElement

then it will be convert to the XML.

Upvotes: 0

Indranil Nag
Indranil Nag

Reputation: 81

A message body writer for Java class java.util.ArrayList, and Java type java.util.ArrayList, and MIME media type application/xml was not found
Problem was solved by adding XmlRootElement at the begining of the class (See jaxb documentation) (Need jaxb-impl.jar and jaxb-api.jar in server classpath)

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

Upvotes: 2

Related Questions