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

时间:2016-02-09 22:44:12

标签: java maven jersey ejb

我的var json = [{ "name": "Value0", "values": ["Sample0", "Sample1", "Sample2", "Sample3"] }, { "name": "Value1", "values": ["Sample4", "Sample5", "Sample6", "Sample7"] } 文件出了问题。我知道,关于这个问题有很多主题,但是其中任何一个都能解决我的问题。

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

我的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

请帮我纠正一下,我在pom文件中找不到错误。

我在Tomcat 8工作

1 个答案:

答案 0 :(得分:2)

您的类路径中有多个依赖项,其中包含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>

其他方式是升级泽西版,就像在这个回答中一样:AbstractMethodError using UriBuilder on JAX-RS

在运行时UriBuilder#uri(String)被调用,因此您需要验证servlet容器中的依赖项。