http 接收xml数据打印与解析异常

[code="java"]
BufferedReader br = request.getReader();
BufferedReader in = br;
String line = "";
StringBuffer xml = new StringBuffer();
try{
while((line = br.readLine()) != null){
xml.append(line);
}
System.out.println(" mo received in "+ ":" + xml.toString());
}catch(Exception e){
e.printStackTrace();
}
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(in);
Element foo = doc.getRootElement();[/code]
上面这段代码在执行的时候总是会跑出一个异常:
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:530)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:865)
at org.apache.jsp.cs_005fbak_jsp._jspService(cs_005fbak_jsp.java:98)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:619)
麻烦各位给解答下。

dom4j 中的
org.dom4j.tree
Class AbstractElement

有 String asXML()
asXML returns the textual XML representation of this node.

去掉
String line = "";

StringBuffer xml = new StringBuffer();

try{

while((line = br.readLine()) != null){

xml.append(line);

}

System.out.println(" mo received in "+ ":" + xml.toString());

}catch(Exception e){

e.printStackTrace();

}

request中的流用过一次好像就会清除数据

把xml文件给出来吧, 看样子是xml格式有误。

BufferedReader br = request.getReader();

BufferedReader in = br;

SAXBuilder builder = new SAXBuilder();   
Document doc = builder.build(in);   
Element foo = doc.getRootElement();  

试试

是的,数据可以出来吗

JAVA是按照值传递的
BufferedReader in = br;

其实in和br还是指向同一个对象,并没有保存

BufferedReader in =br
这个不对。这两个还是同一个对象。readline读完了就没了。下面再builder.build(im)和传br是一样的

BufferedReader br = request.getReader();

BufferedReader in = br;

SAXBuilder builder = new SAXBuilder();   
Document doc = builder.build(in);   
Element foo = doc.getRootElement();  

System.out.println(foo.asXML());
就可以了

把那个对象克隆一下。clone

Element 这个对象中有,你用什么解析XML

用dom4j吧,dom4j中Elemnet有asXML()这个方法

JDOM应该也有办法把整个文件直接转String的吧