15

次のサーブレットを使用して動的 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 アプリケーション サーバー 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) 
4

7 に答える 7

19

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

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

CLASSPATHにさらに別のiTextjarを追加することで、問題をさらに悪化させました。これで、weblogicインスタンスのJVMで2つの異なるバージョンのiTextを使用できるために発生する問題が発生します。

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

于 2013-01-03T17:15:57.277 に答える
8

システムのクラスパスではなく、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

于 2013-01-03T12:13:52.620 に答える
5

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

于 2013-01-03T12:10:17.787 に答える
2

私の場合、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 で動作することがわかっています。これらの依存関係の他のバージョンも動作する可能性がありますが、テストされていません。」

于 2014-12-22T16:33:01.173 に答える
-1

間違いを解決する簡単なアクションがあります。新しい「既存のjarファイルからプラグイン」を作成する必要があります。これを実行コンフィギュレーターに統合し、最終的にこのプラグインをlibrairieのように使用します。このソリューションをチェックすると、問題なく動作します

于 2015-12-21T23:02:00.277 に答える