2013-05-22 95 views
2

我有一個讀取.xlsx文件並將內容顯示給用戶的應用程序。該應用程序在Windows環境下工作正常。使用Apache poi讀取.xlsx文件在linux機器上給出org.apache.poi.POIXMLException

我在Ubuntu服務器上的tomcat6上部署了這個Web應用程序的.war文件。我還在服務器上覆制了.xlsx文件。

代碼中文件的路徑是正確的。

但行

FileInputStream file = new FileInputStream(new File(FileName)); 
XSSFWorkbook workbook = new XSSFWorkbook(file); 

給出了一個錯誤

java.lang.reflect.InvocationTargetException 
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62) 
org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403) 
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155) 
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:207) 
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107) 

我已檢查該變量文件名中包含的文件服務器上的正確路徑和文件名(在/ usr /本地/指標/ MetricFiles/FY2013_Q2_GIT_Review_Metrics_by_LSS-GC.xlsx)

由於ubunut服務器是虛擬機,因此我使用WinSCP複製了.xlsx文件。文件的大小也是正確的。

爲什麼在linux平臺上發生此錯誤?

添加其他異常痕跡

Caused by: java.lang.reflect.InvocationTargetException at 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at 
java.lang.reflect.Constructor.newInstance(Constructor.java:525) at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) ... 68 more 
Caused by: java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Arrays.java:2694) at java.lang.String.<init>(String.java:203) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseCdataLiteral(PiccoloLexer.java:3027) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseQuotedTagValue(PiccoloLexer.java:2936) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1754) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362) at 
org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4678) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400) at 
org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714) at 
org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439) at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270) at 
org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257) at 
org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345) at 
org.openxmlformats.schemas.spreadsheetml.x2006.main.StyleSheetDocument$Factory.parse(Unknown Source) at 
org.apache.poi.xssf.model.StylesTable.readFrom(StylesTable.java:121) at 
org.apache.poi.xssf.model.StylesTable.<init>(StylesTable.java:92) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at 
java.lang.reflect.Constructor.newInstance(Constructor.java:525) at 
org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) at 
org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403) at 
org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155) at 
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:207) at 
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107) at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at 
java.lang.reflect.Method.invoke(Method.java:601) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) 
+0

這看起來是枯燥看到這些先決條件一半的例外......剩下的是什麼?(部分原因會告訴你什麼是問題) – Gagravarr

+0

這個Apache POI API對於.xls文件工作正常,但似乎與.xlsx文件有關,我在讀取.xlsx時遇到了類似的異常,但能夠讀取.xls文件 – Satya

+0

@Satya .. Apache POI在Windows平臺上爲我的.xlsx文件工作正常。你在所有平臺上都用apache poi得到這個異常嗎? – bamittal

回答

2

推進到一個答案評論...

您的堆棧跟蹤,這說明了什麼打破了,爲什麼的重要組成部分,是:

Caused by: java.lang.OutOfMemoryError: Java heap space at 
java.util.Arrays.copyOfRange(Arrays.java:2694) 

這是告訴我們Java沒有足夠的內存分配給它來存儲處理您的文件的所有數據需要

如果您在增加JVM堆大小方面需要幫助,我建議您查看this previous questionthis one,這兩者都會說明您的一切。

1

讀取.xlsx文件

org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException 
Caused By :java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlBeans.typeSystemForClassLoadern 

然後我「已經刪除我的舊的xmlbeans-2.0.jar,並把最新的xmlbeans-2.3.0.jar包含此方法時,我也越來越相同的異常,現在解決

+0

這正是我的問題,雖然我的錯誤稍有不同(不是內存不足,但它是InvocationTargetException)。刪除舊的xmlbeans爲我工作。 –

1

我已經在項目中插入了org.apache.xmlbeans它幫助

0

和其他人一樣的答案:。 添加這種依賴性:

<dependency> 
    <groupId>org.apache.xmlbeans</groupId> 
    <artifactId>xmlbeans</artifactId> 
    <version>2.6.0</version> 
</dependency> 

它會在那之後工作。

事實上POI-OOXML需要POI和POI-OOXML-模式 但 POI-OOXML-模式需要的XMLBeans

您可以在此頁面 https://poi.apache.org/overview.html

相關問題