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

我试图通过以下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) 

之前的回答告诉你,一个jar子丢失了,这不是一个糟糕的猜测因为错误信息清楚地说明找不到其中一个iText类。

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

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

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

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

在WEB-INF / lib文件夹中将您的库添加到war中。

在我的情况下,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合作,这些依赖项的其他版本也可以使用,但未经过测试。”

我遇到了类似的问题。 在一个系统上,pdf生成工作正常,另一个系统我得到了这个例外。 在做了一些调查后,我发现工作服务器的大小为1105KB的itext-2.1.7.js6.jar,而不工作的那个有12Kb。 我用一个小尺寸的jar子取代jar子,它开始工作正常。 不知道我是如何得到两个不同尺寸的相同版本的jar。 希望这可以帮助

我有一个简单的操作来解决你的错误,你必须从你现有的jar文件中创建一个新的“插件”你将这个插件集成到你的运行配置器中并最终使用这个插件就像librairie我检查这个解决方案并且它没有问题