0

我不明白为什么当我在 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文件,我觉得应该没问题。

4

1 回答 1

1

GlassFish 3.1 是一个 JavaEE 6 实现,它实现了 JAX-RS 1.1

您需要更新到 GlassFish 4.1 以获取您正在使用的 JAX-RS 2.0 实现(根据您包含的 javaee-api 7.0 依赖项)。

实际上javax.ws.rs.client.ClientBuilder是在 JAX-RS 2.0 中添加的。

于 2015-12-01T23:49:03.233 回答