我不明白为什么当我在EJB中创建JAX-RS客户端时,无法获得JAX-RS的实现。我相信像Glassfish 3.1这样的应用程序服务器应该提供像Jersey这样的JAX-RS实现,我不应该像依赖项一样添加它,但它找不到它。
错误是java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder
,我认为没有必要将Jersey添加到类路径中,因为Glassfish必须提供它。
生成错误的代码是
Client client = ClientBuilder.newClient();
此代码位于EJB方法中,我的测试用例是:
EJBContainer container = EJBContainer.createEJBContainer();
MyService service = (MyService) container.getContext().lookup("java:global/classes/MyService");
service.create(null);
pom.xml文件中的依赖项如下所示:
<dependencies>
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
包装是一个WAR文件,我认为这应该不是问题。
答案 0 :(得分:1)
GlassFish 3.1是一个JavaEE 6实现,它实现了JAX-RS 1.1
您需要更新到GlassFish 4.1以获取您正在使用的JAX-RS 2.0实现(根据您包含的javaee-api 7.0依赖项)。
事实上,在JAX-RS 2.0中添加了javax.ws.rs.client.ClientBuilder。