java - REST、EJB 应用程序中的 AbstractMethodError : javax. ws.rs.core.UriBuilder.uri

标签 java maven jersey ejb

<分区>

我的 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 版本,就像这个答案:AbstractMethodError using UriBuilder on JAX-RS

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

关于java - REST、EJB 应用程序中的 AbstractMethodError : javax. ws.rs.core.UriBuilder.uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303669/

相关文章:

java - 如何在 reSTLet 中使用 Jersey 进行下载?

java - 用于 MultivaluedMap Jersey 的 Swagger API?是否可以?

java - Maven Netbeans 代理

java - 为什么在 Windows 上创建的 Java/Maven 项目不能在 Linux 上运行 - 无法加载 Main-Class list 属性

java - Maven 改变 Java 编译器

java - 这是joda时间的一个错误吗?处理非常旧的(0000 年)即时/负纪元

jersey - 使用 Mockito 模拟 Jersey 客户端

java - Android::如何随机化我的测验问题?

java - 获取包含垃圾数据的字符串的特定部分

java - Android OpenGL ES 以纵横比全屏显示图像