web-dev-qa-db-fra.com

java.lang.NoClassDefFoundError: com/itextpdf/text/DocumentException

J'essaie de générer un fichier dynamique PDF via le servlet suivant. 

import Java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// Document Object
import com.itextpdf.text.Document;
//For adding content into PDF document
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.DocumentException;

public class CreatePDFExample extends HttpServlet {

    //invoked from doGet method to create PDF through servlet 
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //Set content type to application / pdf
    //browser will open the document only if this is set
    response.setContentType("application/pdf");
    //Get the output stream for writing PDF object        
    OutputStream out=response.getOutputStream();
    try {
        Document document = new Document();
        /* Basic PDF Creation inside servlet */
        PdfWriter.getInstance(document, out);
        document.open();
        document.add(new Paragraph("Tutorial to Generate PDF using Servlet"));
        document.add(new Paragraph("PDF Created Using Servlet, iText Example Works"));
        document.close();
    }
            catch (DocumentException exc){
            throw new IOException(exc.getMessage());
            }
    finally {            
        out.close();
    }
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

@Override
public String getServletInfo() {
    return "This Servlet Generates PDF Using iText Library";
}
}

mais je reçois l'erreur suivante:

Error 500--Internal Server Error

Java.lang.NoClassDefFoundError: com/itextpdf/text/DocumentException
at CreatePDFExample.processRequest(CreatePDFExample.Java:24)
at CreatePDFExample.doPost(CreatePDFExample.Java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.Java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.Java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.Java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.Java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.Java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.Java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.Java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.Java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.Java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.Java:170)

J'utilise serveur d'application weblogic 8.1 .... J'utilise iTextPDF . donc j'ai défini le CLASSPATH pour les fichiers jar.

CLASSPATH:
D:\itextpdf-5.3.4.jar;D:\servlet-2-3.jar;.;

PATH:
C:\Program Files (x86)\Java\jdk1.6.0_14\bin;.;

S'il vous plaît dites-moi pourquoi je reçois cette erreur ???? J'ai passé beaucoup de temps pour cela.

Je vous remercie

Après avoir fait les choses suggérées.J'obtiens l'erreur suivante

 Error 500--Internal Server Error

 Java.lang.ExceptionInInitializerError
at com.itextpdf.text.pdf.PdfWriter.(PdfWriter.Java:1403)
at CreatePDFExample.processRequest(CreatePDFExample.Java:26)
at CreatePDFExample.doPost(CreatePDFExample.Java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.Java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.Java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.Java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.Java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.Java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.Java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.Java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.Java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.Java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.Java:170)
 Caused by: Java.lang.NullPointerException
at Java.lang.Class.privateGetDeclaredFields(Class.Java:1488)
at Java.lang.Class.getDeclaredFields(Class.Java:1073) 
10
Sagar patro

La réponse précédente vous indiquait qu'il manquait un bocal, ce qui n'était pas une mauvaise idée, car le message d'erreur indiquait clairement que l'une des classes d'iText était introuvable.

Malheureusement, ce message d'erreur est trompeur. Java indique également qu'il est impossible de trouver une classe s'il y a une ambiguïté. C'est le cas si vous avez plus d'un fichier iText dans votre CLASSPATH.

Vous avez aggravé le problème en ajoutant un nouveau fichier iText à votre CLASSPATH. Vous avez maintenant un problème lié à la présence de deux versions différentes d'iText pour la machine virtuelle Java dans votre instance weblogic.

Recherchez dans tous les CLASSPATHs, n'oubliez pas le serveur CLASSPATH et vous découvrirez que D:\itextpdf-5.3.4.jar n'est pas le seul endroit où weblogic cherche la classe PdfWriter. Retirez tous les pots iText de votre CLASSPATH jusqu'à ce qu'il ne vous en reste plus qu'un.

14
Bruno Lowagie

Vous devez indiquer le chemin de classe de votre application Web et non votre chemin de classe systèmes.

Et le moyen le plus simple de placer les fichiers jar sur le chemin de classe afin que votre serveur puisse l'obtenir au moment de l'exécution est:

METTRE LE itextpdf-5.3.4.jar à l'intérieur du  

YOUR_WEBAPP_ROOT --> WEB-INF --> lib folder

alors maintenant votre fichier jar doit apparaître ici 

YOUR_WEBAPP_ROOT --> WEB-INF --> lib --> itextpdf-5.3.4.jar

7
Abubakkar

Ajoutez vos bibliothèques à votre guerre, dans le dossier WEB-INF/lib.

5
Andrea Ligios

Dans mon cas, iText v.2.1.7 a fonctionné, j'ai essayé 5.5.3 et 5.5.4 sans succès.

Extrait du manuel d’utilisation de Primefaces V.5.0, p.12 "Dépendances"

"Les versions répertoriées (itext 2.1.7, Apache poi 3.7) sont testées et reconnues comme fonctionnant avec PrimeFaces. Les autres versions de ces dépendances peuvent également fonctionner mais ne sont pas testées."

2
max3d

J'avais un problème similaire. Sur un système, la génération pdf fonctionnait correctement et sur un autre système, je recevais cette exception. Après avoir fait quelques recherches, j’ai trouvé que le serveur de travail avait le fichier itext-2.1.7.js6.jar de taille 1105 Ko et celui qui ne fonctionnait pas avait 12 Ko. J'ai remplacé le pot par un autre de petite taille et il a commencé à bien fonctionner. Je ne sais pas comment je me suis retrouvé avec la même version jar avec deux tailles différentes. J'espère que cela t'aides

0
Hari Prasad