我正在使用 JBoss 7.1 和 Java 1.6。
我想通过 JAX-WS 端点集成Guice服务。使用 Gunnar.Morling 描述的拦截器模式,当使用无状态 bean 作为 Web 服务时,我能够正确实例化 Guice 模块。但是我不能用一个简单的 POJO 注释 web 服务来做同样的事情。这可能有没有人找到解决方法。以下是我迄今为止所做的努力的总结。
@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 是一个单根 bean,负责触发 guice 连接。所需的注解类如下
@Retention(RUNTIME)
@Target(TYPE)
@InterceptorBinding
public @interface UsesGuice {}
JAX-WS POJO 类
@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);
}
}
在此先感谢迪米特里