java 宁静的 JAX-RS 服务器错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17371125/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Restful JAX-RS Server Error
提问by Mulgard
I have problems using Restful Webservices using the Jersey implementation. In the documentation it is written that i should download this : Jersey JAX-RS 2.0 RI bundle, unzip it and add the jars to my WEB-INF/lib folder. These jars are:
我在使用 Jersey 实现使用 Restful Webservices 时遇到问题。在文档中写到我应该下载这个: Jersey JAX-RS 2.0 RI 包,解压它并将 jars 添加到我的 WEB-INF/lib 文件夹中。这些罐子是:
- jersey-client
- jersey-common
- jersey-container-servlet
- jersey-container-servlet-core
- jersey-server
- 球衣客户
- 球衣-普通
- 球衣容器servlet
- 球衣-容器-servlet-核心
- 球衣服务器
If i do so i always get the following exception:
如果我这样做,我总是会收到以下异常:
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
After some researching i found out that i should add jersey-servlet-1.12.jar instead of adding the jars from the download source posted above. So I did it. I added this to my web.xml
经过一番研究,我发现我应该添加 jersey-servlet-1.12.jar 而不是从上面发布的下载源添加 jars。所以我做到了。我将此添加到我的 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>
And i implemented a small test-class:
我实现了一个小的测试类:
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();
}
}
When i now call http://localhost:8080/MyApp/jaxrs/test
i get this error:
当我现在打电话时,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.
I dont know how to do use the jersey implementation correctly.
我不知道如何正确使用球衣实现。
采纳答案by Mulgard
I solved the Problem.
我解决了问题。
I deleted all jersey jars and i deleted the webservices part from the web.xml.
我删除了所有球衣罐,并从 web.xml 中删除了 webservices 部分。
I changed my test class to this:
我将测试类更改为:
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import de.hof.university.spj.model.Movie;
@RequestScoped
@ApplicationPath("/webservices")
@Path("/movies")
public class Test extends Application implements Serializable {
private static final long serialVersionUID = 1L;
@GET
@Produces(MediaType.APPLICATION_JSON)
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();
}
}
And i added @XmlRootElement
to my Movie Entity class.
我添加@XmlRootElement
到我的电影实体类。
Now it works fine
现在它工作正常
回答by Marcel St?r
Why don't you just follow the Getting Startedguide? It tells you exactly how to go about this.
为什么不直接遵循入门指南?它会准确地告诉您如何进行此操作。
You'd see that you need, amongst a few others, these JARs in WEB-INF/lib
:
您会发现除了其他一些之外,您还需要以下 JAR WEB-INF/lib
:
javax.annotation-api-1.2.jar
javax.inject-2.1.88.jar
javax.ws.rs-api-2.0.jar
jersey-client-2.0.jar
jersey-common-2.0.jar
jersey-container-servlet-core-2.0.jar
jersey-server-2.0.jar
You'd also see that the web.xml
needs to look similar to this:
您还会看到web.xml
需要看起来与此类似:
<servlet>
<servlet-name>Jersey Web Application</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.example</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>