我有一个读取和写入数据的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