从EJB3测试Restful客户端

时间:2015-12-01 19:17:47

标签: java-ee jax-rs glassfish-embedded

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

1 个答案:

答案 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