RESTEasy Client + NoSuchMethodError
Je suis en train d'écrire de simples RESTEasy client. Donnée ci-dessous est un exemple de code:
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);
- Je obtenir de l'exception à la ligne:
Client client = ClientBuilder.newBuilder().build();
Je vois des erreurs suivantes dans ma console:
16:07:57,678 ERROR [stderr] (http-localhost/127.0.0.1:8080-1) java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.<init>(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.<init>(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)
J'ai ajouté resteasy client dépendance pom.xml comme:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.8.Final</version>
</dependency>
Mon code est déployé sur JBOSS EAP 6.1. La version de JDK 1.7.
Mise à jour:
J'ai aussi essayé d'ajouter resteasy jax-rs de dépendance dans mon pompon. J'ai aussi vérifié si ResteasyProviderFactory est activée par l'ajout des lignes suivantes dans mon web.xml:
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
Veuillez trouver ci-dessous la liste des dépendances de maven:
<dependencies>
<dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.0.8.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.8.Final</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Mais il ne marche pas.
De l'exception, je ne suis pas en mesure de comprendre ce qui est manquant. Je ne suis pas en mesure de trouver des références pour ce problème sur ou tout autres forums. S'il vous plaît laissez-moi savoir, si vous avez vu cette question tout à l'heure et vous savez comment résoudre ce problème.
Merci.
Mise À Jour Le 11 Juin 2014:
Après en se référant ce blog et par l'exclusion de certains resteasy et jackson modules, j'ai essayé de créer similaires jboss-deployment-structure.xml et de les garder dans META-INF dans le dossier mon EJB projet. Cela a résolu mon problème de NoSuchMethodError pour "org.jboss.resteasy.le spi.ResteasyProviderFactory.(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)" . La Structure de ma jboss-deployment-structure.xml est:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclude-subsystems>
<subsystem name="resteasy"/>
</exclude-subsystems>
<exclusions>
<!-- <module name="org.apache.log4j" /> -->
<module name="org.apache.commons.logging"/>
<module name="org.jboss.as.jaxrs"/>
<module name="org.jboss.resteasy.resteasy-jaxrs"/>
<module name="org.jboss.resteasy.resteasy-cdi"/>
<!-- <module name="org.jboss.resteasy.jackson-provider"/>
<module name="org.jboss.resteasy.resteasy-atom-provider"/>
<module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
<module name="org.jboss.resteasy.resteasy-jaxb-provider"/>
<module name="org.jboss.resteasy.resteasy-jettison-provider"/>
<module name="org.jboss.resteasy.resteasy-jsapi"/>
<module name="org.jboss.resteasy.resteasy-multipart-provider"/>
<module name="org.jboss.resteasy.resteasy-yaml-provider"/>
<module name="org.codehaus.jackson.jackson-core-asl"/>
<module name="org.codehaus.jackson.jackson-jaxrs"/>
<module name="org.codehaus.jackson.jackson-mapper-asl"/>
<module name="org.codehaus.jackson.jackson-xc"/>
<module name="org.codehaus.jettison"/>
<module name="javax.ws.rs.api"/> -->
</exclusions>
</deployment>
</jboss-deployment-structure>
Mais maintenant je vois l'exception similaire pour une autre méthode:
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:]
Et je vois cette exception à la ligne:
String value = response.readEntity(String.class);
Bizarre, c'est que, quand j'ai inspecter "réponse.readEntity(String.class)", pendant le débogage, je peux voir la Chaîne de valeur. Mais quand j'essaie d'aller à l'étape suivante de la ligne, je vois cette erreur. Pouvez-vous svp me guider, ce qui pourrait être le problème?
Plus de mise à jour:
J'ai évoqué ce JBOSS issue tracker. Mais elle était liée à WildFly, et pas de serveur EAP. Il nous demande d'exclure le module "javaee-api". J'ai essayé à l'exclusion des "javaee-api" module, mais il ne fonctionne pas.
resteasy-client
dans le classpath ou vous avez des différences entre les compiler un versions du moteur d'exécution.J'ai essayé de commenter resteasy-client de la dépendance à partir de mon pom.xml. Il a donné les erreurs de compilation. Donc je suppose qu'il n'y a qu'une seule version de resteasy-client jar dans le classpath.
sur le temps de compilation et de l'exécution? existe-il plusieurs versions dans le classpath de votre jboss?
Si j'essaie de supprimer resteasy-client de dépendance eclipse compains en disant qu'il n'est pas en mesure de trouver des classes comme ClientBuilder. Et il n'y a pas d'autres bocal de les importer de.
J'ai mis à jour question plus loin avec plus d'analyse et l'état actuel. S'il vous plaît laissez-moi savoir, si vous avez une idée sur la cause exacte.
OriginalL'auteur user613114 | 2014-06-10
Vous devez vous connecter pour publier un commentaire.
Ces problèmes sont jetés à cause de différentes version de Resteasy mise en œuvre du Client entre votre application et Jboss EAP modules. Vous utilisez la version la plus récente de jaxrs-client, mais JBoss EAP 6.3.0 utilisation très ancienne version (resteasy-jaxrs-2.3.8.Final-redhat-3).
Il suffit de télécharger la dernière pack de JBoss Resteasy de mise en œuvre (sometking comme ceci: resteasy-jboss-modules-3.0.9.Final.zip) et décompressez-le dans le PAE le dossier des Modules de remplacer les fichiers existants modules.xml et l'ajout de nouveaux pots. N'oubliez pas de remplacer tous les POTS de la ZIP (pas seulement resteasy-jaxrs).
OriginalL'auteur Wojciech Szymski
Enfin après s'être cogner ma tête depuis quelques jours, j'ai pu résoudre ces problèmes.
Solution pour le problème 1:
Solution: j'ai résolu ce problème, en ajoutant plus de resteasy modules dans la liste d'exclusion à l'intérieur de jboss-deployment-structure.xml. Mon état actuel des jboss-deployment-structure.xml est que:
Je crois, il aurait pu simplement à l'exclusion des modules "org.jboss.resteasy.resteasy-jaxrs" et "org.jboss.resteasy.resteasy-cdi". Mais je n'ai pas essayé plus loin comme je l'ai confrontée à un autre problème. Vous pouvez essayer en supprimant des nations unies-exclusions nécessaires.
Solution pour la question 2:
Solution: JBOSS EAP 6.1, est livré par défaut avec resteasy de distribution. J'ai téléchargé la dernière resteasy jax-rs de mise en œuvre (resteasy-jaxrs-3.0.7.Final-all.zip) de emplacement.
Il est livré avec zip fichier appelé resteasy-jboss-modules-3.0.7.Final.zip. Décompressez ce fichier à l'intérieur des modules/system/couches/base/répertoire JBoss EAP 6.1 distribution. Cela permettra de remplacer certains fichiers existants. Cela permettra de résoudre le deuxième problème.
Espère que cette information pourrait aider les autres.
Tout le monde est d'avoir des problèmes en ce qui concerne le serveur JBoss. Alors que mon problème est avec l'exécution d'un test d'intégration depuis Eclipse.
OriginalL'auteur user613114