未找到Java类型的消息正文编写器,类java.util.ArrayList和MIME媒体类型application / xml

时间:2013-10-07 11:46:45

标签: java android web-services rest struts

这是我从Android调用的代码

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

    rs.getResponse()

这是我的RESTClient方法。

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);
}

这是我的服务器端Web服务代码

@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;
}

}

这是myServices代码

.........
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;

问题是我得到这样的错误。

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)

有人可以帮帮我吗。

3 个答案:

答案 0 :(得分:2)

未找到Java类java.util.ArrayList的消息正文编写器,Java类型java.util.ArrayList和MIME媒体类型application / xml
通过在类的开头添加XmlRootElement来解决问题(参见jaxb文档) (在服务器类路径中需要jaxb-impl.jar和jaxb-api.jar)

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

答案 1 :(得分:1)

错误消息告诉您,Jersey不知道如何将ListServiceBean个对象转换为有效的xml。

你缺少的是像JAXB这样的对象编组器,它为你完成了这项工作。

看看this tutorial的第6章。很好地解释了。

答案 2 :(得分:0)

一个简单的答案是。您无法直接将列表转换为xml。您需要将列表放入类中意味着创建用户定义的数据类型并将列表放入其中。

您可以将课程标记为@XmlRootElement

然后它将转换为XML。