JBoss6 с клиентом REST (джерси-клиент)

#java #jersey #jax-rs #jboss6.x

#java #джерси #jax-rs #jboss6.x

Вопрос:

Я хочу использовать службу REST в своем веб-приложении (.war с 6.0.0.Final), но у меня проблемы с добавлением библиотек jersey-client:

 <dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-client</artifactId>
  <version>1.9.1</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>
  

При такой конфигурации я получаю следующую ошибку при запуске JBoss:

 08:11:28,297 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].
[localhost].[/test]] Exception starting filter Resteasy:
java.lang.ClassCastException: com.aht.erp.web.rest.JaxRsActivator
cannot be cast to javax.ws.rs.core.Application
  

В моем веб-приложении активирован JAX-RS со следующей аннотацией:

 import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class JaxRsActivator extends Application {}
  

Если я не добавлю зависимость, моя война начнется нормально, но, конечно, я получаю a NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig при вызове джерси-клиента. При исключении jersey-core я получаю эту ошибку: NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties .

Ответ №1:

Я полагаю, что проблема в том, что вы пытаетесь смешать две разные реализации jax-rs в своем веб-приложении. Для вашего ресурса RESTful вы используете RESTEasy, в то время как на стороне клиента вы хотите использовать Jersey — все они используются одним и тем же jar. Однако клиент Джерси зависит от ядра Джерси, которое конфликтует с RESTEasy. Итак, вам придется либо полагаться на клиентский API RESTEasy, либо переключиться на Jersey и для вашей серверной части.