Saya telah menggunakan implementasi jersey jaxrs tetapi saya tidak dapat menjalankan program berikut ini jika saya mendapat masalah, ada ide yang membantu saya
dalam program berikut saya menggunakan implementasi jersy 2.x dari jaxrs saya mengimplementasikan program menggunakan implementasi jersey dari jax-rs(restfull) 2 kelas yang saya tulis alih-alih web.xml saya menggunakan kelas tersebut
Sumber Daya Saya.java
package com.rest.application; import java.util.HashSet; import java.util.Set; import javax.ws.rs.ApplicationPath; import com.rest.webservice.SampleService; @ApplicationPath("rest") public class MyResource { private Set s; public MyResource() { s=new HashSet(); s.add(new SampleService()); } public Set getSingletons() { return s; } }
SampleService.java
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @Path("sample") public class SampleService { @GET @Produces("text/html") @Path("{username}") public String sayHello(@PathParam("username")String s) { return "<font color='blue' size=8>Hello:" +s+ "</font>"; } @GET @Produces("text/plain") public String sayBye() { return "Bye"; } }
Saya menambahkan semua toples yang diperlukan ke program ini, namun saya masih mendapatkan kesalahan berikut
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]. StandardHost[localhost].StandardContext[/RestApp2]] Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]. StandardHost[localhost].StandardContext[/RestApp2]]
seperti kesalahan yang sama muncul di mana-mana
ketika saya mengubah server Tomcat 7 menjadi 6 itu berfungsi tetapi tidak menampilkan hasilnya, adakah yang tahu, terima kasih sebelumnya
di jersey 2.x saya mendapatkan kesalahan seperti java.util.concurrent.ExecutionException
Jawaban (2)
Ini mengatakan, @ApplicationPath("rest")
hanya dapat diterapkan pada subkelas Aplikasi.
Bisakah Anda berbagi lebih banyak tentang apa yang Anda coba lakukan dan apa jejak tumpukan lengkapnya. Apakah Anda menggunakan web.xml?
Seperti yang disebutkan @MSD, penggunaan @ApplicationPath
Anda salah. Lihat dokumentasi Jersey di Penerapan Aplikasi untuk melihat semua opsi penerapan yang berbeda, dan bagaimana mereka bekerja di lingkungan yang berbeda.
Pada dasarnya, cara termudah menempatkan @ApplicationPath
pada kelas Application
yang kosong
@ApplicationPath("/rest")
public class MyApplication extends Application {}
Ini akan memindai seluruh classpath untuk kelas beranotasi @Provider
dan @Path
, untuk mendaftar ke aplikasi. Meskipun ini mungkin tampak lebih mudah, pendekatan yang lebih umum ketika bekerja dengan Jersey adalah dengan menggunakan ResourceConfig
, yang merupakan subkelas dari Application
. Anda dapat mendaftarkan paket, yang akan memindai paket dan subpaket
@ApplicationPath("/rest")
public class MyApplication extends ResourceConfig {
public MyApplication() {
packages("com.my.packages");
}
}
Salah satu keuntungannya adalah terkadang akan ada dependensi pihak ketiga yang diberi anotasi, namun Anda tidak ingin didaftarkan. Untuk mendaftarkan kelas individual cukup gunakan register(...class)
di ResourceConfig
.
Sekarang alasan kesalahan pada Tomcat 7 dan bukan 6, kemungkinan besar karena Tomcat 6 (servlet 2.5) tidak memiliki mekanisme pluggability sevlet, yang menggunakan file ServletContainerInitializer
. Implementasi Jersey dari penginisialisasi ini memuat aplikasi, mencari @ApplicationPath
pada subkelas Application
. Jika Anda tidak berada di lingkungan 3.0, fungsi ini tidak akan berfungsi.
Perhatikan penginisialisasi Jersey disertakan dalam toples jersey-container-servlet
. Anda dapat membaca lebih lanjut tentang hal ini di sini