2010-01-28 37 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

回答