我正在开发一个RESTful Web服务,该服务将返回某人已添加到我之前实现的Feed列表中的RSS源列表。
现在,如果我返回 TEXT_PLAIN 回复,则在浏览器中显示正常,但是当我尝试返回 APPLICATION_XML 回复时,我收到以下错误:
XML解析错误:文档元素之后的垃圾 位置:http:// localhost:8080 / Assignment1 / api / feedlist 第1行,第135列:SMH Top Headlineshttp://feeds.smh.com.au/rssheadlines/top.xmlUTS Library Newshttp://www.lib.uts.edu.au/news/feed/all
这是代码 - 我无法弄清楚为什么它没有返回格式良好的XML页面(我也尝试使用新行和空格(缩进)格式化XML回复 - 当然这不起作用):< / p>
package au.com.rest;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import au.edu.uts.it.wsd.*;
@Path("/feedlist")
public class RESTFeedService {
String feedFile = "/tmp/feeds.txt";
String textReply = "";
String xmlReply = "<?xml version=\"1.0\"?><feeds>";
FeedList feedList = new FeedListImpl();
@GET
@Produces(MediaType.APPLICATION_XML)
public String showXmlFeeds() throws FileNotFoundException, IOException
{
feedList.load(feedFile);
for (Feed f:feedList.list()){
xmlReply += "<feed><name>" + f.getName() + "</name>";
xmlReply += "<uri>" + f.getURI() + "</uri></feed></feeds>";
}
return xmlReply;
}
}
答案 0 :(得分:2)
feeds
元素:
for (Feed f:feedList.list()){
xmlReply += "<feed><name>" + f.getName() + "</name>";
xmlReply += "<uri>" + f.getURI() + "</uri></feed></feeds>";
}
最小的改变是:
for (Feed f:feedList.list()){
xmlReply += "<feed><name>" + f.getName() + "</name>";
xmlReply += "<uri>" + f.getURI() + "</uri></feed>";
}
xmlReply += "</feeds>";
...但你仍然应该使用下面的其他建议。
第一步 - 您需要进一步诊断问题。查看浏览器中的源代码,看看它正在抱怨什么。你能自己看看XML中的问题吗?它看起来像什么?
在不知道你正在使用的其余框架的情况下,这看起来可能是一个 与为多个请求提供服务的单个实例有关的问题。出于某种原因,你有一个实例变量,你在你的方法中发生了变异。你为什么想这么做?如果为每个请求创建了一个新类的实例,那么它应该不是问题 - 但我不知道是否是这种情况。
作为第一个更改,请尝试移动此行:
String xmlReply = "<?xml version=\"1.0\"?><feeds>";
作为局部变量进入方法。
之后: