2010-01-28 23 views
1

我想从C#客户到GAEJ应用发布一个潜在大块的XML,然后将其解析为一个DOM文档。在尾部部分例外,获得不错的内容解析由C#的客户端在GAEJ应用产生XML时

我已经设法获得的DocumentBuilder被请求数据解析成一个字符串,然后修整它来解析XML,因为这样的:

 String xml; 
     BufferedReader rdr = req.getReader(); 
     String line; 
     StringBuilder result = new StringBuilder(); 
     while ((line = rdr.readLine()) != null) { 
      result.append(line); 
     } 
     xml = result.toString(); 
     db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(new InputSource(new StringReader(xml.trim()))); 

然而GAEJ应用程序应该尽可能高效,相对于将源流提供给解析器而言,逐行读取可能较大的xml输入到字符串似乎非常糟糕。我想下面的工作:

 Document doc = db.parse(request.getInputStream()); 

但我总是得到“org.xml.sax.SAXParseException:内容不拖尾部分允许”如果我转储request.getInputStream的内容()调用控制台,最终收盘标签后,我可以看到一些箱式的人物,但我不知道他们是如何到达那里(在客户方使用UTF-8编码),或者如何从输入流中移除它们。谢谢!

+1

解决我自己的问题,这竟然是在客户端,而不是在GAE上的应用程序在所有。在某些时候,我使用memorystream.getbuffer()来克隆包含xml的内存流,然后发布该流。坏行为! memorystream.getbuffer()返回流和预先分配的空字符,导致无效的xml文章。 memorystream.getbytes()按预期工作。读者当心! – tempy 2010-01-29 20:18:30

回答