未找到 Java 类型 java.util.ArrayList 类和 MIME 媒体类型 application/xml 的消息正文编写器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19224066/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
A message body writer for Java type, class java.util.ArrayList, and MIME media type, application/xml, was not found
提问by Vishnu
This is the code I am calling from Android
这是我从 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.
这是我的 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);
}
Here is my Server side Web Service Code
这是我的服务器端 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;
}
}
here is myServices code
这是 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;
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.
有人可以帮我吗。
采纳答案by azraelAT
The error message is telling you, that Jersey does not know how to transform your List
of ServiceBean
objects into valid xml.
错误消息告诉您,Jersey 不知道如何将您List
的ServiceBean
对象转换为有效的 xml。
What you are missing is an object marshaller like JAXB which does this job for you.
您缺少的是像 JAXB 这样的对象编组器,它可以为您完成这项工作。
Take a look at chapter 6 of this tutorial. It is well explained.
看看本教程的第 6 章。这是很好的解释。
回答by Indranil Nag
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)
未找到 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;
导入 javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlRootElement
回答by Krishna
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.
那么一个简单的答案是。您不能直接将列表转换为 xml。您需要将列表放入类中意味着使您的用户定义数据类型并将列表放入其中。
you can mark class as @XmlRootElement
你可以将班级标记为 @XmlRootElement
then it will be convert to the XML.
然后它将被转换为 XML。