Jboss 将Guice注入JAX-WSPOJO
我正在使用JBoss7.1和Java1.6 我希望通过JAX-WS端点将服务与集成。使用Gunnar.Morling描述的拦截器模式,当使用无状态bean作为Web服务时,我能够正确地实例化GUI模块。然而,我不能用一个简单的POJO注释的Web服务来做同样的事情。这是否可能?是否有人找到了解决方法。以下是我迄今为止所做努力的总结Jboss 将Guice注入JAX-WSPOJO,jboss,jax-ws,guice,Jboss,Jax Ws,Guice,我正在使用JBoss7.1和Java1.6 我希望通过JAX-WS端点将服务与集成。使用Gunnar.Morling描述的拦截器模式,当使用无状态bean作为Web服务时,我能够正确地实例化GUI模块。然而,我不能用一个简单的POJO注释的Web服务来做同样的事情。这是否可能?是否有人找到了解决方法。以下是我迄今为止所做努力的总结 @UsesGuice @Interceptor public class GuiceInterceptor { @Inject private GuiceI
@UsesGuice @Interceptor
public class GuiceInterceptor {
@Inject
private GuiceInjectorHolderBean injectorHolder;
@AroundInvoke
public Object aroundAdvice(final InvocationContext ctx) throws Exception {
if (ctx.getTarget().getClass().isAnnotationPresent(UsesGuice.class)) {
final Injector injector = injectorHolder.getInjector();
injector.injectMembers(ctx.getTarget());
}
return ctx.proceed();
}
}
GuiceInjectorHolderBean是负责触发guice连接的sinlgeton bean。所需的注释类如下
@Retention(RUNTIME)
@Target(TYPE)
@InterceptorBinding
public @interface UsesGuice {}
JAX-WSPOJO类
@UsesGuice
@WebService(serviceName = "EchoServiceService", portName = "EchoServicePort", ame = "EchoServiceImpl", targetNamespace = "lala")
public class EchoServiceImpl implements EchoService
{
@Inject
MyGuiceInjection injection;
@Override
@WebMethod
public String sayHello(final String msg)
{
return "Hello " + injection.call(msg);
}
}
提前谢谢
迪米特里您当前的方法 在您的代码中,
javax.interceptor
注释@interceptor
,@InterceptorBinding
和@AroundInvoke
受CDI和EJB标准支持,而不是受Guice支持。Guice通过org.aopalliance.intercept.MethodInterceptor
接口使用专有拦截,并调用方法AbstractModule.bindInterceptor
因此,您试图通过以下方式在端点上引导Guice注入:
@AroundInvoke
方法中,以编程方式调用GuiceInjector
,注入目标是截获的端点如果你想要Pojo Web服务,也许考虑回溯一点,而不是由截击机驱动的Guice初始化,也许这就是你需要的:
javax.xml.ws.Endpoint.publish(String address, Object implementor)
以标准方式初始化GUI,使用injector.getInstance()
构造端点实例,然后使用endpoint.publish
针对端口设置端点实例。以下是一个很好的例子: