我不明白为什么当我在 EJB 中创建 JAX-RS 客户端时,无法获得 JAX-RS 的实现。我相信假设像 Glassfish 3.1 这样的应用程序服务器应该提供像 Jersey 这样的 JAX-RS 实现,我不应该像依赖项一样添加它,但它找不到它。
错误是 a 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文件,我觉得应该没问题。