Java JAX-WSRI:实现方法拦截器的最佳方法

Java JAX-WSRI:实现方法拦截器的最佳方法,java,web-services,soap,jax-ws,aop,Java,Web Services,Soap,Jax Ws,Aop,我想为我的webservice调用提供我自己的方法拦截器。基本上,应该在调用实际方法之前调用此方法拦截器。。。请参见下面的代码段: public class MyMethodInterceptor { public Object invoke(Object t, Method m, Object[] args) throws Throwable { // do some magic, such as tracing, authorise, etc... return m.in

我想为我的webservice调用提供我自己的方法拦截器。基本上,应该在调用实际方法之前调用此方法拦截器。。。请参见下面的代码段:

public class MyMethodInterceptor {
  public Object invoke(Object t, Method m, Object[] args) throws Throwable {
    // do some magic, such as tracing, authorise, etc...
    return m.invoke(t, args);
  }     
}

// ....    

public class MyWebServiceImpl implements MyWebServiceInterface {
  public String greet(final String name) {
    return "Hi there, " + name;
  }
}
其思想是每次调用webservice时,它都将通过我的拦截器进行调度。我已经考虑过连接我自己的InstanceResolver,但它正在失去控制。我知道如何在CXF和JAX-RSJersey+Guice中实现这一点

JAX-WS提供了处理程序链,但是这些处理程序被调用得太早了,也就是说,在方法调用之前,所以我现在没有所需的信息


在JAX-WS的Reference实现中,实现这一点的最佳方法是什么?

在JAX-WS处理程序中,您就在真正的东西之前,您可以访问整个SOAP消息的内容,您需要什么还不可用

编辑: 要在处理程序中使用的一些示例:

public String getMessage(SOAPMessageContext smc) {
    SOAPMessage message = smc.getMessage();
    ByteArrayOutputStream soapEnvelope = new ByteArrayOutputStream();
    message.writeTo(soapEnvelope);
    soapEnvelope.close();
    return new String(soapEnvelope.toByteArray());
}

public String getMethod(SOAPMessageContext smc) {
    SOAPMessage message = smc.getMessage();
    SOAPBody body = message.getSOAPBody();
    return body.getFirstChild().getLocalName();
}

我需要知道调用哪个方法和参数。问题是我的接口的方法上有自定义注释,所以我需要以某种方式访问java.lang.reflect.Method。访问SOAP消息可以获得方法的名称和参数。关于反射,有方法的名称,你不能做你需要的吗?我需要从方法参数中提取注释,还需要获取Java类型而不是SOAP负载参数。。。你能给我看一个代码片段/api/javadoc吗?RegardsI使用处理程序进行记帐,我只保存方法名,将其从SOAP消息转换为字符串。编辑我的答案以显示我是如何做到的。