2017-08-01 17 views
2

OSGIベースのアプリケーションでXLSファイルを正しく読み取ることができますが、XLSXファイルを読み取ろうとすると次のエラーが発生します。Apache POI 3.14を使用してXLSXファイルを読み取ることができません

Caused by: java.lang.ExceptionInInitializerError 
    at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:162) 
    at org.apache.poi.openxml4j.opc.OPCPackage.<init>(OPCPackage.java:142) 
    at org.apache.poi.openxml4j.opc.Package.<init>(Package.java:37) 
    at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:128) 
    at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:257) 
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:291)[242:export_poi.jar:0.0.0] 
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:252)[242:export_poi.jar:0.0.0] 
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:231)[242:export_poi.jar:0.0.0] 
    at mycom.project2.ExcelAdapter.Sources.Source.readExcelFile(Source.java:67)[232:ExcelAdapter:1.0.0] 
    at mycom.project2.ExcelAdapter.Sources.Source.<init>(Source.java:56)[232:ExcelAdapter:1.0.0] 
    at mycom.project2.ExcelAdapter.Sources.SourcesManager.addSource(SourcesManager.java:55)[232:ExcelAdapter:1.0.0] 
    at mycom.project2.ExcelAdapter.Sources.SourcesManager.addSources(SourcesManager.java:48)[232:ExcelAdapter:1.0.0] 
    at mycom.project2.ExcelAdapter.Processors.Engine.setResourceConfig(Engine.java:44)[232:ExcelAdapter:1.0.0] 
    at mycom.project2.ExcelAdapter.ExcelAdapter.configureBusinessLogic(ExcelAdapter.java:164)[232:ExcelAdapter:1.0.0] 
    at mycom.project1.function_engine_tooling.fb.libraries.FunctionBlockType.addFunctionBlockInstance(FunctionBlockType.java:161)[234:fb-libraries:1.0.0] 
    at mycom.project1.function_engine_tooling.fb.libraries.FunctionBlockType.handleCreateFbInstances(FunctionBlockType.java:373)[234:fb-libraries:1.0.0] 
    at mycom.project1.function_engine_tooling.fb.libraries.FunctionBlockType.onMessageReceived(FunctionBlockType.java:197)[234:fb-libraries:1.0.0] 
    at mycom.project2.ExcelAdapter.ExcelAdapterInstanceFactory.onMessageReceived(ExcelAdapterInstanceFactory.java:46)[232:ExcelAdapter:1.0.0] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_131] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_131] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_131] 
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_131] 
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408) 
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279) 
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252) 
    ... 19 more 
Caused by: java.lang.ClassCastException: org.apache.xerces.stax.XMLEventFactoryImpl cannot be cast to javax.xml.stream.XMLEventFactory 

私は、ファイルを読み取るために、このコマンドを使用しています:STAX-APIとSTAX:

WorkbookFactory.create(new File("fileName")); 

私は特定のartifactIDs例えばを除外することを教えている、オンラインの様々なソリューションを試してみました。しかし、解決策のどれも働いていないようです。

+0

fileName.fileExtension "'を使用していますか? – Sedrick

+0

はい、私のファイルは "excelfile.xls"または "excelfile.xlsx"となります。 – CoderX

+0

コードを投稿してください。 – Sedrick

答えて

0

ノー問題で、このコードでXLSXファイルを開く:

InputStream inp = new FileInputStream(inputfilename); 
    Workbook wb = WorkbookFactory.create(inp); 
    // Open the specified sheet 
    Sheet inputsheet = wb.getSheetAt(sheetindex); 

のInputStreamが必要な場合、私は知りませんが、それは間違いなく仕事をしていません。

+0

これも使用しましたが、同じエラーが表示されます。 : – CoderX

+1

変数を誤ってキャストしているようです: 'ClassCastException:org.apache.xerces.stax.XMLEventFactoryImplはjavax.xml.stream.XMLEventFactory'にキャストできませんどのラインがこのエラーを投げていますか? ? –

+0

はい、私はエラーの詳細な説明で質問を更新しました – CoderX

2

問題は、パッケージjavax.xml.streamをエクスポートするバンドルが2つあるようです。 org.apache.xerces.stax.XMLEventFactoryImplは、これらのパッケージのいずれかにバンドルされ、バンドルが別のバンドルに配線されているようです。彼らは同じ名前が付けられていても同じクラスは見えません。

これを避けるには、1つのバンドルだけがこのパッケージをエクスポートするようにしてください。これを実現する方法の1つは、export the package from the system bundleで、これはjreに存在する必要があります。

少なくともApacheのカラフのインストールは簡単です。

install -s mvn:commons-codec/commons-codec/1.10 
install -s mvn:org.apache.commons/commons-collections4/4.1 
install -s mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.poi/3.16_1 
+0

詳しい検査では、CLASSの 'javax.xml.stream.XMLEventFactory'が他のBUNDLE ** poiDependencies.jar **によって提供されていることがわかりました(実際に使用する必要があります。 JAR)とOSGI lib(** xerces-2.11.0.jar **を介して)によって実行されます。あなたのasnwerによると、エラーは、** poiDependencies.jar **からCLASSを使用するのではなく、ServiceMixが** xerces-2.11.0.jar **からそれを使用していることです。私はCLASSを** xerces-2.11.0.jar **から削除しようとしましたが、ServiceMixは内部的に(エラーが発生したため)必要です。どのように私はそのような問題にアプローチできますか? – CoderX

+0

私の答えからバンドルを試しましたか? –

+0

** commons-codec **は既にインストールされていますが、他の2つのバンドルをインストールしましたが、同じエラーが発生します。 – CoderX

関連する問題