java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ervletContainer


86

मैं जर्सी + Google ऐप इंजन का उपयोग करके दो दिनों के लिए एक सरल हैलो वर्ल्ड एप्लिकेशन बनाने की कोशिश कर रहा हूं। सरल AppEngine परियोजना के लिए मैं इन ट्यूटोरियल का पालन किया और दोनों बस ठीक काम करता है https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform

लेकिन अब मैं जर्सी को जोड़ने और इस ट्यूटोरियल http://www.vogella.com/articles/REST/article.html का अनुसरण करने की कोशिश कर रहा हूं ।

लेकिन सर्वर मुझे देता रहता है

java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ervletContainer

जब मैं web.xml में इन पंक्तियों को जोड़ता हूं :

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

मैंने यहाँJAX-RS 2.1 RI bundle से जर्सी को डाउनलोड किया है और WEB-INF/libट्यूटोरियल में वर्णित के रूप में फ़ोल्डर में सभी जार फाइलें जोड़ी हैं । और दो दिन बाद भी कुछ काम नहीं कर रहा है। मैंने कई बार Google पर खोजा है और जाहिरा तौर पर जो लोग मावेन का उपयोग कर रहे हैं, उन्होंने इसे किसी तरह से हल किया है, लेकिन मैं मावेन का उपयोग नहीं कर रहा हूं और न ही उस ट्यूटोरियल को लिखने वाले व्यक्ति ने किया है।

बस यह जांचने के लिए कि क्या com.sun.jersey.spi.container.servlet.ServletContainerआयातित में मौजूद है, Jersey jarsमैंने केवल जावा में यह पूरी तरह से योग्य नाम लिखने की कोशिश की और अंतर्मुखी नामों को खत्म करने दिया, लेकिन मुझे कोई अंतर्मुखी नहीं मिला, com.sun.jeइसलिए मेरा आखिरी अनुमान है कि नवीनतम जर्सी निर्माण में कुछ पैकेज पुनर्व्यवस्था हुई है और jerseyअब अंदर नहीं है com.sun। मैं थक गया हूँ और मैं किसी भी तरह की मदद की सराहना करूँगा।


आपने जर्सी को कैसे स्थापित किया? मैं संस्करण २.२ ९ के नीचे कुछ भी एक्सेस करने में असमर्थ हूं और २.११ के बारे में लेख वार्ता?
पिक्सेल

जवाबों:


155

आपने जर्सी 2 (जो JAX-RS 2 का RI) डाउनलोड किया है। आप जिस जर्सी का उपयोग करने की बात कर रहे हैं, वह ट्यूटोरियल 1. ( यहां ) से जर्सी 1.17.1 डाउनलोड करें , आपके लिए पर्याप्त होना चाहिए।

जर्सी 1 का उपयोग करता है com.sun.jersey, और जर्सी 2 org.glassfish.jerseyअपवाद का उपयोग करता है।

यह भी ध्यान दें कि जर्सी 2 से init-paramशुरू com.sun.jerseyहोने वाली मान्यता भी नहीं होगी।

संपादित करें

जर्सी 2 में संसाधनों और प्रदाताओं को पंजीकृत करना जर्सी 2 में कक्षाओं / उदाहरणों को पंजीकृत करने के बारे में अतिरिक्त जानकारी है।


2
+1। : इसी तरह की समस्याओं के साथ दूसरों के लिए एक अतिरिक्त के रूप में, यह आधिकारिक जर्सी उपयोगकर्ता गाइड को पढ़ने के लिए उपयोगी हो सकता है अध्याय 4. एक RESTful वेब सेवा नियोजित करना
informatik01

6
सर्वलेट-कंटेनर के लिए नया वर्ग "org.glassfish.jersey.servlet.ServletContainer" है
cljk

4
सर्वलेट-क्लास: org.glassfish.jersey.servlet.ServletContainer, init-param-name: jersey.config.server.provider.packages।
पिकमेट pic

