Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建自己的RESTAPI会引发servlet执行异常_Java_Rest_Tomcat_Exception_Servlets - Fatal编程技术网

Java 创建自己的RESTAPI会引发servlet执行异常

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

我一直在用jersey和java构建自己的RESTAPI。但今天它停止工作了,因为一位同样在它上面工作的朋友推动了他的改变。他没有在依赖项方面做任何更改,但他添加了一个控制器,由我们的主API类创建。现在,每当我尝试访问资源时,tomcat服务器都会抛出一个错误:

    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)