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