1
यह उत्तर समस्या / त्रुटि का कारण अच्छी तरह से बताता है, लेकिन समाधान को बहुत खुला छोड़ देता है। क्योंकि, आपको दी गई छोटी सी जानकारी से मैं अपनी समस्या का समाधान नहीं कर पाया। Pom.xml, web.xml और java फ़ाइलों पर कुछ और विवरण बेहतर काम कर सकते हैं। या एक ब्लॉग या लेख देखें जो जर्सी 2.x के लिए एक ट्यूटोरियल में पाठक का मार्गदर्शन करता है
पाउलो ओलिवेरा

1
@ सिद्धार्थ से जुड़े लेख में कुछ दृष्टिकोणों को दिखाया गया था कि इसे कैसे हल किया जाए। अगर आपको उस लेख में कुछ जानकारी गायब है, तो मुझे बताएं। या आप हमेशा इस प्रश्न के उत्तर के रूप में अपना समाधान प्रदान कर सकते हैं।
मिशाल गजदोस

34

यदि आप जर्सी 2.x का उपयोग कर रहे हैं, तो आपको web.xml में अलग-अलग कॉन्फ़िगरेशन की आवश्यकता है क्योंकि सर्वलेट क्लास इसमें परिवर्तन है। आप निम्न कॉन्फ़िगरेशन के साथ अपने web.xml को अपडेट कर सकते हैं।

    <servlet>
    <servlet-name>myrest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>your.package.path</param-value>
    </init-param>
    <init-param>
     <param-name>unit:WidgetPU</param-name>
     <param-value>persistence/widget</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>myrest</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

9
क्या आपको वास्तव में यूनिट की आवश्यकता है: विजेट ? मुझे लगता है कि इसे हटाकर उत्तर को सरल बनाया जा सकता है।
निकिता बोसिक

1
यह परम जर्सी जर्सी से संबंधित नहीं है <init-param> <param-name> unit: WidgetPU </ param-name> <param-value> दृढ़ता / विजेट </ param-value> </ init-param>
vaquar khan

22

इसे पोम में जोड़ें

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.17.1</version>
</dependency>

2
जर्सी-कोर, जर्सी-सर्वर की एक निर्भरता है और कई को
विस्फोटक

ठीक है कि हमारे साथ क्या हुआ, हम 1.0.2 से 1.11 तक जर्सी-सर्वर से टकराए और "सर्वलेटकोएंटर" वर्ग अचानक AWOL है। ऐसा लगता है कि इसे और भविष्य के संस्करणों में जर्सी-सर्वलेट पैकेज रेफरी में ले जाया गया था: developer.jboss.org/thread/221647?tstart=0
rogerdpack

15

यह एक जर्सी सेटअप नहीं बल्कि एक ग्रहण सेटअप समस्या है।

इस सूत्र से ClassNotFoundException: com.sun.jersey.spi.container.servlet.ervletContainer

अपने ग्रहण प्रोजेक्ट के गुणों पर राइट क्लिक करें -> परिनियोजन असेंबली -> ऐड -> जावा बिल्ड पाथ एंट्रीज़ -> ग्रैड डिपेंडेंसीज़ -> समाप्त करें।

जब अपाचे शुरू हो रहे थे तब ग्रहण ग्रैडल निर्भरता का उपयोग नहीं कर रहा था।


1
इस मुद्दे के लिए बहुत समय बिताया, मेरा दिन बचाया!
तुषार ठाकुर

3

इसे इस्तेमाल करे :

org.glassfish.jersey.servlet.ServletContainer

सर्वलेट-क्लास पर


2

मेरे पास एक ही समस्या थी क्योंकि मैंने एक अलग गाइड का पालन किया है: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

अजीब बात यह है कि, इस गाइड में, मैंने उपयोग किया है, मुझे संस्करणों के बीच संगतता के साथ कोई समस्या नहीं होनी चाहिए (2.x के खिलाफ 1.x) क्योंकि गाइड का पालन करने पर आप जर्सी 1.8.x का उपयोग करते हैं pom.xmlऔर web.xmlआप को संदर्भित करते हैं। एक वर्ग ( com.sun.jersey.spi.container.servlet.ServletContainer) जैसा कि 1.x संस्करण से पहले कहा गया है। तो जैसा कि मैं अनुमान लगा सकता हूं कि यह काम करना चाहिए।

