Necesito integrar un cliente REST en una aplicación OSGi existente implementada con Apache Felix. El servicio REST se basa en la implementación RESTeasy (versión 2.3.2.Final) de JAX-RS. Creé un paquete separado con las dependencias de los clientes, exporté los paquetes RESTeasy necesarios y los importé en el paquete donde se usa el cliente, pero desafortunadamente no puedo hacerlo funcionar dentro del contexto OSGi.Cliente REST dentro de la aplicación OSGi
Intenté dos enfoques diferentes. Primero mediante el ClientRequest genérica:
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);
El error que consigo en este caso es bastante raro:
[java] java.lang.RuntimeException: java.lang.ClassCastException:
org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor cannot be cast to
org.jboss.resteasy.client.ClientExecutor
donde se sabe con seguridad que implementa la interfaz ApacheHttpClient4Executor ClientExecutor.
Cuando trato de usar mi propio envoltorio cliente REST alrededor RESTeasy así:
MyService myService = MyServiceClient.getInstance();
myService.saveStatistics(stats);
me sale una excepción diferente:
[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
Por lo que yo entiendo, el LinkageError muy probablemente tiene que ver con la forma en que RESTeasy inicializa RuntimeDelegate usando algunos trucos de cargador de clases, que probablemente caigan bajo las restricciones del marco OSGi. Tengo la sospecha de que la java.lang.ClassCastException mencionada primero tiene la misma fuente.
¿Hay alguna forma de que RESTeasy funcione dentro de OSGi?
PS: discusión acerca de un problema similar con RESTeasy, pero fuera de OSGi: java.lang.LinkageError: ClassCastException
Actualización: estas son las bibliotecas incluye en paquete restclient: de activación-1.1.jar Commons-codec- 1.2.jar commons-httpclient-3.1.jar commons-io-2.1.jar commons-logging-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.Final.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
Estas son las exportaciones del paquete del cliente reclinable: javax.ws.rs, javax.ws.rs.ext, javax.ws.rs.core, org.jboss.resteasy.client, org.jboss.resteasy.client. cache, org.jboss.resteasy.client.extractors, org.jboss.resteasy.client.marshallers, org.jboss.resteasy.client.core.executors, javax.xml.bind.annotation, org.jboss.resteasy.plugins. proveedores, org.jboss.resteasy.plugins.providers.jaxb, org.jboss.resteasy.spi
¿Qué jarras están incluidas en su paquete de cliente? – jtahlborn
los hasta ahora: myservice-cliente-0.1.0.3-SNAPSHOT.jar myservice-comunes-0.1.0.3.jar junit-4.10.jar javassist-3.12.1.GA.jar JCIP-anotaciones-1.0.jar jsr250-API-1.0.jar resteasy-jaxrs-2.3.2.Final.jar jaxrs-api-2.3.2.Final.jar activación de 1.1.jar Commons-httpclient-3.1.jar –
Y dentro de mi paquete de repositorio He intentado exportar javax.ws.rs, javax.ws.rs.ext, javax.ws.rs.core, org.jboss.resteasy.client, org.jboss.resteasy.client.core .executores aparte de mis propias clases de myservice-common –