【问题标题】:java.lang.NoClassDefFoundError: com/itextpdf/text/DocumentExceptionjava.lang.NoClassDefFoundError: com/itextpdf/text/DocumentException
【发布时间】:2013-01-03 12:05:59
【问题描述】:

我正在尝试通过以下 servlet 生成动态 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) 

【问题讨论】:

  • 你在哪里设置类路径? weblogic 启动脚本?

标签: java itext weblogic8.x


【解决方案1】:

上一个答案告诉你缺少一个 jar,这是一个不错的猜测,因为错误消息清楚地表明找不到 iText 类之一。

不幸的是,该错误消息具有误导性。 Java 还表示,如果有任何歧义,它就无法找到一个类。如果您的 CLASSPATH 中有多个 iText jar,就会出现这种情况。

通过向 CLASSPATH 添加另一个 iText jar 使问题变得更糟。现在您遇到了一个问题,这是由于您的 weblogic 实例中有两个不同版本的 iText 可用于 JVM。

搜索所有的 CLASSPATH,不要忘记服务器 CLASSPATH,你会发现 D:\itextpdf-5.3.4.jar 并不是 weblogic 寻找 PdfWriter 类的唯一地方。从 CLASSPATH 中删除所有 iText jar,直到只剩下一个。

【讨论】:

  • 好的..我会试试这个。谢谢。
  • 谢谢——这绝对是它。特别是如果您使用 Maven,并且像我一样,将 iText 作为显式依赖项。很好的建议。
【解决方案2】:

您需要放入 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

【讨论】:

  • 我仍然收到一个错误:java.lang.ExceptionInInitializerError at com.itextpdf.text.pdf.PdfWriter.(PdfWriter.java:1403) at CreatePDFExample.processRequest(CreatePDFExample.java:26)
  • 上面显示的代码就是代码。代码中PdfWriter是一个类,getInstance()是同一个静态方法。
【解决方案3】:

将你的库添加到你的战争中,在 WEB-INF/lib 文件夹中。

【讨论】:

    【解决方案4】:

    就我而言,iText v.2.1.7 有效,我尝试了 5.5.3 和 5.5.4,但没有成功。

    摘自 Primefaces V.5.0 用户指南,第 12 页“依赖项”

    “列出的版本(itext 2.1.7、apache poi 3.7)已经过测试并且已知可与 PrimeFaces 一起使用,这些依赖项的其他版本也可能有效但未经测试。”

    【讨论】:

      【解决方案5】:

      在我的情况下,你在我的 pom.xml

      中使用它
      <dependency>
          <groupId>com.lowagie</groupId>
          <artifactId>itext</artifactId>
          <version>2.1.7</version>
      </dependency>
      

      【讨论】:

        【解决方案6】:

        我遇到了类似的问题。在一个系统上,它的 pdf 生成工作正常,而在另一个系统上,我遇到了这个异常。经过一番调查后,我发现工作服务器的 itext-2.1.7.js6.jar 大小为 1105KB,而不工作的服务器有 12Kb。我用小尺寸的罐子代替了罐子,它开始工作正常。不知道我最终是如何得到具有两种不同尺寸的相同版本的 jar 的。希望这会有所帮助

        【讨论】:

          【解决方案7】:

          我有简单的行动来解决你的错误 你必须从现有的 jar 文件中创建一个新的“插件” 你在你的运行配置器中集成了这个 最后使用这个插件,比如 librairie 我检查了这个解决方案,它可以正常工作

          【讨论】:

          • 这个答案充其量是模棱两可的。为看似简单的“从现有的 .jar 文件制作插件”提供一些细节。听起来您可能指的是某种形式的 IDE 功能 - 如果是这样,什么 IDE?
          猜你喜欢
          • 1970-01-01
          • 2019-12-01
          • 2016-11-17
          • 2018-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-01
          • 2013-12-16
          相关资源
          最近更新 更多