AbstractMethodError: javax.ws.rs.core.UriBuilder.uri in REST, EJB Application

AbstractMethodError: javax.ws.rs.core.UriBuilder.uri in REST, EJB Application

我的 pom.xml 文件有问题。我知道,有很多关于这个问题的话题,但其中任何一个都能回答我的问题。

@Path("/actors")
public class MainController {

    @EJB
    private ActorDaoLocal actorDao;  

}

@Local
public interface ActorDaoLocal { 
  //some stuff here
}

@Stateless
public class ActorDao implements ActorDaoLocal {

  @PersistenceContext
  private EntityManager em ; 
  //some stuff here 
}

@ManagedBean(name = "ActorBean")
@ApplicationScoped
public class ActorBean {

    @EJB
    private ActorDaoLocal usersDao;

}

在我的应用程序中,当我在 ActorBean 中没有注释时,如下所示:

@ManagedBean(name = "ActorBean")
@ApplicationScoped 

actorDao 在 MainController

中为 null

但是,当我为它添加此注释和依赖项时,我得到了异常:

java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
    at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:651)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

我的pom.xml

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    <type>jar</type>
</dependency>
<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.1</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-jaxrs</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-xc</artifactId>
    <version>1.9.2</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.18</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.18</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.18</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.18</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.18</version>
</dependency>
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>javax.ejb</groupId>
    <artifactId>ejb-api</artifactId>
    <version>3.0</version>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.5.2</version>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <type>jar</type>
</dependency>

请帮我更正这个问题,我在我的 pom 文件中找不到错误。

我在 Tomcat 8

工作

您的类路径中有多个依赖项,其中包含 javax.ws.rs.core.UriBuilder、两个 JAX-RS 1.1:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.18</version>
</dependency>

以及 JAX-RS 2.0 之一:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>

由于 JAX-RS 2.0 来自 Java EE 7,您可能需要将 javaee-api 降级到版本 6,使用方式如下:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>6.0</version>
</dependency>

其他方式是升级 Jersey 版本,就像这个答案:

运行时调用UriBuilder#uri(String),所以需要在servlet容器中验证依赖关系