gpt4 book ai didi

jetty - 在 Servlet 应用程序中使用 Guice 发布 JAX-WS Web 服务

转载 作者:行者123 更新时间:2023-12-04 05:02:54 27 4
gpt4 key购买 nike

我们目前正在将现有的 JBoss EJB 应用程序移植到一个纯 servlet 解决方案,该解决方案应该在 Jetty 中运行(我们目前使用的是版本 6,但版本大多无关紧要)并且使用 Guice 进行依赖注入(inject)和 AOP。尽管存在巨大的复杂性,但到目前为止,我们已经相当成功。持久层和我们的大多数服务都已启动并正在运行,包括 JAX-RS REST 服务。

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

有关我们架构的更多详细信息

我们正在使用 GuiceServletContextListener创建我们的全局注入(inject)器,它配置了所有模块。至关重要的是,我们只有一个 Injector,因为我们需要支持单例。

据我们所知,具体的 JAX-WS 实现并不相关。我们目前正在试验 Metro,但我们也可以使用 Apache-CXF。

迄今为止评估的方法

This stackoverflow post建议手动创建服务,然后通过 Endpoint.publish(...) 发布它。但是,这不是一个可接受的解决方案,因为它不使用 Jetty 容器,而是启动自己的 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);

The same stackoverflow post还建议使用 JAX-WS Guice integration一般来说,这听起来像是一个好方法。但是,此解决方案创建了自己的 Injector,因此与我们基于 GuiceServletContextListener 的方法不兼容。我们找到了 this thread讨论了完全相同的问题,但似乎没有人有解决方案。

我们还查看了 guice-cxf这应该使 Apache-CXF 轻松集成到 Guice 应用程序中,但据我们理解的描述,目前这仅适用于 JAX-RS REST 服务。

为了不浪费更多时间并试图重新发明轮子,我们在这里发布了这个问题,希望其他人已经经历过这个 hell ,可以给我们一些指示,甚至可能是一些工作示例。任何帮助是极大的赞赏。

最佳答案

我们最终通过扩展 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,然后可以使用 ServletModule 绑定(bind)它。 :
public class SomeModule extends ServletModule {
@Override
protected void configureServlets() {
serve("/some/path*").with(SoapServlet.class);
}
}

关于jetty - 在 Servlet 应用程序中使用 Guice 发布 JAX-WS Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15901617/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com