Чытанне .xlsx файл з дапамогай Apache POI дае org.apache.poi.POIXMLException на Linux машыне

У мяне ёсць дадатак, якое счытвае файл .xlsx і адлюстроўвае змесціва для карыстальніка. Прыкладанне выдатна працуе на асяроддзі Windows.

Я разгарнула .war файл гэтага вэб-дадатак на tomcat6 на сэрвэры Ubuntu. Я таксама скапіяваў .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.(XSSFWorkbook.java:207)
com.qm.action.GetProjectNames.execute(GetProjectNames.java:107)

Я праверыў, што пераменная FileName ўтрымлівае правільны шлях і імя файла файлаў на серверы (/usr/local/Metrics/MetricFiles/FY2013_Q2_GIT_Review_Metrics_by_LSS-GC.xlsx)

Паколькі сервер ubunut з'яўляецца VM, я скапіяваў .xlsx файлаў з дапамогай WinSCP. Памер файлаў таксама правільна.

Чаму гэтая памылка адбываецца на платформе 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.(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.(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.(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)
2
Гэты API Apache POI працуе выдатна для .xls файлаў, але, здаецца, праблема з .xlsx файла, я атрымаў падобнае выключэнне пры чытанні .xlsx, але ўмее чытаць файл .xls
дададзена аўтар Satya, крыніца
Гэты API Apache POI працуе выдатна для .xls файлаў, але, здаецца, праблема з .xlsx файла, я атрымаў падобнае выключэнне пры чытанні .xlsx, але ўмее чытаць файл .xls
дададзена аўтар Satya, крыніца
Гэта выглядае быць сумным палова, за выключэнне ... Што астатняе? (Прычыненне частка раскажуць вам, што на самой справе гэта праблема)
дададзена аўтар Gagravarr, крыніца
Гэта выглядае быць сумным палова, за выключэнне ... Што астатняе? (Прычыненне частка раскажуць вам, што на самой справе гэта праблема)
дададзена аўтар Gagravarr, крыніца
Спрабавалі Ці вы павялічыць памер кучы? Гэта нармальна выправіць, калі вы не далі Java дастаткова памяці ...
дададзена аўтар Gagravarr, крыніца
Спрабавалі Ці вы павялічыць памер кучы? Гэта нармальна выправіць, калі вы не далі Java дастаткова памяці ...
дададзена аўтар Gagravarr, крыніца
@Satya .. Apache POI працуе выдатна для .xlsx файлаў на платформе вокнаў для мяне. Ці атрымалі вы гэта выключэнне з апача паі на ўсіх платформах?
дададзена аўтар bamittal, крыніца
@Gagravarr. Я дадаў дадатковы след выключэнні. Гэта прадугледжвае, з выключэння памяці. Файл Чытаю каля 1 МБ. Ці будзе чытанне файла гэтага памеру таксама даць Java памылку кучы прасторы?
дададзена аўтар bamittal, крыніца
@Gagravarr. Я дадаў дадатковы след выключэнні. Гэта прадугледжвае, з выключэння памяці. Файл Чытаю каля 1 МБ. Ці будзе чытанне файла гэтага памеру таксама даць Java памылку кучы прасторы?
дададзена аўтар bamittal, крыніца
@Gagravarr. Сапраўды, гэта была памылка памеру кучы. Ўстаноўка на JAVA_OPTS выправілі праблему. Дзякуй !!
дададзена аўтар bamittal, крыніца
@Gagravarr. Сапраўды, гэта была памылка памеру кучы. Ўстаноўка на JAVA_OPTS выправілі праблему. Дзякуй !!
дададзена аўтар bamittal, крыніца

7 адказы

Прасоўванне каментар да адказу ...

Ключавая частка вашага StackTrace, які тлумачыць, што парушыў і чаму, гэта:

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

Гэта кажа нам пра тое, што Java не мае дастаткова памяці для яго, каб захоўваць усе дадзеныя, якія апрацоўкі вашых файлаў рэгістрацыя патрабуе

Калі вам патрэбна дапамога павялічыць памер кучы JVM, я хацеў бы прапанаваць вам разгледзець гэты папярэдняе пытанне </а > або гэта адзін , які і казаць вам праз усё гэта.

2
дададзена

Прасоўванне каментар да адказу ...

Ключавая частка вашага StackTrace, які тлумачыць, што парушыў і чаму, гэта:

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

Гэта кажа нам пра тое, што Java не мае дастаткова памяці для яго, каб захоўваць усе дадзеныя, якія апрацоўкі вашых файлаў рэгістрацыя патрабуе

Калі вам патрэбна дапамога павялічыць памер кучы JVM, я хацеў бы прапанаваць вам разгледзець гэты папярэдняе пытанне </а > або гэта адзін , які і казаць вам праз усё гэта.

2
дададзена

Я ўставіў org.apache.xmlbeans у ў праекце. Гэта дапамагло.

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 , які змяшчае гэты метад і яна вырашаецца ў цяперашні час

1
дададзена
Гэта было як раз мая праблема, хоць мая памылка была некалькі іншай (не з памяці, але гэта было InvocationTargetException). Выдаленне старых XMLBeans працаваў для мяне.
дададзена аўтар Tim S., крыніца

Я таксама атрымліваю ж выключэнне пры чытанні файла .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 , які змяшчае гэты метад і яна вырашаецца ў цяперашні час

1
дададзена
Гэта было як раз мая праблема, хоць мая памылка была некалькі іншай (не з памяці, але гэта было InvocationTargetException). Выдаленне старых XMLBeans працаваў для мяне.
дададзена аўтар Tim S., крыніца

Як і іншыя адказы: дадаць гэтую залежнасць:


    org.apache.xmlbeans
    xmlbeans
    2.6.0

Ён будзе працаваць пасля гэтага.

На самай справе паі-OOXML патрэбы паі і паі-OOXML-схем але паі-OOXML-схемы неабходна XMLBeans

You can see these prerequisites at this page https://poi.apache.org/overview.html

0
дададзена

Як і іншыя адказы: дадаць гэтую залежнасць:


    org.apache.xmlbeans
    xmlbeans
    2.6.0

Ён будзе працаваць пасля гэтага.

На самай справе паі-OOXML патрэбы паі і паі-OOXML-схем але паі-OOXML-схемы неабходна XMLBeans

You can see these prerequisites at this page https://poi.apache.org/overview.html

0
дададзена