2013-01-03 33 views
7

我試圖通過以下servlet生成一個動態PDF文件。java.lang.NoClassDefFoundError:com/itextpdf/text/DocumentException

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;.; 

請告訴我爲什麼我收到此錯誤????我花了很多的時間this.Not越來越小problem.Please幫我在這。

謝謝

做的事情。我建議得到了以下錯誤

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) 
+0

你在哪裏設置classpath中工作?WebLogic啓動腳本? – samlewis

回答

8

上一個答案告訴你,一個罐子丟失了,這不是一個錯誤的猜測,因爲錯誤信息清楚地表明其中一個iText類找不到。

不幸的是,該錯誤消息是誤導性的。 Java還表示,如果存在任何歧義,它無法找到類。如果您的CLASSPATH中有多個iText jar,就是這種情況。

通過在CLASSPATH中添加另一個iText jar使問題變得更加嚴重。現在,您的問題是由於您的weblogic實例中有兩個不同版本的iText可供JVM使用。

搜索所有CLASSPATH,不要忘記服務器CLASSPATH,並且您會發現D:\ itextpdf-5.3.4.jar不是weblogic尋找PdfWriter類的唯一地方。從你的CLASSPATH中刪除所有的iText罐子,直到你只剩下一個。

+0

好的..我會試試這個。謝謝。 –

+0

謝謝 - 這絕對是它。特別是如果您使用Maven,並像我一樣,將iText作爲顯式依賴項。優秀的建議。 –

5

添加您的庫來你的戰爭,內部WEB-INF/lib文件夾後。

7

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

+0

還是我得到一個錯誤:java.lang.ExceptionInInitializerError at com.itextpdf.text.pdf.PdfWriter。(PdfWriter.java:1403) at CreatePDFExample.p rocedrequest(CreatePDFExample.java:26) –

+0

你可能沒有初始化代碼中的'PdfWriter'類 – Abubakkar

+0

上面顯示的代碼是代碼。在代碼中'PdfWriter'是一個類,'getInstance()'是靜態方法一樣。 –

2

在我的情況下,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一起工作,其他版本的這些依賴關係也可能正常工作但未經過測試。「

-1

我有簡單的操作來解決您的錯誤 您必須從現有的jar文件創建一個新的」插件「 你綜合這個運行中的配置 和最終使用這個插件像LIBRAIRIE 我檢查這個解決方案,它不probleme

+0

jar = Itext 2.1.7如果已經使用它,它就會工作 – snipe960

+0

這個答案在最好的情況下是不明確的。提供一些看似簡單的聲音「從現有的.jar文件製作插件」的一些細節。這聽起來像你指的是某種形式的IDE功能 - 如果是這樣的話,什麼IDE? –