RESTEasy Client + NoSuchMethodError

Sto cercando di scrivere un semplice client RESTEasy. Di seguito è riportato un codice di esempio:

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); 

Ottengo eccezione alla riga:

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

Vedo i seguenti errori nella mia console:

 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) 

Ho aggiunto la dipendenza client restiey in pom.xml come:

   org.jboss.resteasy resteasy-client 3.0.8.Final  

Il mio codice è distribuito su JBOSS EAP 6.1. La versione di JDK è 1.7.

Aggiornamento: ho anche provato ad aggiungere una dipendenza da jax-rs a rest nel mio pom. Ho anche verificato se è abilitato ResteasyProviderFactory aggiungendo le seguenti righe nel mio web.xml:

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

Si prega di trovare sotto lista di dipendenze 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   

Ma non funziona.

Dall’eccezione, non sono in grado di capire cosa manca. Non sono in grado di trovare riferimenti per questo problema su SO o su altri forum. Per favore fatemi sapere se avete già visto questo problema in precedenza e sapete come risolverlo. Grazie.


Aggiornamento dell’11 giugno 2014:

Dopo aver fatto riferimento a questo blog e escludendo alcuni moduli restusy e jackson, ho provato a creare jboss-deployment-structure.xml e tenerlo nella cartella META-INF nel mio progetto EJB. Questo ha risolto il mio problema di NoSuchMethodError per “org.jboss.resteasy.spi.ResteasyProviderFactory. (Lorg / jboss / resteasy / spi / ResteasyProviderFactory;)”. La struttura del mio jboss-deployment-structure.xml è:

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

Ma ora vedo un’eccezione simile per altri metodi:

 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:] 

E vedo questa eccezione alla linea:

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

La cosa strana è che, quando controllo “response.readEntity (String.class)”, durante il debug, posso vedere il valore String. Ma quando provo ad andare al passo successivo, vedo questo errore. Puoi per cortesia guidarmi, quale potrebbe essere il problema?

Ulteriore aggiornamento:

Ho fatto riferimento a questo tracker dei problemi JBOSS . Ma era correlato a WildFly e non al server EAP. Ci chiede di escludere il modulo “javaee-api”. Ho provato ad escludere il modulo “javaee-api”, ma non funziona.

Questi problemi sono causati dalla diversa versione dell’implementazione di Resteasy Client tra l’app e i moduli EAP di Jboss. Stai usando la versione più recente di jaxrs-client, ma JBoss EAP 6.3.0 usa una versione molto vecchia (resteasy-jaxrs-2.3.8.Final-redhat-3).

Basta scaricare l’ultimo pacchetto di implementazione di JBoss Resteasy (in questo modo: resteasy-jboss-modules-3.0.9.Final.zip) e decomprimere nella cartella Moduli EAP sostituendo i file esistenti modules.xml e aggiungendo nuovi giare. Ricordare sostituire tutti i JARS dallo ZIP (non solo resteasy-jaxrs).

Alla fine, dopo aver sbattuto la testa per un paio di giorni, ho potuto risolvere questi problemi.


Soluzione per il problema 1:

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

Soluzione: ho risolto questo problema, aggiungendo altri moduli resteasy nell’elenco di esclusione all’interno di jboss-deployment-structure.xml. Il mio attuale stato di jboss-deployment-structure.xml è il seguente:

                                                             

Credo che avrebbe potuto funzionare semplicemente escludendo i moduli “org.jboss.resteasy.resteasy-jaxrs” e “org.jboss.resteasy.resteasy-cdi”. Ma non ho provato oltre perché ho affrontato un altro problema. Puoi provare rimuovendo le esclusioni non necessarie.

Soluzione per il problema 2:

Errore: “Causato da: java.lang.NoSuchMethodError: javax.ws.rs.core.Response.readEntity (Ljava / lang / Class;) Ljava / lang / Object;”

Soluzione: JBOSS EAP 6.1, è fornito in bundle con distribuzione resteasy predefinita. Ho scaricato l’ultima implementazione jax-rs di resteasy (resteasy-jaxrs-3.0.7.Final-all.zip) dalla posizione .

Viene fornito con il file zip chiamato resteasy-jboss-modules-3.0.7.Final.zip. Decomprimere questo file all’interno della directory modules / system / layers / base / della distribuzione JBoss EAP 6.1. Questo sovrascriverà alcuni dei file esistenti lì. Questo risolverà il secondo problema.

Spero che questa informazione possa aiutare gli altri.