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