Java XML分析错误:文档元素后的垃圾-REST

Java XML分析错误:文档元素后的垃圾-REST,java,xml,rest,Java,Xml,Rest,我正在开发一个RESTfulWeb服务,它将返回一个RSS提要列表,有人将其添加到我以前实现的提要列表中 现在,如果我返回一个文本\u PLAIN回复,这将在浏览器中显示得很好,尽管当我尝试返回应用程序\u XML回复时,会出现以下错误: XML分析错误:文档元素后出现垃圾邮件 位置:http://localhost:8080/Assignment1/api/feedlist 第1行第135列:SMH顶部封头lineshttp://feeds.smh.com.au/rssheadlines/to

我正在开发一个RESTfulWeb服务,它将返回一个RSS提要列表,有人将其添加到我以前实现的提要列表中

现在,如果我返回一个文本\u PLAIN回复,这将在浏览器中显示得很好,尽管当我尝试返回应用程序\u XML回复时,会出现以下错误:

XML分析错误:文档元素后出现垃圾邮件 位置:http://localhost:8080/Assignment1/api/feedlist 第1行第135列:SMH顶部封头lineshttp://feeds.smh.com.au/rssheadlines/top.xmlUTS 图书馆ewshttp://www.lib.uts.edu.au/news/feed/all

下面是代码-我无法理解它为什么不返回格式良好的XML页面(我还尝试使用新行和空格(缩进)格式化XML回复,当然这不起作用):

package au.com.rest;
导入java.io.FileNotFoundException;
导入java.io.IOException;
导入javax.ws.rs.*;
导入javax.ws.rs.core.*;
导入au.edu.uts.it.wsd.*;
@路径(“/feedlist”)
公共服务{
字符串feedFile=“/tmp/feeds.txt”;
字符串textReply=“”;
字符串xmlReply=“”;
FeedList FeedList=新的FeedListImpl();
@得到
@生成(MediaType.APPLICATION\u XML)
公共字符串showXmlFeeds()引发FileNotFoundException,IOException
{
加载(feedFile);
对于(Feed f:feedList.list()){
xmlReply++=“f.getName()+”;
xmlReply++=“f.getURI()+”;
}
回复;
}
}

编辑:我现在发现了眼前的问题。您正在关闭每个输入元素上的
提要
元素:

for (Feed f:feedList.list()){
    xmlReply += "<feed><name>" + f.getName() + "</name>";
    xmlReply += "<uri>" + f.getURI() + "</uri></feed></feeds>";
}
for(提要f:feedList.list()){
xmlReply++=“f.getName()+”;
xmlReply++=“f.getURI()+”;
}
最小的变化是:

for (Feed f:feedList.list()){
    xmlReply += "<feed><name>" + f.getName() + "</name>";
    xmlReply += "<uri>" + f.getURI() + "</uri></feed>";
}
xmlReply += "</feeds>";
for(提要f:feedList.list()){
xmlReply++=“f.getName()+”;
xmlReply++=“f.getURI()+”;
}
xmlReply+=”;
。。。但是你仍然应该应用下面剩下的建议


第一步-您需要进一步诊断问题。查看浏览器中的源代码,以查看它到底在抱怨什么。您自己能看到XML中的问题吗?它看起来像什么

在不知道您正在使用的rest框架的情况下,这看起来可能是一个错误 为多个请求提供服务的单个实例存在问题。出于某种原因,您得到了一个实例变量,您正在方法中对其进行变异。你为什么要这么做?如果为每个请求创建了一个新的类实例,这应该不是问题——但我不知道是否是这样

作为第一个更改,请尝试移动此行:

String xmlReply = "<?xml version=\"1.0\"?><feeds>";
String xmlReply=“”;
作为局部变量输入到方法中

但在那之后:

  • 把你所有的领域都保密
  • 避免在这样的循环中使用字符串连接
  • 更重要的是,不要手工构建XML—使用XML API来实现。(内置Java API并不好,但有很多替代方案。)
  • 考虑这些字段中的哪一个(如果有的话)是真正的对象状态,而不是应该是局部变量的内容。对象在逻辑上到底处于什么状态

谢谢您的建议。我已将xmlReply声明移动到showXmlFeeds()方法中。当我查看页面源代码时,它似乎向我显示了我需要的XML文档,尽管它都在一行中:SMH Top headlines feeds.SMH.com.au/rssheadlines/Top.xmllib.uts.edu.au/news/feed/all@AlexM当前位置是的,它将全部放在一行中-您没有任何东西可以在其中插入换行符。但请阅读编辑以查看当前问题。答案的其余部分很重要…我刚刚注意到你的编辑,我现在将回顾它,再次感谢你,我的朋友-这非常有帮助-我以后会更加关注这一点。亲切的问候。
String xmlReply = "<?xml version=\"1.0\"?><feeds>";