2009-05-13 12 views
6

मैं ग्रहण में एक वेब एप्लिकेशंस लिख रहा हूं, और मैं अपने JSON उत्पन्न करने के लिए XStream Serialization लाइब्रेरी का उपयोग कर रहा हूं।टोमकैट java.lang के तहत। NoClassDefFound त्रुटि जब एक servlet तक पहुँचने?

मैंने उस कोड को समाहित किया है जो जेएसओएन को एक कक्षा में बनाता है जिसे मेरी सर्वलेट द्वारा बुलाया जाता है। फिर encapsulated कक्षा परीक्षण के लिए एक मुख्य विधि है और जब मैं इसे चलाता हूं सबकुछ ठीक काम करता प्रतीत होता है।

हालांकि जब मैं अपने सर्वलेट से कक्षा को कॉल करता हूं तो मुझे java.lang.NoClassDefFoundError त्रुटि मिलती है, यह कहते हुए कि मैंने एक्सस्ट्रीम पुस्तकालयों को लोड नहीं किया है। मुझे लगता है कि मुझे अपना निर्माण पथ गलत है, लेकिन मैंने एक्सस्ट्रीम पुस्तकालयों को परियोजना के निर्माण पथ में स्थापित करने के लिए सेट किया है, जहां तक ​​मुझे पता है कि इसे काम करना चाहिए।

यहां गलत होने की संभावना क्या है?

के बाद सटीक अपवाद है: यहाँ

java.lang.ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
    at SecurePaymentAjaxData.doPost(SecurePaymentAjaxData.java:44) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
    at java.lang.Thread.run(Thread.java:619) 

और प्रासंगिक कोड Xstream वर्ग का उपयोग करता है:

XStream xstream = new XStream(new JettisonMappedXmlDriver()); 
xstream.setMode(XStream.NO_REFERENCES); 
xstream.alias("CallDataUpdate", CallDataUpdate.class); 
xstream.alias("CardStatus", CardStatus.class); 
String jsonData = xstream.toXML(updateData); 

मुझे लगता है कि इस कोड को ठीक काम करता है जब एक जावा आवेदन के रूप में चलाने पर जोर, मुझे यकीन है कि पुस्तकालयों को लोड करने के साथ कुछ करना है, मुझे नहीं पता कि मैं कहां गलत हो गया हूं।

+0

क्या आपके WAR के WEB-INF/lib फ़ोल्डर में पैकेज है? –

उत्तर

10

मैं इस मुद्दे पाया।

अरे प्रेस्टो यह काम करता है।

+8

अच्छी नौकरी। दृश्यों के पीछे क्या होता है कि यह निर्भरता संकलक को इन पुस्तकालयों को आपके परिनियोजन (शायद एक WAR फ़ाइल) की वेब-आईएनएफ/lib निर्देशिका में रखने के लिए कहती है।

जब एप्लिकेशन ऐप सर्वर पर लोड होता है - यह पथ वेब एप्लिकेशन के क्लासपाथ पर डिफ़ॉल्ट रूप से शामिल होता है और आपका ऐप अब इन कक्षा पुस्तकालयों को "देख" सकता है। – Vinnie

+5

ध्यान दें कि इस सुविधा को अब "परिनियोजन असेंबली" कहा जाता है http://stackoverflow.com/questions/3365369/java-ee- मॉड्यूल- निर्भरता-in-web-project – GuiSim

11

भूल वहाँ कैसे आप निर्माण और आप कैसे तैनात के बीच एक अंतर है कि मत करो। यही है, आप एक्सस्ट्रीम के खिलाफ निर्माण कर सकते हैं, लेकिन आपको इसे तैनाती के लिए .war फ़ाइल में भी पैकेज करना चाहिए।

अपनी परिणामी .war फ़ाइल (jar tvf {filename} सामग्री को देखने के लिए) को विस्फोट करें और जांचें कि यह वहां है (0 .के तहत एक .jar फ़ाइल)। मुझे संदेह है कि यह नहीं है। आप सही परियोजना पर क्लिक करें और गुण का चयन करते हैं आप मॉड्यूल का उपयोग कर रहे शामिल करने के लिए "जावा ईई मॉड्यूल निर्भरता" सेट कर सकते हैं

:

0

WEB_INF के तहत निर्देशिका को गलत नाम देने के लिए एक आसान गलती है, मैंने इसे lib के बजाय libs नाम दिया है, ठीक संकलित करता है लेकिन टॉमकैट त्रुटियों को फेंकता है।

7

जावा ईई मॉड्यूल निर्भरता जाने का रास्ता प्रतीत होता है। हालांकि, ग्रहण हेलीओस में मेनू नाम बदल गए: वह विशेष मेनू अब "परिनियोजन असेंबली" के अंतर्गत है।

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