RESTEasy Client + NoSuchMethodError

Estoy intentando escribir un cliente RESTEasy simple. A continuación se da el código de muestra:

Client client = ClientBuilder.newBuilder().build(); WebTarget target = client.target("http://localhost:8080/context/path"); Response response = target.request().post(Entity.entity(object, "application/json")); //Read output in string format String value = response.readEntity(String.class); 

Me sale una excepción en la línea:

 Client client = ClientBuilder.newBuilder().build(); 

Veo los siguientes errores en mi consola:

 16:07:57,678 ERROR [stderr] (http-localhost/127.0.0.1:8080-1) java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)V 16:07:57,679 ERROR [stderr] (http-localhost/127.0.0.1:8080-1) at org.jboss.resteasy.client.jaxrs.internal.ClientConfiguration.(ClientConfiguration.java:44) 16:07:57,680 ERROR [stderr] (http-localhost/127.0.0.1:8080-1) at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:317) 16:07:57,680 ERROR [stderr] (http-localhost/127.0.0.1:8080-1) at org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder.build(ResteasyClientBuilder.java:49) 

He agregado la dependencia del cliente resteasy en pom.xml como:

   org.jboss.resteasy resteasy-client 3.0.8.Final  

Mi código se implementa en JBOSS EAP 6.1. La versión JDK es 1.7.

Actualización: también intenté agregar resteasy dependencia jax-rs en mi pom. También verifiqué si ResteasyProviderFactory está habilitado agregando las siguientes líneas en mi web.xml:

   org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap  

Por favor encuentre la lista a continuación de las dependencias de maven:

   org.jboss.spec.javax.ejb jboss-ejb-api_3.1_spec provided   javax.enterprise cdi-api provided   org.hibernate.javax.persistence hibernate-jpa-2.0-api provided   org.hibernate hibernate-validator provided   org.jboss.resteasy resteasy-jaxrs 3.0.8.Final provided   org.jboss.resteasy resteasy-client 3.0.8.Final   com.google.code.gson gson 2.2.4   junit junit test   org.jboss.arquillian.junit arquillian-junit-container test   org.jboss.arquillian.protocol arquillian-protocol-servlet test   

Pero no funciona.

Por excepción, no puedo descifrar qué falta. No puedo encontrar referencias para este tema en SO o en ningún otro foro. Avíseme si ha visto este problema anteriormente y sabe cómo solucionarlo. Gracias.


Actualización 11 de junio de 2014:

Después de referirme a este blog y de excluir algunos módulos resteasy y jackson, intenté crear jboss-deployment-structure.xml similar y mantenerlo en la carpeta META-INF en mi proyecto EJB. Esto resolvió mi problema de NoSuchMethodError para “org.jboss.resteasy.spi.ResteasyProviderFactory. (Lorg / jboss / resteasy / spi / ResteasyProviderFactory;)”. La estructura de mi jboss-deployment-structure.xml es:

        <!--  -->     <!--               -->    

Pero ahora veo una excepción similar para otro método:

 Caused by: java.lang.NoSuchMethodError: javax.ws.rs.core.Response.readEntity(Ljava/lang/Class;)Ljava/lang/Object; at com.example.data.DemoProxyBean.callDemoTx(DemoProxyBean.java:59) [demo-service.jar:] at com.example.data.DemoProxyBean$Proxy$_$$_WeldClientProxy.callDemoTx(DemoProxyBean$Proxy$_$$_WeldClientProxy.java) [demo-service.jar:] 

Y veo esta excepción en la línea:

 String value = response.readEntity(String.class); 

Lo extraño es que, cuando inspecciono “response.readEntity (String.class)”, al depurar, puedo ver el valor String. Pero cuando trato de pasar a la siguiente línea, veo este error. ¿Puedes guiarme, cuál podría ser el problema?

Actualización adicional:

Me referí a este rastreador de problemas de JBOSS . Pero estaba relacionado con WildFly, y no con el servidor EAP. Nos pide que excluyamos el módulo “javaee-api”. Traté de excluir el módulo “javaee-api”, pero tampoco funciona.

Estos problemas se deben a una versión diferente de la implementación de Resteasy Client entre su aplicación y los módulos JBoss EAP. Está utilizando la versión más reciente de jaxrs-client, pero JBoss EAP 6.3.0 usa una versión muy antigua (resteasy-jaxrs-2.3.8.Final-redhat-3).

Simplemente descargue el último paquete de la implementación de JBoss Resteasy (algo así: resteasy-jboss-modules-3.0.9.Final.zip) y descomprima en la carpeta EAP Modules reemplazando los archivos existentes modules.xml y agregando nuevos archivos. Recuerda reemplazar todos los JARS del ZIP (no solo resteasy-jaxrs).

Por fin, después de golpear mi cabeza por un par de días, pude resolver estos problemas.


Solución para el problema 1:

Error: “java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory. (Lorg / jboss / resteasy / spi / ResteasyProviderFactory;)”

Solución: Resolví este problema agregando más módulos resteasy en la lista de exclusión dentro de jboss-deployment-structure.xml. Mi estado actual de jboss-deployment-structure.xml es como:

                                                             

Creo que podría haber funcionado simplemente excluyendo los módulos “org.jboss.resteasy.resteasy-jaxrs” y “org.jboss.resteasy.resteasy-cdi”. Pero no lo intenté más adelante ya que me enfrenté a otro problema. Puede intentar eliminando las exclusiones innecesarias.

Solución para el problema 2:

Error: “Causado por: java.lang.NoSuchMethodError: javax.ws.rs.core.Response.readEntity (Ljava / lang / Class;) Ljava / lang / Object;”

Solución: JBOSS EAP 6.1, se incluye con la distribución resteasy predeterminada. Descargué la última implementación de jax-rs resteasy (resteasy-jaxrs-3.0.7.Final-all.zip) desde la ubicación .

Viene con un archivo zip llamado resteasy-jboss-modules-3.0.7.Final.zip. Descomprima este archivo dentro de modules / system / layers / base / directory de la distribución de JBoss EAP 6.1. Esto sobrescribirá algunos de los archivos existentes allí. Esto resolverá el segundo problema.

Espero que esta información ayude a otros.