2012年3月11日星期日

CXF拦截器获取调用方法名


  1. //拦截器  
  2. package me.yourname.webservice.cxfinterceptor;  
  3.   
  4. import java.lang.reflect.Method;  
  5. import org.apache.cxf.frontend.MethodDispatcher;  
  6. import org.apache.cxf.interceptor.Fault;  
  7. import org.apache.cxf.message.Exchange;  
  8. import org.apache.cxf.message.Message;  
  9. import org.apache.cxf.phase.AbstractPhaseInterceptor;  
  10. import org.apache.cxf.phase.Phase;  
  11. import org.apache.cxf.service.Service;  
  12. import org.apache.cxf.service.model.BindingOperationInfo;  
  13. public class MethodToInvokeInterceptor extends AbstractPhaseInterceptor<Message> {  
  14.     //至少要一个带参的构造函数  
  15.     public MethodToInvokeInterceptor(String phase) {  
  16.         super(phase);  
  17.     }  
  18.     public MethodToInvokeInterceptor() {  
  19.         super(Phase.USER_LOGICAL);  
  20.     }  
  21.     public void handleMessage(Message message) throws Fault {   
  22.         Exchange exchange = message.getExchange();  
  23.         BindingOperationInfo bop = exchange.get(BindingOperationInfo.class);  
  24.         MethodDispatcher md = (MethodDispatcher) exchange.get(Service.class)  
  25.                 .get(MethodDispatcher.class.getName());  
  26.         Method method = md.getMethod(bop);  
  27.         System.out.println("********method name:" + method.getName());   
  28.     }  
  29. }  
  30. //handler  
  31. package me.yourname.webservice.handler;  
  32.   
  33. import java.lang.reflect.Method;  
  34.   
  35. import javax.xml.ws.handler.Handler;  
  36. import javax.xml.ws.handler.MessageContext;  
  37. import javax.xml.ws.handler.soap.SOAPMessageContext;  
  38.   
  39. import org.apache.cxf.frontend.MethodDispatcher;  
  40. import org.apache.cxf.jaxws.context.WrappedMessageContext;  
  41. import org.apache.cxf.message.Exchange;  
  42. import org.apache.cxf.message.Message;  
  43. import org.apache.cxf.service.Service;  
  44. import org.apache.cxf.service.model.BindingOperationInfo;  
  45. import org.apache.log4j.Logger;  
  46. import org.springframework.stereotype.Component;  
  47. @Component("methodToInvokeHandler")   
  48. public class MethodToInvokeHandler implements Handler<SOAPMessageContext> {  
  49.   
  50.     private static Logger log = Logger.getLogger(MethodToInvokeHandler.class);  
  51.   
  52.     public void close(MessageContext messageContext) {  
  53.         log.info("MethodToInvokeHandler close");  
  54.     }  
  55.   
  56.     public boolean handleFault(SOAPMessageContext messageContext) {  
  57.         log.error("MethodToInvokeHandler error");  
  58.         return false;  
  59.     }  
  60.   
  61.     public boolean handleMessage(SOAPMessageContext messageContext) {   
  62.         WrappedMessageContext wmc = (WrappedMessageContext) messageContext;  
  63.         Message m = wmc.getWrappedMessage();  
  64.         Exchange exchange = m.getExchange();  
  65.         BindingOperationInfo bop = exchange.get(BindingOperationInfo.class);  
  66.         MethodDispatcher md = (MethodDispatcher) exchange.get(Service.class)  
  67.                 .get(MethodDispatcher.class.getName());  
  68.         Method method = md.getMethod(bop);  
  69.         System.out.println("invoke method:"+method.getName());  
  70.         return true;  
  71.     }  
  72. }  

没有评论:

发表评论