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

2023-12-01

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

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

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

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

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

迄今为止评估的方法

这个 stackoverflow 帖子建议手动创建服务,然后通过 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);

同一个 stackoverflow 帖子还建议使用JAX-WS Guice 集成总的来说,这听起来是一个不错的方法。然而,这个解决方案创建了自己的注入器,因此与我们基于 GuiceServletContextListener 的方法不兼容。我们发现这个线程讨论完全相同的问题,但似乎没有人找到解决方案。

我们还看了吉斯-CXF这应该使 Apache-CXF 集成到 Guice 应用程序中变得容易,但据我们了解描述,到目前为止这只适用于 JAX-RS REST 服务。

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


我们最终通过扩展非常优雅地解决了这个问题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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Servlet 应用程序中使用 Guice 发布 JAX-WS Web 服务 的相关文章

随机推荐

  • 主干:管理模板

    我正在为骨干应用程序使用下划线模板引擎 截至目前 我有超过 15 个模板 它变得很难维护 到目前为止 我看到的大多数管理模板的解决方案最终都需要它们是 js 文件 这也是一个令人头疼的问题 我更喜欢它们是用于编辑目的的 html 文件 我查
  • 在 ggplot2 之上覆盖基础 R 图形

    我在 ggplot 中有一个绘图 我希望覆盖我用基本 R 代码创建的地图图例 我不知道如何将基本 R 图形覆盖在 ggplot 之上 非常感谢您的帮助 Currently I have a ggplot legend that looks
  • Outlook 2010 - VBA - 在 ItemSend 中设置密件抄送

    Program 2010年展望 OS Win8 VBA技能 新手 Notes 如果我删除以下选项 这将非常有效 Private Sub Application Item Send 3 If Item SendUsingAccount Acc
  • Java Swing - JFreeChart 应用程序运行缓慢

    我创建的 JFreeChart 程序可以 移动样条线的点 不允许交叉黑色样条线 边界样条线 实时创建新样条线 作为 Grapher 鼠标滚轮缩放 为了向数据集添加新系列 我使用此函数 public static XYSeriesCollec
  • jQuery/Javascript 查找并替换所有实例[重复]

    这个问题在这里已经有答案了 可能的重复 用 Javascript jQuery 中的正则表达式替换模式的所有实例 如何使用 jQuery 为特定单词的所有实例的 parts 设置样式 假设我有代码 div class replace i B
  • iOS11 UIBarButtonItem 不工作

    我有一个应用程序已在商店中使用 我正在尝试为 iOS11 版本做好准备 但遇到了一个恼人的问题 没有任何一个UIBarButtonItem应用程序中的s工作正常 leftBarButtonItems 是可单击的 但单击区域稍微位于项目的右侧
  • POST 期间 REST Web 服务中的 HTTP 400 错误,FormParam 包含自己的对象(例如实体)

    对于 REST 服务中的订购流程 我必须将 文章 列表从客户端发送到服务器 这些文章对象是自制的实体类型 我已经发现发送 STRING 或 INTEGER 对象的列表确实有效 通过 FormParam 发送 但是 一旦我尝试发送我自己的对象
  • Karate Http请求有条件地添加参数

    有没有办法有条件地添加参数 我有以下请求 Given url http myURL And param time time When method DELETE Then status 200 例如 如果时间为 未定义 或 空 则完全忽略参
  • 我应该在哪里放置图像以使用它来创建新的 Swing ImageIcon 对象?

    我正在研究 Java Swing 库 但遇到了问题 在示例程序中 它创建了一个图像图标这条线的对象 ImageIcon icon new ImageIcon getClass getResource exit png 当我执行我的程序时 我
  • 使用 python 从 Twitter 数据中删除用户名

    我使用 python 从 Twitter 获取了一些数据 现在我想对其进行预处理 如果推文的用户名位于两个单词之间并且它们之间没有空格 如何删除用户名 我想保留文字 只删除用户名 例如 文本文件 你好 rahul你能帮我吗 是的 tanya
  • 将 xml 文档作为参数传递给 xsl

    我读了很多帖子并尝试了很多东西 但仍然无法让 xsl 找到参数中的值 我从java的sun xalan开始 但从未让它工作过 所以我切换到saxon 但无济于事 我想用 xls 将两个 xml 文档合并为一个 永远不会在文件系统上 这是针对
  • 包含在 linq 查询中

    您好 我正在使用实体框架和 LinQ 我有一个名为 users 的表对象 我有一个名为 userids 的列表 我必须找到 ids 包含在字符串中的所有用户 我必须执行以下操作 select from users where userid
  • Hibernate(和 JPA)标准表达能力的限制?

    我在层次结构中有 4 个实体 如下所示 Parent Child1 Child2 Child3 我有兴趣检索 Child1 和 Child2 的所有实例 但不是 Child3 实例 其条件为单一查询 使用 HQL 或 JPQL 很容易做到这
  • Symfony 3.0 嵌套实体不保存

    所以我有一个实验实体 其中有许多 RNASeq 实体 然而 当我尝试使用 RNASeq 条目保存实验时 通过newAction 仅保存实验部分 我的控制器如下
  • Godaddy 服务器上的 C# 电子邮件发送错误

    我有一个托管在 Godaddy 服务器上的 Web 应用程序 我遇到了发送邮件失败错误 我把我的代码放在这里 public void Mailing MailMessage message new MailMessage try MailA
  • jQuery 日期/时间选择器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我一直在寻找一个像样的 jQuery 插件 可以处理日期和时间 核心用户
  • Webdriver:文件上传

    有没有办法与 webdriver 中的文件上传框交互 放置路径的表单字段是只读的 因此我无法写入该字段 您无需注入 JavaScript 即可完成此操作 您只需要找到表单字段并在其中输入即可 类似于 使用 Ruby API driver f
  • 如何通过request.user过滤django-tastypie的ToManyField?

    我正在为 django 应用程序使用 tastypie 构建一个 API 以获取基于用户的数据 资源是这样的 class PizzaResource ModelResource toppings fields ToManyField pro
  • iPhone:“无法识别的选择器发送到实例”

    我尝试根据 SegmentSwitcher 的状态将两个不同的视图设置为子视图 if sender selectedSegmentIndex gameIndex if self gameView view nil GameView game
  • 在 Servlet 应用程序中使用 Guice 发布 JAX-WS Web 服务

    我们目前正在将现有的 JBoss EJB 应用程序移植到纯 servlet 解决方案 该解决方案应该在 Jetty 中运行 我们当前使用版本 6 但该版本大多不相关 并使用 Guice 进行依赖注入和 AOP 尽管存在巨大的复杂性 但到目前