Ich muss einen REST-Client in eine vorhandene OSGi-Anwendung integrieren, die mit Apache Felix implementiert wurde. Der REST-Dienst basiert auf der RESTeasy-Implementierung (Version 2.3.2.Final) von JAX-RS. Ich habe ein separates Paket mit den Abhängigkeiten der Clients erstellt, die erforderlichen RESTeasy-Pakete exportiert und in das Bundle importiert, in dem der Client verwendet wird, aber leider kann ich nicht innerhalb des OSGi-Kontexts arbeiten.REST-Client innerhalb der OSGi-Anwendung
Ich habe zwei verschiedene Ansätze ausprobiert. Zunächst man die generische ClientRequest mit:
ClientRequest request = new ClientRequest(MyService.URL_TEST+"/stats");
request.body(javax.ws.rs.core.MediaType.APPLICATION_XML, stats);
ClientResponse<String> response = request.post(String.class);
Der Fehler, den ich in diesem Fall erhalten, ist ziemlich seltsam:
[java] java.lang.RuntimeException: java.lang.ClassCastException:
org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor cannot be cast to
org.jboss.resteasy.client.ClientExecutor
, wo ich es sicher bekannt ist, dass ApacheHttpClient4Executor die ClientExecutor-Schnittstelle implementiert.
Wenn ich versuche, meine eigenen REST-Client-Wrapper um Resteasy wie folgt zu verwenden:
MyService myService = MyServiceClient.getInstance();
myService.saveStatistics(stats);
ich eine andere Ausnahme erhalten:
[java] java.lang.LinkageError: ClassCastException: attempting to
castjar:file:/D:/Development/Eclipses/eclipse_4.2_j2ee_x64/lib/jaxrs-api-2.3.2.Final.jar
!/javax/ws/rs/ext/RuntimeDelegate.classtobundle:
//78.0:1/javax/ws/rs/ext/RuntimeDelegate.class
Soweit ich verstehe, hat die LinkageError höchstwahrscheinlich zu tun mit der Art und Weise, wie RESTeasy RuntimeDelegate mit Hilfe einiger Classloader-Tricks initialisiert, die wahrscheinlich unter die Einschränkungen des OSGi-Frameworks fallen. Ich habe den Verdacht, dass die erwähnte java.lang.ClassCastException dieselbe Quelle hat.
Gibt es eine Möglichkeit, RESTeasy in OSGi zu verwenden?
PS: Diskussion über ein ähnliches Problem mit Resteasy, aber außerhalb von OSGi: java.lang.LinkageError: ClassCastException
Update: das sind die Bibliotheken in restclient Bundle enthalten: Aktivierung-1.1.jar commons-codec- 1.2.jar commons-httpclient-3.1.jar commons-io-2.1.jar Commons-Protokollierung-1.0.4.jar flexjson-2.1.jar httpclient-4.1.2.jar httpcore-4.1.2.jar javassist-3.12.1 .ga.jar jaxb-api-2.2.3.jar jaxb-impl-2.2.4.jar jaxrs-api-2.3.2.Finale.jar jcip-annotations-1.0.jar jettison-1.3.1.jar jsr250-api -1.0.jar junit-4.10.jar log4j-1.2.14.jar resteasy-jaxb-provider-2.3.2.Final.jar resteasy-jaxrs- 2.3.2.Final.jar resteasy-jettison-provider-2.3.2.Final.jar scannotation-1.0.3.jar slf4j-api-1.6.4.jar slf4j-log4j12-1.6.4.jar myservice-common-0.1 .0.3.jar my-service-client-0.1.0.3-SNAPSHOT.jar stax-api-1.0-2.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.2.jar
Dies sind die Exporte aus dem Restclient-Bundle: javax.ws.rs, javax.ws.rs.ext, javax.ws.rs.core, org.jboss.resteasy.client, org.jboss.restasy.client. cache, org.jboss.resteasy.client.extraktoren, org.jboss.resteasy.client.marshallers, org.jboss.restasy.client.core.executors, javax.xml.bind.annotation, org.jboss.resteasy.plugins. Anbieter, org.jboss.resteasy.plugins.providers.jaxb, org.jboss.resteasy.spi
Welche Gläser sind in Ihrem Kundenpaket enthalten? – jtahlborn
die bisher: myservice-client-0.1.0.3-SNAPSHOT.jar myservice-common-0.1.0.3.jar junit-4.10.jar Javassist-3.12.1.GA.jar jcip-Annotationen-1.0.jar jsr250-api-1.0.jar Resteasy-jaxrs-2.3.2.Final.jar jaxrs-api-2.3.2.Final.jar aktivierungs 1.1.jar commons-Httpclient-3.1.jar –
Und innerhalb von mein restclient bundle Ich habe versucht, javax.ws.rs, javax.ws.rs.ext, javax.ws.rs.core, org.jboss.resteasy.client, org.jboss.resteasy.client.core zu exportieren .executors abgesehen von meinen eigenen Klassen von myservice-common –