Publikowanie Webservice JAX-WS z Guice w aplikacji Servlet

Obecnie przenosimy istniejącą aplikację JBoss EJB do rozwiązania czystego serwletu, które ma działać w Jetty (obecnie używamy wersji 6, ale wersja jest w większości nieistotna) i która wykorzystuje Guice do wstrzykiwania zależności i AOP. Pomimo ogromnej złożoności do tej pory byliśmy całkiem zadowoleni. Warstwa trwałości i większość naszych usług działa i działa, w tym usługi REST JAX-RS.

Jednak kiedy zaczęliśmy przenosić nasze istniejące usługi SOAP JAX-WS, napotkaliśmy trudności. Spędziliśmy już około dnia na przeszukiwaniu sieci i wydaje się, że wiele osób wpadło na te same problemy lata temu. Jednak nikt nie wydaje się oferować dobrego rozwiązania.

Więcej szczegółów na temat naszej architektury

UżywamyGuiceServletContextListener stworzyć nasz globalny wtryskiwacz, który jest skonfigurowany ze wszystkimi modułami. Ważne jest, abyśmy mieli tylko jeden wtryskiwacz, ponieważ musimy wspierać pojedyncze osoby.

O ile nam wiadomo, konkretna implementacja JAX-WS nie ma znaczenia. Obecnie eksperymentujemy z Metro, ale równie dobrze moglibyśmy używać Apache-CXF.

Dotychczasowe podejścia

Ten post stackoverflow sugeruje ręczne utworzenie usługi, a następnie opublikowanie jej przez Endpoint.publish (...). Nie jest to jednak rozwiązanie akceptowalne, ponieważ nie używa kontenera Jetty, ale uruchamia własny serwer 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);

Ten sam post stackoverflow sugeruje również użycieIntegracja JAX-WS Guice co ogólnie brzmi jak dobre podejście. Jednak to rozwiązanie tworzy własny wtryskiwacz i dlatego jest niezgodne z naszym podejściem opartym na GuiceServletContextListener. Znaleźliśmyten wątek gdzie dokładnie omawiany jest ten sam problem, ale wydaje się, że nikt nie ma rozwiązania.

Przyjrzeliśmy się takżeguice-cxf co ma ułatwić integrację Apache-CXF z aplikacjami Guice, ale o ile rozumiemy ten opis, działa to tylko w przypadku usług RAX JAX-RS.

Aby nie tracić na to więcej czasu i próbować odkryć koło na nowo, zamieściliśmy to pytanie w nadziei, że ktoś już przeszedł przez to piekło i może dać nam kilka wskazówek, a może nawet kilka przykładów. Każda pomoc jest bardzo mile widziana.

questionAnswers(1)

yourAnswerToTheQuestion