Java 创建自己的RESTAPI会引发servlet执行异常
我一直在用jersey和java构建自己的RESTAPI。但今天它停止工作了,因为一位同样在它上面工作的朋友推动了他的改变。他没有在依赖项方面做任何更改,但他添加了一个控制器,由我们的主API类创建。现在,每当我尝试访问资源时,tomcat服务器都会抛出一个错误:Java 创建自己的RESTAPI会引发servlet执行异常,java,rest,tomcat,exception,servlets,Java,Rest,Tomcat,Exception,Servlets,我一直在用jersey和java构建自己的RESTAPI。但今天它停止工作了,因为一位同样在它上面工作的朋友推动了他的改变。他没有在依赖项方面做任何更改,但他添加了一个控制器,由我们的主API类创建。现在,每当我尝试访问资源时,tomcat服务器都会抛出一个错误: exception javax.servlet.ServletException: Servlet execution threw an exception org.apache.tomcat.websocket.s
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.ja
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
我们相信这是在他添加了jsoup依赖项之后开始的
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
编辑:
我编辑了我的依赖项和web.xml,现在只得到404未找到
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
这是我的依赖项表单my pom.xml
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.23.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.23.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.3.8</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>[4.0,)</version>
</dependency>
<dependency>
<groupId>org.facebook4j</groupId>
<artifactId>facebook4j-core</artifactId>
<version>[2.4,)</version>
</dependency>
</dependencies>
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
我刚刚得到404。1)当应用程序试图调用抽象方法时,会抛出一个AbstractMethodError
异常。com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
uri
是UriBuilder
中的一个抽象方法,因此需要实现它
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
您应该将JAX-RS 2.0与Jersey 2.*一起使用,Jersey 2.*实现了JAX-RS 2.0,并包含了对uri
方法的实现
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
2)通过查看堆栈跟踪,它清楚地表明您正在使用Jersey版本1和2,这是不可能的,因此类加载器选择了错误的URIBuilder类
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
堆栈跟踪:
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
组
com.sun.Jersey
中的Jersey依赖项都是Jersey版本1。Jersey版本2使用组org.glassfish.Jersey
可能是由于错误的Jersey容器servlet导致您的问题,这可能会导致选取错误的uribuilder
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
jersey容器servlet=>jersey核心servlet 3.x实现
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
jersey容器servlet核心=>jersey核心servlet 2.x实现
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
更改:
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.23.2</version>
<scope>provided</scope>
</dependency>
org.glassfish.jersey.containers
要了解您需要为Glassfish和其他基于Servlet(非jax rs集成)的容器提供哪些依赖项,请在我尝试访问资源时立即共享代码和更多信息:您的资源是如何配置的?您试图访问的URI是什么?你所说的控制器是什么意思?正如你在我的编辑中看到的,我已经解决了这个问题,现在我得到了404。我可以补充一点,我们以前使用过jersey 1.x,但昨天改为2.23.2,效果很好。是的,我可以看到,但您的更改还没有反映出来。您的项目中有一些与jersey 1罐的链接。需要做一些清理,删除jersey 1 JAR(如果maven下载它的位置存在)。否则,创建一个新项目并复制粘贴代码库。
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)