2015-12-01 4 views
0

Я не понимаю, почему, когда я создаю клиент JAX-RS внутри EJB, не могу получить реализацию JAX-RS. Я считаю, что предполагается, что сервер приложений, такой как Glassfish 3.1, должен обеспечить реализацию JAX-RS, например, Джерси, и я не должен добавлять его как зависимость, но он не может его найти.Тестирование Отдыхающий клиент от EJB3

Ошибка java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder, и я думаю, что не нужно добавлять Джерси в путь к классу, потому что 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

GlassFish 3.1 является реализация JavaEE 6, который реализует JAX-RS 1.1

Вам необходимо обновить до GlassFish 4.1, чтобы получить JAX-RS 2.0 реализации, которые вы используете (в соответствии с JavaEE-апи 7,0 зависимостей, который вы включили).

Фактически, javax.ws.rs.client.ClientBuilder был добавлен в JAX-RS 2.0.

+0

Согласно http://www.oracle.com/technetwork/java/javaee/tech/javaee6technologies-1955512.html, jax-rs принадлежит JavaEE 6. – rvillablanca

+0

Но вы пытаетесь использовать API Java EE 7 в своем pom.xml? –

+0

Да, я использую jee 7 api. Я не знаю, как я могу выполнить тест, используя контейнер jee 7 ejb, однако мой код должен работать в контейнере jee 6/7. – rvillablanca

Смежные вопросы