मेरा अनुमान है क्योंकि मैं JDK 1.7 का उपयोग कर रहा हूं यह वर्ग अब मौजूद नहीं है।


बाद में, मैंने खदान से पहले उत्तरों के साथ हल करने की कोशिश की, मदद नहीं की, मैंने इस पर pom.xmlऔर web.xmlत्रुटि में परिवर्तन किया है:java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

जो माना जाता है कि मौजूद होना चाहिए!

इस त्रुटि के परिणामस्वरूप, मुझे "नया" समाधान मिला: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/

Maven (archetypes) के साथ, एक जर्सी प्रोजेक्ट बनाएं, इसे पसंद करते हैं:

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0

और यह मेरे लिए काम किया! :)


2

मुझे भी इसी तरह के मुद्दे का सामना करना पड़ा। नीचे दिए गए लिंक से चरण चरण ट्यूटोरियल के माध्यम से जाकर समस्या का समाधान किया।

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/

  • ध्यान देने वाली मुख्य बात यह है कि जर्सी पुस्तकालयों को TOMCAT WEB-INF / lib फ़ोल्डर में सही ढंग से रखा जाना चाहिए। यह उपरोक्त लिंक में उल्लिखित ग्रहण सेटिंग्स द्वारा स्वचालित रूप से किया जाता है। यह निर्भर JAR फ़ाइलों के साथ एक WAR फ़ाइल बनाएगा। और, आप ClassNotFound अपवाद के साथ समस्याओं में चलेंगे।

Apache-tomcat-7.0.56-windows-x64 \ apache -tomcat-7.0.56 \ webapps \ JerseyJSONExample \ WEB-INF \ lib

"11/23/2014 12:06 AM 130,458 जर्सी-क्लाइंट-1.9.जर

11/23/2014 12:06 पूर्वाह्न 458,739 जर्सी-कोर-1.9.जर

11/23/2014 12:06 पूर्वाह्न 147,952 जर्सी-जसन-1.9.जर

11/23/2014 12:06 AM 713,089 जर्सी-सर्वर-1.9.jar "4 फाइल (ओं) 1,450,238 बाइट्स के लिए

  • दूसरा ट्यूटोरियल यह बताता है कि कैसे एक वेबस्पोर्ट बनाने के लिए जो JSON आउटपुट का उत्पादन और खपत करता है।

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/

दोनों लिंक ने एक अच्छी तस्वीर दी कि चीजें कैसे काम करती हैं और बहुत समय बचाती हैं।


1

हमें यह त्रुटि बिल्ड पाथ समस्या के कारण मिलती है। आपको बिल्ड पाथ में " सर्वर रनटाइम " लाइब्रेरी को जोड़ना चाहिए ।

"java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer"

अपवाद नहीं मिला वर्ग को हल करने के लिए कृपया नीचे दिए गए चरणों का पालन करें।

राईट क्लिक करें project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0


0

आज मुझे उसी त्रुटि का सामना करना पड़ा, हालांकि मैं जर्सी 1.x का उपयोग कर रहा था, और मेरे क्लासपाथ में सही जार था। जो लोग पत्र के लिए वोगेला ट्यूटोरियल का पालन करना चाहते हैं, और 1.x जार का उपयोग करना चाहते हैं, आपको WE-INF / lib फ़ोल्डर में जर्सी पुस्तकालयों को जोड़ना होगा। यह निश्चित रूप से समस्या का समाधान करेगा।


मेरे पास एक ही त्रुटि है (जर्सी-सर्वर, जर्सी-कोर, जर्सी-सर्वलेट का 1.18.1 संस्करण का उपयोग करके), लेकिन इंटेलीज आइडिया द्वारा बनाई गई विस्फोट की वजह से एक एकल वेब-इन्फो फ़ोल्डर है, जो क्लास फ़ोल्डर के अंदर और वेब .xml फ़ाइल के साथ है। फ़ोल्डर में केवल हैलो.क्लास
स्कीबॉक्स

0

आपको jersey-bundle-1.17.1.jarप्रोजेक्ट के लिब में जोड़ने की जरूरत है

<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> --> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <!-- <param-name>jersey.config.server.provider.packages</param-name> --> <param-value>package.package.test</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>


0

