簡體   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