Saya mencoba membuat aplikasi hello world sederhana selama dua hari menggunakan mesin aplikasi Jersey + Google. Untuk proyek AppEngine sederhana, saya mengikuti tutorial ini dan keduanya berfungsi dengan baik https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform
Tapi sekarang saya mencoba menambahkan Jersey dan mengikuti tutorial ini http://www.vogella.com/articles/REST/article.html .
Tapi server terus memberi saya
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
ketika saya menambahkan baris ini di 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>
Saya telah mengunduh Jersey JAX-RS 2.1 RI bundle
dari sini dan telah menambahkan semua file jar di WEB-INF/lib
folder seperti yang dijelaskan dalam tutorial. Dan bahkan setelah dua hari tidak ada yang berhasil. Saya telah mencari beberapa kali di Google dan tampaknya orang-orang yang menggunakan Maven telah memecahkannya entah bagaimana tetapi saya tidak menggunakan Maven juga orang yang menulis tutorial itu.
Hanya untuk memeriksa apakah bahkan com.sun.jersey.spi.container.servlet.ServletContainer
ada di impor Jersey jars
saya mencoba untuk hanya menulis nama yang memenuhi syarat ini di Jawa dan membiarkan nama selesai intellisense tetapi saya tidak bisa mendapatkan kecerdasan apa pun setelah com.sun.je
jadi tebakan terakhir saya adalah bahwa ada beberapa pengaturan ulang paket dalam pembuatan Jersey terbaru dan jersey
tidak lagi di dalam com.sun
. Saya kelelahan dan saya sangat menghargai bantuan apa pun.
sumber
Jawaban:
Anda telah mendownload Jersey 2 (yang RI dari JAX-RS 2). Tutorial yang Anda maksud menggunakan Jersey 1. Unduh Jersey 1.17.1 dari (di sini ), sudah cukup untuk Anda.
Jersey 1 menggunakan
com.sun.jersey
, dan Jersey 2 menggunakanorg.glassfish.jersey
pengecualian.Perhatikan juga bahwa
init-param
memulai dengancom.sun.jersey
tidak akan dikenali oleh Jersey 2.Sunting
Mendaftarkan Sumber Daya dan Penyedia di Jersey 2 berisi info tambahan tentang cara mendaftarkan kelas / instance di Jersey 2.
sumber
Jika Anda menggunakan jersey 2.x maka Anda memerlukan konfigurasi yang berbeda di web.xml karena kelas servlet berubah di dalamnya. Anda dapat memperbarui web.xml Anda dengan konfigurasi berikut.
sumber
Tambahkan ini di pom
sumber
Ini masalah pengaturan gerhana, bukan masalah Jersey.
Dari utas ini ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Klik kanan Properties proyek eclipse Anda -> Deployment Assembly -> Add -> Java Build Path Entries -> Gradle Dependencies -> Finish.
Jadi Eclipse tidak menggunakan dependensi Gradle saat Apache dimulai.
sumber
coba ini :
di kelas servlet
sumber
Saya memiliki masalah yang sama seperti Anda meskipun saya telah mengikuti panduan yang berbeda: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/
Bagian yang aneh adalah, dalam panduan ini yang telah saya gunakan, saya seharusnya tidak memiliki masalah dengan kompatibilitas antara versi (1.x melawan 2.x) karena mengikuti panduan Anda menggunakan jersey 1.8.x
pom.xml
dan diweb.xml
Anda mengacu pada kelas (com.sun.jersey.spi.container.servlet.ServletContainer
) seperti yang dikatakan sebelumnya dari versi 1.x. Jadi seperti yang bisa saya simpulkan ini seharusnya berhasil.Dugaan saya karena saya menggunakan JDK 1.7 kelas ini sudah tidak ada lagi.
Setelah, saya mencoba menyelesaikan dengan jawaban sebelum saya, tidak membantu, saya telah membuat perubahan pada
pom.xml
dan padaweb.xml
kesalahan berubah menjadi:java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Yang seharusnya ada!
Akibat kesalahan ini, saya menemukan solusi "baru": http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/
Dengan Maven (arketipe), buat proyek jersey, seperti ini:
Dan itu berhasil untuk saya! :)
sumber
Saya juga menghadapi masalah serupa. Selesaikan masalah dengan melalui tutorial langkah langkah dari tautan di bawah ini.
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/
apache-tomcat-7.0.56-windows-x64 \ apache -tomcat-7.0.56 \ webapps \ JerseyJSONExample \ WEB-INF \ lib
"23/11/2014 12:06 AM 130.458 jersey-client-1.9.jar
23/11/2014 12:06 AM 458.739 jersey-core 1.9.jar
23/11/2014 12:06 AM 147.952 jersey-json-1.9.jar
11/23/2014 12:06 AM 713.089 jersey-server-1.9.jar "4 File 1.450.238 byte
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
Kedua tautan tersebut memberikan gambaran yang baik tentang cara kerja dan menghemat banyak waktu.
sumber
Kami mendapatkan kesalahan ini karena masalah jalur build. Anda harus menambahkan pustaka " Server Runtime " di Build Path.
Ikuti langkah-langkah di bawah ini untuk menyelesaikan kelas tidak ditemukan pengecualian.
Klik kanan
project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
sumber
Saya mengalami kesalahan yang sama hari ini meskipun saya menggunakan Jersey 1.x, dan memiliki stoples yang tepat di jalur kelas saya. Bagi mereka yang ingin mengikuti tutorial vogella ke surat itu, dan menggunakan toples 1.x, Anda perlu menambahkan perpustakaan jersey ke folder WEB-INF / lib. Ini pasti akan menyelesaikan masalah.
sumber
Anda perlu menambahkan
jersey-bundle-1.17.1.jar
ke lib proyek<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>
sumber
Anda harus mengganti di web.xml Anda:
untuk ini:
ini adalah Jersey 2.x menggunakan paket org.glassfish.jersey bukan com.sun.jersey (yang digunakan oleh Jersey 1.x) dan karenanya merupakan pengecualian. Perhatikan bahwa init-param yang dimulai dengan com.sun.jersey tidak akan dikenali oleh Jersey 2.x setelah Anda bermigrasi ke JAX-RS 2.0 dan Jersey 2.x
jika suatu saat Anda menggunakan maven, pom.xml Anda akan menjadi ini:
ganti 2.X untuk versi keinginan Anda, misalnya 2.15
sumber
Solusi sederhana adalah, periksa apakah Anda memiliki dependensi atau libs dalam perakitan penerapan eclipse. Mungkin jika Anda menggunakan tomcat, server mungkin tidak mengidentifikasi lib yang kami gunakan. dalam hal ini tentukan secara eksplisit dalam perakitan penyebaran.
sumber
Kembali ke masalah aslinya - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
Seperti yang dikatakan dengan benar di atas, dalam versi JAX 2.x, kelas ServletContainer telah dipindahkan ke paket - org.glassfish.jersey.servlet.ServletContainer. Guci terkait adalah jersey-container-servlet-core.jar yang dibundel dalam jaxrs-ri-2.2.1.zip
JAX RS dapat bekerja tanpa mvn dengan menyalin secara manual semua toples yang terdapat dalam file zip jaxrs-ri-2.2.1.zip (saya telah menggunakan versi ini, akan bekerja dengan versi 2.x apa pun) ke folder WEB-INF / lib. Menyalin libs ke folder kanan membuatnya tersedia saat runtime.
Ini diperlukan jika Anda menggunakan eclipse untuk membangun dan menerapkan proyek Anda.
sumber
Di file pom.xml kita perlu menambahkan
sumber
Kesalahan yang sama dan menghabiskan 2+ jam debugging dan mencoba semua opsi. Saya tidak menggunakan Maven / POM, jadi saya tidak dapat memanfaatkan solusi yang diberikan oleh sedikit orang.
Akhirnya hal berikut menyelesaikannya: Menambahkan toples langsung ke folder tomcat / lib (BUKAN WEB-INF \ lib) dan memulai ulang tomcat.
sumber
Jika ada yang mencoba membuat aplikasi hello world menggunakan Jersey, menurut saya salah satu cara termudah adalah mengikuti dokumentasi Jersey.
https://jersey.github.io/download.html
Jika Anda sudah menggunakan maven, hanya perlu beberapa menit untuk melihat hasilnya.
Saya gunakan di bawah ini.
sumber
Ini pada dasarnya tergantung pada jersey versi mana yang Anda gunakan. Jika Anda menggunakan Jersey ver.1.XX Anda perlu menambahkan
Jersey 1 menggunakan " com.sun.jersey ", dan Jersey 2 menggunakan org.glassfish . pada tag kelas servlet. Selain itu, perhatikan bahwa init-param yang dimulai dengan com.sun.jersey tidak akan dikenali oleh Jersey 2.
Dan Tambahkan semua file jar ke folder lib WEB-INF
sumber