Publicación del servicio web JAX-WS con Guice en una aplicación Servlet

Actualmente estamos portando una aplicación JBoss EJB existente a una solución de servlet puro que se supone que se ejecuta en un Jetty (actualmente estamos usando la versión 6, pero la versión es en su mayoría irrelevante) y que usa Guice para la inyección de dependencia y AOP. A pesar de la enorme complejidad, hemos sido bastante exitosos hasta ahora. La capa de persistencia y la mayoría de nuestros servicios están en funcionamiento, incluidos los servicios REST de JAX-RS.

Sin embargo, cuando comenzamos a portar nuestros servicios de SOAP JAX-WS existentes, tuvimos dificultades. Ya pasamos aproximadamente un día buscando en la web y parece que muchas personas se encontraron con los mismos problemas hace años. Sin embargo, nadie parece ofrecer una buena solución.

Más detalles sobre nuestra arquitectura.

Estamos usando unGuiceServletContextListener para crear nuestro inyector global que está configurado con todos los módulos. Es vital que solo tengamos un inyector porque necesitamos apoyar a los singletons.

Por lo que sabemos, la implementación concreta de JAX-WS no es relevante. Actualmente estamos experimentando con Metro, pero probablemente podríamos usar Apache-CXF.

Enfoques evaluados hasta el momento.

Este post de stackoverflow sugiere crear el servicio manualmente y luego publicarlo en Endpoint.publish (...). Sin embargo, esta no es una solución aceptable, ya que no utiliza el contenedor Jetty, sino que inicia su propio servidor HTTP.

final Module module = new HelloModule();
final Injector injector = Guice.createInjector(module);
final HelloService helloService = injector.getInstance(HelloService.class);
Endpoint.publish("http://localhost:8080/helloService", helloService);

El mismo post de stackoverflow. también sugiere usarIntegración JAX-WS Guice que en general suena como un buen enfoque. Sin embargo, esta solución crea su propio inyector y, por lo tanto, es incompatible con nuestro enfoque basado en GuiceServletContextListener. Encontramoseste hilo donde se discute exactamente el mismo problema, pero nadie parece tener una solución.

También miramosguice-cxf que se supone hace que la integración de Apache-CXF en las aplicaciones de Guice sea fácil, pero hasta donde entendemos la descripción, esto solo funciona para los servicios REST de JAX-RS hasta el momento.

Para no perder más tiempo en esto e intentar reinventar la rueda, publicamos esta pregunta aquí con la esperanza de que alguien más haya pasado por este infierno y pueda darnos algunos consejos o incluso algunos ejemplos prácticos. Cualquier ayuda es muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta