出版JAX-WS web服务与吉斯在Servlet中的应用(Publishing JAX-WS We

2019-08-20 23:06发布

目前,我们正在移植现有的JBoss的EJB应用程序这应该在码头上运行一个纯粹的servlet解决方案(我们目前使用的版本6,但版本主要是无关紧要的),并且使用吉斯依赖注入和AOP。 尽管巨大的复杂性,我们已经成功地挺至今。 持久层我们的服务最,并启动和运行,包括JAX-RS REST服务。

然而,当我们开始我们的移植现有的JAX-WS SOAP服务,我们陷入了困境。 我们已经花了大约一天的时间在网上搜索,似乎有很多人年前碰到了同样的问题。 然而,似乎没有人提供了一个很好的解决方案。

关于我们的架构更多细节

我们使用一个GuiceServletContextListener创建,其配置与所有模块全球注射器。 至关重要的是,我们只有一个喷油器,因为我们需要支持单身。

据我们所知,具体的JAX-WS实现是不相关的。 目前,我们正在与地铁试验,但我们很可能只是以及使用Apache的CXF。

方法到目前为止评估

这个计算器后提示手动创建的服务,然后通过Endpoint.publish(...)出版它。 然而,这不是一个可接受的解决方案,因为它不使用码头集装箱,而是开始了自己的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);

同样计算器后也建议使用JAX-WS吉斯整合这是一个很好的办法一般的声音。 然而,这种解决方案创建自己的喷油器,因此我们GuiceServletContextListener基础的方法不兼容。 我们发现这个线程正是同样的问题进行了讨论,但似乎没有人有一个解决方案。

我们也看了吉斯- CXF这是应该做Apache的CXF融入吉斯应用程序的轻松,但据我们了解的描述,这只适用于JAX-RS REST服务至今。

为了不浪费这更多的时间,并试图重塑我们希望在这里张贴了这个问题,别人已经讨论过了地狱,可以给我们一些指点,或者甚至一些工作实例的车轮。 任何帮助是极大的赞赏。

Answer 1:

最后,我们通过扩展解决它相当漂亮CXFNonSpringServlet 。 您只需覆盖loadBus()方法,在这里你可以配置你所有的服务端点。

@Singleton
public class SoapServlet extends CXFNonSpringServlet {
    private static final long serialVersionUID = 1L;

    private final SomeFacade someFacade;

    @Inject
    SoapMachineServlet(final SomeFacade someFacade) {
        this.someFacade = someFacade;
    }

    @Override
    public void loadBus(ServletConfig servletConfig) throws ServletException {
        super.loadBus(servletConfig);

        Bus bus = getBus();
        BusFactory.setDefaultBus(bus);
        Endpoint.publish("/SomeFacade", someFacade);
    }
}

类本身是一个简单的一个servlet,然后可以使用一个约束的servlet :

public class SomeModule extends ServletModule {
    @Override
    protected void configureServlets() {
        serve("/some/path*").with(SoapServlet.class);
    }
}


文章来源: Publishing JAX-WS Webservice with Guice in a Servlet Application