java - 无法使用 Apache POI 3.14 读取 XLSX 文件

标签 java apache-poi osgi

我能够在基于 OSGI 的应用程序中正确读取 XLS 文件,但是当我尝试读取 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

我正在使用这个命令来读取文件:

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

我在网上尝试了各种解决方案,它们告诉我要排除某些 artifactID,例如:stax-api 和 stax。但似乎没有一种解决方案有效。

最佳答案

问题似乎是有两个包导出包 javax.xml.stream。似乎 org.apache.xerces.stax.XMLEventFactoryImpl 连接到这些包之一,而您的包连接到另一个包。因此,即使它们被命名为相同的类,它们也看不到相同的类。

为避免这种情况,请确保只有一个包导出该包。实现这一目标的一种方法是 export the package from the system bundle因为它应该存在于 jre 中。

至少对于 apache karaf,安装很简单。使用这些包:

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

关于java - 无法使用 Apache POI 3.14 读取 XLSX 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45445033/

相关文章:

java.lang.OutOfMemoryError : Java heap space in hibernate while picking 200 thousand rows 错误

org.apache.poi.xssf.usermodel.XSSFCell 中 java 中的 Java Excel 数据上传错误

OSGi 如何运行一项服务的多个实例

java - 声明式 OSGi 服务

java - 我有一台双核机器。在java中,我的计算机如何管理3个线程的fixedThreadPool? jvm 的可能行为是什么?

java - AspectJ- child 类迷路了

java - 我想使用 poi 创建 word 或 excel 文件的副本

java - 导出特定 java 版本的可部署功能

java - 使用捕获的数据包从服务器向应用程序发送 http 响应

java - 使用 POI FontFormatting setFontColor 时出现异常