繁体   English   中英

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

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

这是我从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)

有人可以帮我吗。

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

导入javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

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

您所缺少的是像JAXB这样的对象编组器,它可以为您完成这项工作。

看一下本教程的第6章。 这是很好的解释。

一个简单而简单的答案是。 您不能直接将列表转换为xml。 您需要将列表放入类中,这意味着使用户定义数据类型并将列表放入其中。

您可以将类标记为@XmlRootElement

然后将其转换为XML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM