java.lang.NoSuchMethodError:org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl.getTrList()使用Apache POI库时的Ljava / util / List

时间:2014-11-10 23:16:37

标签: java apache-poi

我试图让工作成为一段代码来读取docx文件,但是由于一些奇怪的原因它失败了。

这条线失败了:

XWPFDocument document = new XWPFDocument(new FileInputStream(filepath));

堆栈追踪:

Exception in thread "main" java.lang.NoSuchMethodError: org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl.getTrList()Ljava/util/List;
    at org.apache.poi.xwpf.usermodel.XWPFTable.<init>(XWPFTable.java:106)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:151)
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:124)
    at helper.JavaHelper.readTableDataFull(JavaHelper.java:84)
    at helper.JavaHelper.main(JavaHelper.java:138)
    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:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

我有那些罐子:

  • DOM4J-1.6.1.jar
  • 的xmlbeans-2.3.0.jar
  • POI-3.9-20121203.jar
  • POI暂存器-3.9-20121203.jar
  • POI-OOXML-3.9-20121203.jar
  • OOXML-架构-1.0.jar

看起来它应该对我有用(我也尝试过更新的poi libs - 同样的错误)。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

快速查看Grepcode表示v1.1 ooxml-schemas支持缺少的方法。此外,v1.0似乎不包含此类方法(它只包含getTrArray()方法)。

因此,您可能希望使用ooxml-schemas-1.1.jar代替ooxml-schemas-1.0.jar

这是你应该至少使用的版本的maven依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>ooxml-schemas</artifactId>
    <version>1.1</version>
</dependency>

答案 1 :(得分:5)

Apache POI FAQ page

引用
  

问:我正在使用poi-ooxml-schemas jar,但我的代码失败了“java.lang.NoClassDefFoundError:org / openxmlformats / schemas / something

     

要使用新的OOXML文件格式,POI需要一个包含XMLBeans编译的文件格式XSD的jar。这些XSD一旦编译成Java类,就会存在于org.openxmlformats.schemas命名空间中。

     

有两个jar文件可用,如组件概述部分所述。所有模式的完整jar都是ooxml-schemas-1.1.jar,目前大约是15mb。较小的poi-ooxml-schemas jar只有4mb左右。后一个jar文件只包含通常使用的部分。

     

许多用户选择使用较小的poi-ooxml-schemas jar来节省空间。但是,poi-ooxml-schemas jar只包含通常使用的XSD和类,如单元测试所标识的那样。每隔一段时间,您可能会尝试使用未包含在最小poi-ooxml-schemas jar中的部分文件格式。在这种情况下,您应该切换到完整的ooxml-schemas-1.1.jar。从长远来看,您可能还希望提交一个新的单元测试,该测试使用XSD的额外部分,以便将来的poi-ooxml-schemas jar包含它们。

因此,正如常见问题解答所解释的那样,在短期内用较大的poi-ooxml-schemas jar替换小ooxml-schemas jar。从长远来看,向Apache POI提交一个junit测试,该测试使用你想要使用的模式jar的位,然后它们将从那时开始出现在下一个小poi-ooxml-schemas jar中