RESTEasy Client + NoSuchMethodError
Ich versuche einfach schreiben RESTEasy-client. Nachstehend ist Beispiel-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);
Bekomme ich exception in Zeile:
Client client = ClientBuilder.newBuilder().build();
Sehe ich folgenden Fehler in meiner Konsole:
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)
Habe ich Hinzugefügt, resteasy-client-Abhängigkeit in pom.xml als:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.8.Final</version>
</dependency>
Mein code ist Bereitstellung auf JBOSS EAP 6.1. JDK-version 1.7.
Update:
Ich habe auch versucht, indem resteasy jax-rs Abhängigkeit in meiner pom. Ich habe auch überprüft, wenn ResteasyProviderFactory aktiviert ist, durch hinzufügen der folgenden Zeilen in mein web.xml:
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
Unten finden Sie eine Liste von maven-Abhängigkeiten:
<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>
Aber es funktioniert nicht.
Exception, ich bin nicht in der Lage, um herauszufinden, was fehlt. Ich bin nicht in der Lage zu finden, alle Verweise für dieses Problem auf SO oder anderen Foren. Bitte lassen Sie mich wissen, wenn Sie haben gesehen, dass dieses Problem früher und Sie wissen, wie es zu lösen ist.
Danke.
Update 11. Juni 2014:
Nachdem er dieser blog und durch den Ausschluss von einigen resteasy und jackson Module, ich habe versucht, ähnliche jboss-deployment-structure.xml und halten es im META-INF-Ordner in meinem EJB-Projekt. Dies löste mein Problem der NoSuchMethodError für "org.jboss.resteasy.spi.ResteasyProviderFactory.(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)" . Struktur meines jboss-deployment-structure.xml ist:
<?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>
Aber jetzt sehe ich ähnlich Ausnahme für die andere Methode:
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:]
Und ich sehe diese Ausnahme in Zeile:
String value = response.readEntity(String.class);
Seltsame Sache ist, dass, wenn ich inspizieren "Antwort.readEntity(String.class)", beim Debuggen kann ich sehen, der String-Wert. Aber wenn ich versuche, gehen Sie zum Schritt zur nächsten Zeile, sehe ich diese Fehler. Können Sie bitte führe mich, was könnte das Problem sein?
Weiteres update:
Ich bezog mich auf diese JBOSS Issue-tracker. Aber es wurde im Zusammenhang mit WildFly, und nicht EAP-server. Er bittet uns um auszuschließen Modul "Java ee-api". Ich habe versucht, ohne "Java ee-api" - Modul aber es funktioniert auch nicht.
InformationsquelleAutor der Frage user613114 | 2014-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Probleme geworfen werden, verursachen andere version von Resteasy Client-Implementierung zwischen Ihrer app und Jboss EAP-Module. Sie verwenden die neueste version von jaxrs-client, aber JBoss EAP 6.3.0 verwenden sehr alte version (resteasy-jaxrs-2.3.8.Final-redhat-3).
Laden Sie einfach die Letzte Packung von JBoss Resteasy Umsetzung (sometking wie diese: resteasy-jboss-modules-3.0.9.Final.zip) und entpacken Sie in EAP-Module-Ordner ersetzen von vorhandenen Dateien modules.xml und neue Gläser. Denken Sie daran, ersetzen Sie alle GLÄSER aus der ZIP (nicht nur resteasy-jaxrs).
InformationsquelleAutor der Antwort Wojciech Szymski
Endlich nach schlug meinen Kopf für ein paar Tage, ich könnte diese Probleme lösen.
Lösung für Problem 1:
Lösung: ich dieses Problem behoben, indem mehr resteasy-Module in der Ausschluss-Liste inside jboss-deployment-structure.xml. Meine aktuelle Zustand des jboss-deployment-structure.xml ist wie:
Ich glaube, es könnte gearbeitet haben, indem Sie einfach ohne Module "org.jboss.resteasy.resteasy-jaxrs" und "org.jboss.resteasy.resteasy-cdi". Aber ich wollte nicht weiter probieren, da ich vor einem anderen Problem. Sie können versuchen, entfernen von un-nötig AUSSCHLÜSSE.
Lösung für Problem 2:
Lösung: JBOSS EAP 6.1, gebündelt mit Standard-resteasy distribution. Ich heruntergeladen neuesten resteasy jax-rs-Implementierung (resteasy-jaxrs-3.0.7.Final-all.zip) aus Lage.
Es kommt mit einer zip-Datei namens resteasy-jboss-modules-3.0.7.Final.zip. Entpacken Sie diese Datei in modules/system/Ebenen/base/- Verzeichnis des JBoss EAP 6.1-distribution. Dies zum überschreiben von vorhandenen Dateien gibt. Diese lösen die zweite Frage.
Hoffen, dass diese Informationen anderen helfen würde.
InformationsquelleAutor der Antwort user613114