簡體   English   中英

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

[英]java.lang.NoSuchMethodError: org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl.getTrList()Ljava/util/List while using Apache POI library

我正在努力使工作成為一段代碼來讀取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 - 同樣的錯誤)。

有任何想法嗎 ?

快速瀏覽一下Grepcode,可以看出ooxml-schemas v1.1支持缺少的方法。 此外, 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>

引用Apache POI FAQ頁面

問:我正在使用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包含它們。

因此,正如常見問題解答所解釋的那樣,在短期內用較大的ooxml-schemas jar替換小poi-ooxml-schemas ooxml-schemas jar。 從長遠來看,向Apache POI提交一個junit測試,該測試使用你想要使用的架構jar的位,然后它們將出現在下一個小的poi-ooxml-schemas jar中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM