0

我们使用 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,因此我不想用...

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

请指教。

谢谢

4

2 回答 2

0

好吧,您可以注入一个包含 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();
}
}
于 2012-06-07T09:10:59.383 回答
0

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

于 2012-11-16T14:24:34.883 回答