Apache POI,Excel 2007+ XML和OSGI
对于一个项目,我试图使用Apache POI与OSGI一起使用Excel XMLfunction。
我已经尝试过POI ServiceMix包,但是这是缺lessooxml-schemas jar。 将jar添加到包中并将其包含在清单中似乎不起作用。
然后我试图为POI 3.10创build包装器捆绑包,但也无济于事。 同样的错误。
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl not found by org.apache.poi [8] at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532) at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75) at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) ... 105 more
随后的电话会导致以下情况:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument at org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument$Factory.parse(Unknown Source) at org.apache.poi.xssf.model.ThemesTable.<init>(ThemesTable.java:44) ... 93 more
XMLBeans可以作为一个包导出所有包,我已经尝试过ServiceMix包以及从POI 3.10附带的jar中取出一个包。
有人可以指导我创build一个可以处理Excel 2007+ XML文档的工作OSGI包的过程吗? 非常感谢。
问题是来自org.apache.poi.ooxml-schemas
的类调用Class.forName("org.apache.xmlbeans.impl.schema")
,所以你需要在你的ooxml-schemas清单中导入这个包束。
我在构buildooxml-schemas捆绑包时通过将<DynamicImport-Package>*</DynamicImport-Package>
到maven-bundle-plugin
的configuration中来解决这个问题。
Caused by: java.lang.ClassNotFoundException: org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl not found by org.apache.poi [8]
这意味着bundle org.apache.poi
中的代码会查找包org.apache.poi
的类SchemaTypeSystemImpl
,并找不到它。 鉴于类和包看起来像实现类,我假设这是正确的,正确的,他们不能在他们的包之外访问。
你可以添加第一个exception的完整堆栈跟踪,以便Class.forName()
的调用网站将可见? 这很可能只是configuration问题的下游,但它有助于缩小configuration范围。
我们使用一个合并poi
, poi-ooxml
和poi-ooxml-schemas
来解决类加载问题。
为此,我们使用Gradle和bnd平台 。 它允许基于Maven依赖关系构build和调整OSGi包。 将JAR合并到一个bundle中也可以轻松完成。
我在GitHub上设置了一个包含Apache POI包 (以及隐含的,POM定义的依赖关系)的示例生成 。 这是为基于OSGi的应用程序构build完整目标平台的摘录或自己的configuration。
你可以克隆它( sample-poi分支),并尝试运行./gradlew clean bundles
。 创build的包将在build/plugins
。
- 在Java中使用Apoche POI读取excel(xlsx)文件(获取奇怪的数字)
- 在Apache Poi 3.7中以特定格式写入数值单元格的Double值
- 当使用POI读取.xlsx文件时,出现错误“Zip File is closed”
- 尝试使用Java Apache POI读取文本Excel单元格
- java.io.IOException:无法读取zip条目源
- 使用Apache POI向Excel文件写入来自String的ArrayList的大量数据
- 更改由apache poi生成的excel表单的图表形状
- 如何将新工作表添加到现有的xls文件中
- 如何使用java和apache poi删除excel中的空单元格