2014-09-24 245 views
0

我試圖使用POI在一個servlet來處理上傳的文件爲Excel文件:拋出java.lang.ClassNotFoundException:org.apache.xmlbeans.XmlOptions

public static String readExcel(InputStream inp) { 
    // InputStream inp = null; 
    StringBuilder excelDataBuilder = new StringBuilder(); 
    try { 
     Workbook wb = WorkbookFactory.create(inp); 
     Sheet sheet = wb.getSheetAt(0); 
     Header header = sheet.getHeader(); 

     int rowsCount = sheet.getLastRowNum(); 
     for (int rowCounter = 0; rowCounter <= rowsCount; rowCounter++) { 
      Row row = sheet.getRow(rowCounter); 
      int colCounts = row.getLastCellNum(); 
      for (int colCounter = 0; colCounter < colCounts; colCounter++) { 
       Cell cell = row.getCell(colCounter); 
       excelDataBuilder.append(cell.getStringCellValue()); 
       if (colCounter < colCounts) 
        excelDataBuilder.append(","); 
      } 
      if (rowCounter <= rowsCount) { 
       excelDataBuilder.append("\n"); 
      } 
     } 
     return excelDataBuilder.toString(); 

    } catch (Exception ex) { 
     LOG.error("Exception", ex); 
    } finally { 
     try { 
      inp.close(); 
     } catch (IOException ex) { 
      LOG.error("IOException", ex); 
     } 
    } 
    return excelDataBuilder.toString(); 
} 

但是,在以下拋出異常行:

Workbook wb = WorkbookFactory.create(inp); 

這裏的堆棧跟蹤:

SEVERE: Servlet.service() for servlet [com.bhrt93.excel.servlet.UploadProcessExcel] in context with path [/ExcelServletProcessCommons] threw exception [Servlet execution threw an exception] with root cause 
java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlOptions 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
    at org.apache.poi.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:59) 
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:78) 
    at com.bhrt93.excel.service.ExcelReaderService.readExcel(ExcelReaderService.java:22) 
    at com.bhrt93.excel.servlet.UploadProcessExcel.doPost(UploadProcessExcel.java:69) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 

這是怎麼造成的,我該怎麼解決呢?

+1

添加堆棧跟蹤 – bhrt 2014-09-24 18:52:30

+0

[拋出java.lang.ClassNotFoundException:org.apache.xmlbeans.XmlException]的可能的複製(HTTP://計算器.COM /問題/ 23080945/JAVA琅ClassNotFoundException的-ORG-Apache的XMLBeans的-xmlexception) – bhrt 2017-02-23 10:19:24

回答

6

正如Apache POI page on Components and their Dependencies詳細...

如果要使用公共擴頻碼,如WorkbookFactory,你需要在你的classpath既poipoi-ooxml POI罐子。另外,你也需要他們的依賴關係。其中一個listed dependencies的是xmlbeans,這亦是你缺少類來自

所以,你只需要review the Components and Dependencies page,然後確保你包括你的classpath來自Apache的POI的二進制包合適的jar。 (或者使用Maven並讓它擔心你)

相關問題