2013-01-03 14 views
7

मैं निम्नलिखित सर्वलेट के माध्यम से एक गतिशील पीडीएफ फ़ाइल उत्पन्न करने की कोशिश कर रहा हूं।java.lang.NoClassDefFoundError: com/itextpdf/text/DocumentException

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 उपयोग कर रहा हूँ:

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

लेकिन मैं निम्न त्रुटि प्राप्त। तो मैंने जार फ़ाइलों के लिए क्लासस्पैट सेट किया है।

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 कक्षाओं में से कोई नहीं मिला।

दुर्भाग्यवश, वह त्रुटि संदेश भ्रामक है। जावा यह भी कहता है कि अगर कोई अस्पष्टता है तो उसे कक्षा नहीं मिल सकती है। यदि आपके क्लासस्पैट में एक से अधिक iText जार हैं तो यह मामला है।

आपने अपने क्लासस्पैट में एक और iText जार जोड़कर समस्या को और भी खराब कर दिया है। अब आपको एक समस्या है जो आपके वेबलॉगिक उदाहरण में JVM के लिए iText के दो अलग-अलग संस्करणों के कारण उपलब्ध है।

सभी क्लासस्पैट खोजें, सर्वर क्लासस्पैट को न भूलें, और आप पाएंगे कि डी: \ itextpdf-5.3.4.jar एकमात्र ऐसा स्थान नहीं है जहां वेबलॉगिक पीडीएफवाइटर क्लास की तलाश में है। अपने क्लासस्पैट से सभी iText जार हटाएं जब तक कि आपके पास केवल एक ही शेष न हो।

+0

ठीक है .. मैं कोशिश करूँगा.धन्यवाद। –

+0

धन्यवाद - यह निश्चित रूप से यह था। विशेष रूप से यदि आप मेवेन का उपयोग कर रहे हैं, और जैसा मैंने किया था, तो iText को एक स्पष्ट निर्भरता के रूप में था। उत्कृष्ट सलाह। –

5

वेब-INF/lib फ़ोल्डर के अंदर, अपने युद्ध करने के लिए अपने पुस्तकालयों जोड़े सुझाव दिया करने के बाद।

7

आपको अपने वेब एप्लिकेशन के क्लासपाथ में रखना होगा, न कि आपके सिस्टम क्लासपाथ।

और सबसे आसान तरीका है ताकि अपने सर्वर रन टाइम पर प्राप्त कर सकते हैं classpath पर जार फ़ाइलों डाल करने के लिए है:

YOUR_WEBAPP_ROOT --> WEB-INF --> lib फ़ोल्डर के अंदर itextpdf-5.3.4.jar डाल

तो अब आपकी जार फ़ाइल

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

+0

अभी भी मैं एक त्रुटि हो रही है : java.lang.ExceptionInInitializerError com.itextpdf.text.pdf.PdfWriter पर। (PdfWriter.java:1403) CreatePDFExample.p पर rocessRequest (CreatePDFExample.java:26) –

+0

हो सकता है कि आपने अपने कोड – Abubakkar

+0

में कोड 'पीडीएफवाइटर' क्लास प्रारंभ नहीं किया हो, तो ऊपर दिखाया गया कोड कोड है। कोड में 'पीडीएफवाइटर' एक वर्ग है और 'getInstance() 'एक स्थिर विधि है वही। –

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) का परीक्षण किया जाता है और प्राइमफेस के साथ काम करने के लिए जाना जाता है, इन निर्भरताओं के अन्य संस्करण भी काम कर सकते हैं लेकिन परीक्षण नहीं किए जा सकते हैं। "

-1

मेरे पास आपकी गलती को हल करने के लिए सरल कार्रवाई है आपको मौजूदा जार फ़ाइल से एक नया" प्लगइन बनाना है " आप Librairie की तरह इस प्लगइन अपने रन विन्यासक और अंतिम उपयोग में यह एक एकीकृत मैं इस समाधान की जाँच करें और यह probleme

+0

jar = Itext 2.1.7 यह काम करता है अगर पहले से ही इसके साथ काम करता है – snipe960

+0

यह उत्तर सबसे अच्छा है। भ्रामक सरल ध्वनि के लिए कुछ विवरण प्रदान करें "मौजूदा .jar फ़ाइल से प्लगइन बनाएं"। ऐसा लगता है कि आप आईडीई कार्यक्षमता के कुछ रूपों का जिक्र कर रहे हैं - यदि हां, तो क्या आईडीई? –

संबंधित मुद्दे