【问题标题】:JAX-WS Webservice in GUICE 3.0 frameworkGUICE 3.0 框架中的 JAX-WS Web 服务
【发布时间】:2012-05-23 14:44:30
【问题描述】:

我们使用 GUICE 框架作为服务层的一部分。现在需要构建 JAX-WS Web 服务。我们使用 JDK 1.6 JAX-WS API 构建了 Web 服务。但是现在,我们无法使用任何 GUICE 资源,因为我们的 Web 服务不是 guice 管理的。

我们使用的是 Guice 3.0。我们如何做到这一点?

尝试了以下链接 http://jax-ws-commons.java.net/guice/,不过没搞定,终于在某个论坛知道这个只兼容Guice 2.0。

尝试的另一种方法是 http://developian.blogspot.in/2008/11/google-guice-and-jax-ws.html, 但这在内部将开始使用一些访问受限的 sun API,因此我不想使用...

现在最好的方法或替代任何其他解决方案是什么。

请指教。

谢谢

【问题讨论】:

    标签: jax-ws guice


    【解决方案1】:

    好吧,您可以注入一个包含 guice 注入器的 EJB。这意味着,如果您使用 Java EE,则可以使用 EJB。那个 EJB 应该是一个 Singleton 并且只处理持有注入器。如果你想注入一些东西,这是你得到注入器的 bean。当然,您必须在第一次通过 Guice.createInjector() 调用它时创建注入器。当拥有注入器时,使用注入器的方法 getInstance(Class clazz) 注入其他类是没有问题的。您必须仅在您第一次调用使用注入的类时在您的 Web 服务中访问注入器。

    否则,您可以在 Web 服务中使用静态注入器。也许那不会那么干净,但它会起作用。这需要您在构造函数中创建注入器。例如。在一个抽象服务类中,所有的 web 服务都依赖。然后您就可以访问服务中的注入器并执行与上述相同的操作。

    @Singleton
    public class InjectorHolder
    {
    private Injector injector;
    
       public GuiceInjectorHolder()
       {
            injector = Guice.createInjector(new Module())
       }
    }
    
        public Injector getInjector()
        {
        return injector;
        }
    
    }
    
    public abstract class AbstractService
    {
    @EJB
    InjectorHolder holder;
    
    public void method()
    {
    holder.getInjector().getInstance(clazz).doSomething();
    }
    }
    

    【讨论】:

    • 对不起..我没有明白你的意思。能否请您详细说明。
    【解决方案2】:

    您是否尝试过创建自己的 Servlet 并在 loadBus() 方法中绑定您的服务?解决方案在这里描述: CXF and Google Guice using JAX-RS + JAX-WS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 2015-12-24
      相关资源
      最近更新 更多