我有一個讀取和寫入數據的servlet。這裏是我的代碼片段org.opendatafoundation.data.spss.SPSSFileException:讀取數據時出錯:字符串變量的意外壓縮代碼
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
SPSSFile file = null;
try {
File f = new File(getServerDiretory() + "dabadeba_2011.01.03.sav");
if (!f.exists()) {
System.out.println("not found");
return;
}
file = new SPSSFile(f);
file.loadMetadata();
file.loadData();
if (file == null) {
System.err.println("vai");
return;
}
Document doc = file.getDDI2();
//set up a transformer
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
trans.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
String xmlString = sw.toString();
writeToFile(xmlString);
out.println(xmlString);
} catch (TransformerException ex) {
Logger.getLogger(SPSSReaderServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (FileNotFoundException ex) {
Logger.getLogger(SPSSReaderServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (SPSSFileException ex) {
Logger.getLogger(SPSSReaderServlet.class.getName()).log(Level.SEVERE, null, ex);
} finally {
out.close();
if (file != null) {
file.close();
System.out.println("done, file closed");
}
}
}
一切似乎都在工作,直到我刷新JSP並再次調用此servlet。以下是刷新頁面後出現的錯誤:
SEVERE: org.opendatafoundation.data.spss.SPSSFileException: Error reading data: unexpected compression code for string variable
at org.opendatafoundation.data.spss.SPSSDataRecord.read(SPSSDataRecord.java:161)
at org.opendatafoundation.data.spss.SPSSDataRecord.read(SPSSDataRecord.java:54)
at org.opendatafoundation.data.spss.SPSSFile.loadData(SPSSFile.java:1277)
at ge.geostat.metadata.web.servlet.SPSSReaderServlet.processRequest(SPSSReaderServlet.java:63)
at ge.geostat.metadata.web.servlet.SPSSReaderServlet.doGet(SPSSReaderServlet.java:140)
當我重新部署應用程序並運行它時,它工作正常。我想這是一個內存問題,任何幫助將不勝感激
請檢查catalina日誌文件(如果您使用tomcat)並讓我們知道發生異常的位置。 – boomz 2013-03-27 23:52:14
我使用Glasfish,這裏是空穴例外: 重度:org.opendatafoundation.data.spss.SPSSFileException:錯誤讀取數據:對字符串變量意外壓縮碼 \t在org.opendatafoundation.data.spss.SPSSDataRecord.read( SPSSDataRecord.java:161) \t在org.opendatafoundation.data.spss.SPSSDataRecord.read(SPSSDataRecord.java:54) \t在org.opendatafoundation.data.spss.SPSSFile.loadData(SPSSFile.java:1277) \t at ge.geostat.metadata.web.servlet.SPSSReaderServlet.processRequest(SPSSReaderServlet.java:63) \t at ge.geostat.metadata.web.servlet.SPSSReaderServlet.doGet(SPSSReaderServlet.java:140) – 2013-03-27 23:54:32
將數據寫入文件後關閉文件嗎? – boomz 2013-03-27 23:59:17