आपको अपने web.xml में प्रतिस्थापित करना होगा:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

इसके लिए:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

यह com.sun.jersey (जो जर्सी 1.x द्वारा उपयोग किया जाता है) और इसलिए अपवाद के बजाय जर्सी 2.x org.glassfish.jersey पैकेज का उपयोग करता है। ध्यान दें कि init-param जो com.sun.jersey से शुरू होता है, जर्सी 2.x से पहचाना नहीं जाएगा। एक बार जब आप JAX-RS 2.0 और जर्सी 2.x पर जाते हैं

अगर किसी भी क्षण आप मावेन का उपयोग करते हैं, तो आपका pom.xml यह होगा:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.X</version>
</dependency>

2.X को अपने इच्छा संस्करण के लिए बदलें, जैसे 2.15


0

एक साधारण वर्कअराउंड है, यह जांचें कि क्या आपके पास ग्रहण की असेंबली में निर्भरता या लिबास है। यदि आप टॉमकैट का उपयोग कर रहे हैं, तो सर्वर शायद उन कामों की पहचान नहीं कर सकता है जो हम उपयोग कर रहे हैं। उस स्थिति में इसे स्पष्ट रूप से परिनियोजन असेंबली में निर्दिष्ट करें।


0

मूल समस्या पर वापस आ रहा है - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ervletContainer

जैसा कि ठीक ऊपर कहा गया है, JAX 2.x संस्करण में, सर्वलेटकॉन क्लास को पैकेज में स्थानांतरित किया गया है - org.glassfish.jersey.servlet.ervletContainer। संबंधित जार है जर्सी-कंटेनर-सर्वलेट-core.jar के भीतर जो आता jaxrs-ri-2.2.1.zip

WEB-INF / lib फ़ोल्डर में ज़िप फ़ाइल jaxrs-ri-2.2.1.1.zip (मैं इस संस्करण का उपयोग किया है, किसी भी 2.x संस्करण के साथ काम करेगा) के भीतर निहित सभी जार को मैन्युअल रूप से कॉपी करके JAX RS को mvan के बिना काम किया जा सकता है । सही फ़ोल्डर में लिबास कॉपी करना उन्हें रनटाइम पर उपलब्ध कराता है।

यह आवश्यक है यदि आप अपनी परियोजना के निर्माण और तैनाती के लिए ग्रहण का उपयोग कर रहे हैं।


0

Pom.xml फ़ाइल में हमें जोड़ना होगा

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.8</version>
</dependency>

0

एक ही त्रुटि और 2+ घंटे डिबगिंग और सभी विकल्पों को आज़माना व्यर्थ है। मैं मावेन / पोम का उपयोग नहीं कर रहा था, इसलिए मैं कुछ द्वारा दिए गए उस समाधान का लाभ नहीं उठा सका।

अंत में निम्नलिखित ने इसे हल किया: जार को सीधे टॉमकैट / lib (WEB-INF \ lib) फ़ोल्डर में जोड़ना और टॉमकैट को पुनरारंभ करना।


0

अगर कोई भी जर्सी का उपयोग करके हैलो वर्ल्ड एप्लीकेशन बनाने की कोशिश कर रहा है, तो मुझे लगता है कि जर्सी प्रलेखन का पालन करना सबसे आसान तरीका है।

https://jersey.github.io/download.html

यदि आप पहले से ही मावेन का उपयोग कर रहे हैं, तो परिणाम देखने में केवल कुछ मिनट लगेंगे।

मैंने नीचे इस्तेमाल किया।

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26

0

यह मूल रूप से निर्भर करता है कि आप किस संस्करण की जर्सी का उपयोग कर रहे हैं। यदि आप जर्सी ver.1.XX का उपयोग कर रहे हैं तो आपको जोड़ना होगा

जर्सी 1 " com.sun.jersey " का उपयोग करता है , और जर्सी 2 org.glassfish का उपयोग करता है । सर्वलेट क्लास टैग पर। यह भी ध्यान रखें कि com.sun.jersey से शुरू होने वाली init-param को जर्सी 2 द्वारा मान्यता नहीं दी जाएगी।

और WEB-INF lib फ़ोल्डर में सभी जार फ़ाइल जोड़ें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.