web-dev-qa-db-ja.com

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

次のサーブレットを使用して、動的なPDFファイルを生成しようとしています。

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";
}
}

しかし、次のエラーが表示されます。

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)

weblogic application server 8.1 ....を使用しています。iTextPDFを使用しています。そのため、jarファイルのCLASSPATHを設定しました。

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

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

このエラーが発生する理由を教えてください????.

ありがとうございました

推奨事項を実行した後、次のエラーが表示されます

 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) 
11
Sagar patro

前回の回答では、jarが欠落していることを伝えましたが、これは、iTextクラスの1つが見つからなかったことをエラーメッセージが明確に示しているため、悪い推測ではありませんでした。

残念ながら、そのエラーメッセージは誤解を招くものです。 Javaは、あいまいさがあればクラスを見つけることができないと言っています。これは、CLASSPATHに複数のiText jarがある場合です。

さらに別のiText jarをCLASSPATHに追加して、問題を悪化させました。これで、weblogicインスタンスのJVMで使用可能なiTextの2つの異なるバージョンが原因で問題が発生しました。

すべてのCLASSPATHを検索し、サーバーのCLASSPATHを忘れないでください。weblogicがPdfWriterクラスを検索する場所はD:\ itextpdf-5.3.4.jarだけではないことがわかります。残りが1つになるまで、CLASSPATHからすべてのiText jarを削除します。

15
Bruno Lowagie

システムのクラスパスではなく、Webアプリケーションのクラスパスに配置する必要があります。

サーバーが実行時に取得できるように、jarファイルをクラスパスに配置する最も簡単な方法は次のとおりです。

- 置く itextpdf-5.3.4.jar

YOUR_WEBAPP_ROOT --> WEB-INF --> libフォルダ

jarファイルがここに表示されるはずです

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

7
Abubakkar

ライブラリをWEB-INF/libフォルダー内の戦争に追加します。

5
Andrea Ligios

私の場合、iText v.2.1.7は機能しましたが、運が悪くても5.5.3と5.5.4を試しました。

Primefaces V.5.0ユーザーガイド、p.12「依存関係」からの抜粋

「リストされたバージョン(itext 2.1.7、Apache poi 3.7)はテストされ、PrimeFacesで動作することがわかっています。これらの依存関係の他のバージョンも動作する可能性がありますが、テストされていません。」

2
max3d

私は同様の問題を抱えていました。あるシステムではpdf生成が正常に機能し、別のシステムではこの例外が発生していました。少し調べてみると、動作中のサーバーにはサイズ1105KBのitext-2.1.7.js6.jarがあり、動作していないサーバーには12Kbがあることがわかりました。 jarを小さなサイズのjarに交換すると、正常に機能し始めました。 2つの異なるサイズの同じバージョンのjarになった方法がわかりません。お役に立てれば

0
Hari Prasad