2011-06-02 147 views
0

我有這段代碼給出SAXParseError,即它沒有獲取內容,但是當我在我的測試pg中使用它時,它的作用是正確的。這裏我提供我的原代碼塊,可以ANY1弄清楚是什麼問題org.xml.sax.SAXParseException:文件過早結束

這是部分地方I fetch a xml and append a node to it但似乎我不能夠得到文件本身

String atemp=readFileAsString("../webapps/abc/include/xml/data.xml") 

     log.info("ok thats good") 

     String[] splitString=res.split(",") 

     log.info(atemp) 

     try 
     { 
      def root = new XmlSlurper().parseText(atemp) 
     } 
     catch(Exception e) 
     { 
      log.debug("parse errror: "+e) 
     } 
     root.appendNode { 
      row { 
      name(splitString[1]) 
      host(splitString[2]) 
      desc(splitString[3]) 
      product(splitString[4]) 
      type(splitString[5]) 
      time(splitString[6]) 
      by(splitString[7]) 
      } 
     } 

     def outputBuilder = new StreamingMarkupBuilder() 
     String temp = outputBuilder.bind{ mkp.yield root } 

     File file = new File("../webapps/abc/include/xml/data.xml"); 
     BufferedWriter output = new BufferedWriter(new FileWriter(file)); 
     output.write(temp); 
     output.close(); 
     log.info(temp) 

readFileAsString功能

​​

輸出

INFO http-5050-Processor24 com.abc.helper.WriteXml - false 
INFO http-5050-Processor24 com.abc.helper.WriteXml - File Content 
INFO http-5050-Processor24 com.abc.helper.WriteXml - ok thats good 

注意:我能夠打開該文件在我的測試程序具有相同路徑

+0

您的'readFileAsString'不考慮[文檔編碼](http://www.w3.org/TR/xml/#sec-guessing)。 – McDowell 2011-06-02 10:17:22

回答

1

假設這是在Groovy中,我相信你可以替換所有代碼:

File f = new File('../webapps/abc/include/xml/data.xml') 
def root = new XmlSlurper().parse(f) 
String[] splitString = res.split(',') 
root.appendNode { 
    row { 
    name(splitString[1]) 
    host(splitString[2]) 
    desc(splitString[3]) 
    product(splitString[4]) 
    type(splitString[5]) 
    time(splitString[6]) 
    by(splitString[7]) 
    } 
} 
def outputBuilder = new StreamingMarkupBuilder() 
String newXml = outputBuilder.bind{ mkp.yield root } 
f.text = newXml 

但我重複,在web應用程序中這樣做可能是一個壞主意,就好像兩個線程同時調用此代碼一樣,文件將變得不可預知(並且由於它變得更大,所以更多不可預知)

此外,您可能需要更改:

File f = new File('../webapps/abc/include/xml/data.xml') 

File f = new File("${System.properties['catalina.base']}/webapps/abc/include/xml/data.xml") 

至於建議您in a previous question of yours

+0

:tim:f.text = newXml是做什麼的? – abi1964 2011-06-02 10:18:14

+1

@Abhishek用字符串'newXml'的內容覆蓋文件'f'中的文本...參見[文檔](http://groovy.codehaus.org/groovy-jdk/java/io/File。 HTML#的setText%28java.lang。字符串%29) – 2011-06-02 10:20:56

+0

謝謝蒂姆:)解決了我的問題 – abi1964 2011-06-02 10:35:36

0

readFileAsString方法看起來不錯,但如果日誌輸出到信那麼你的應用程序正在讀取一個空文件,這就是導致XML解析異常的原因。

首先要檢查的是您嘗試讀取的文件的路徑名實際上是正確的,並且該位置的文件實際上不是空的。嘗試在readFileAsString

log.info("file size is " + new File(filePath).length()); 

注意,零表示開始加入這一行無論是文件不存在,或者它是空的。在代碼的其餘部分


看,你的應用程序似乎是讀取文件,做一些它,然後寫回同一個地方。考慮它是生成輸出的代碼被破壞的可能性......並且您的應用程序試圖讀取和解析先前已被破壞的文件。