it-swarm.dev

Come evitare Java.lang.NoSuchMethodError: org.Apache.poi.util.IOUtils.copy (Ljava/io/InputStream; Ljava/io/OutputStream;) in POI di Apache

Ho un codice per aggiungere la filigrana al file .doc esistente.

Quello che segue è il codice che ho provato finora

public static void main(String[] args)
{

    try
    {
        XWPFDocument xDoc = new XWPFDocument(new FileInputStream("test.doc"));
        XWPFHeaderFooterPolicy xFooter = new XWPFHeaderFooterPolicy(xDoc);
        xFooter.createWatermark("My Watermark");
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

Quello che segue è quello che ho ottenuto

Exception in thread "main" Java.lang.NoSuchMethodError: org.Apache.poi.util.IOUtils.copy(Ljava/io/InputStream;Ljava/io/OutputStream;)V
at org.Apache.poi.util.PackageHelper.open(PackageHelper.Java:50)
at org.Apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.Java:71)
at com.avi.Test.ReadDoc.main(Watermark.Java:38)
14
Avinash

Ho ricevuto questo errore oggi: "Java.lang.NoSuchMethodError: org.Apache.poi.util.POILogger.log (I [Ljava/lang/Object;) V]"

Sembra diverso dal tuo errore, ma abbastanza simile. Per tua informazione, sto usando Maven per gestire i barattoli. Dopo qualche esperimento, ho scoperto che il root case è la versione poi.jar e poi-ooxml.jar non sono coerenti.

Questa configurazione riceverà un errore:

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.12</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.13</version>
    </dependency>

Ho cambiato la versione di poi.jar da 3.12 a 3.13

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.13</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.13</version>
    </dependency>

tombola, problema risolto. Spero che questo possa aiutare qualcuno che si è imbattuto in questo tipo di Eccezione.

24
sofia

Vedi la voce Apache POI FAQ su questo argomento . Quello che è quasi sicuramente successo è che hai aggiunto una nuova copia di POI al tuo classpath, ma una versione precedente era già lì (da una precedente necessità, il tuo framework ecc.) E Java ora si sta confondendo su quale usare.

In primo luogo, ti consigliamo di utilizzare uno snippet di codice come questo per capire da dove proviene il POI:

ClassLoader classloader =
   org.Apache.poi.poifs.filesystem.POIFSFileSystem.class.getClassLoader();
URL res = classloader.getResource(
         "org/Apache/poi/poifs/filesystem/POIFSFileSystem.class");
String path = res.getPath();
System.out.println("Core POI came from " + path);

Usalo per identificare i vasi più vecchi e rimuoverli.

Quindi, utilizza la pagina dei componenti POI per capire quali jar devi utilizzare e quali sono le loro dipendenze. Infine, aggiungi gli ultimi vasi al tuo classpath e sarai pronto per partire!

6
Gagravarr

Quasi sicuramente hai una versione precedente di PDI sul classpath.

Vedi Il POI Apache FAQ

1
M. Abbas

Vai qui: http://poi.Apache.org/download.html

scarica il file tar.gz -> estrailo e aggiungi alla classe classPath tutti i jar da esso.

1
Xelian

Sin dall'inizio, poi-ooxml e poi versione devono essere identici. 

<dependency>
    <groupId>org.Apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.16</version> <---------------this.
</dependency>
<dependency>
    <groupId>org.Apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.16</version> <---------------this.
</dependency>
0
Tiina

Ho avuto gli stessi problemi come te, la soluzione è che devi importare tutti i file jar per eseguire il tuo programma. Questi sono obbligatori per la gestione del tuo progetto

  • Poi-3.10-Final.jar
  • Poi-OOXML-3.10-Final.jar
  • Poi-OOXML-schemas-3.10.jar
  • XMLBeans-2.30.jar
0
venkyreddy

allinea le versioni pom di 'poi' e 'poi-ooxml' farà il lavoro

<dependencies>
    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>
</dependencies>
0
Ziv.Ti