Jersey 実装を使用した Restful Webservices の使用に問題があります。ドキュメントには、これをダウンロードする必要があると書かれています: Jersey JAX-RS 2.0 RI bundle、解凍し、jars を WEB-INF/lib フォルダーに追加します。これらの jar は次のとおりです。
- ジャージ-クライアント
- ジャージ共通
- ジャージーコンテナサーブレット
- ジャージ-コンテナ-サーブレット-コア
- ジャージサーバー
そうする場合、常に次の例外が発生します。
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
いくつかの調査の後、上記のダウンロード ソースから jar を追加する代わりに jersey-servlet-1.12.jar を追加する必要があることがわかりました。だから私はそれをしました。これをweb.xmlに追加しました
<servlet>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/jaxrs/*</url-pattern>
</servlet-mapping>
そして、小さなテストクラスを実装しました:
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import de.hof.university.spj.model.Movie;
@Path("/test")
public class Test {
@GET
@Produces("application/json; charset=UTF-8")
public List<Movie> getMovieList() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("SPJUnit");
EntityManager em = factory.createEntityManager();
TypedQuery<Movie> query = em.createQuery("Select m FROM Movie m WHERE m.movieID = 4204", Movie.class);
return query.getResultList();
}
}
今電話するとhttp://localhost:8080/MyApp/jaxrs/test
、このエラーが発生します:
HTTP Status 500 - Internal Server Error. The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.
ジャージの実装を正しく使用する方法がわかりません。