java intercpt_Java InterceptorChain类代码示例

import org.apache.cxf.interceptor.InterceptorChain; //导入依赖的package包/类

@AroundInvoke

public Object intercept(InvocationContext context) throws Exception {

Endpoint endpoint = this.exchange.get(Endpoint.class);

Service service = endpoint.getService();

Binding binding = ((JaxWsEndpointImpl) endpoint).getJaxwsBinding();

this.exchange.put(InvocationContext.class, context);

if (binding.getHandlerChain() == null || binding.getHandlerChain().isEmpty()) {

// no handlers so let's just directly invoke the bean

log.debug("No handlers found.");

EjbMethodInvoker invoker = (EjbMethodInvoker) service.getInvoker();

return invoker.directEjbInvoke(this.exchange, this.method, this.params);

} else {

// have handlers so have to run handlers now and redo data binding

// as handlers can change the soap message

log.debug("Handlers found.");

Message inMessage = exchange.getInMessage();

PhaseInterceptorChain chain = new PhaseInterceptorChain(bus.getExtension(PhaseManager.class).getInPhases());

chain.setFaultObserver(endpoint.getOutFaultObserver());

/*

* Since we have to re-do data binding and the XMLStreamReader

* contents are already consumed by prior data binding step

* we have to reinitialize the XMLStreamReader from the SOAPMessage

* created by SAAJInInterceptor.

*/

if (inMessage instanceof SoapMessage) {

try {

reserialize((SoapMessage) inMessage);

} catch (Exception e) {

throw new ServerRuntimeException("Failed to reserialize soap message", e);

}

} else {

// TODO: how to handle XML/HTTP binding?

}

this.exchange.setOutMessage(null);

// install default interceptors

chain.add(new ServiceInvokerInterceptor());

//chain.add(new OutgoingChainInterceptor()); // it is already in the enclosing chain, if we add it there we are in the tx so we write the message in the tx!

// See http://cwiki.apache.org/CXF20DOC/interceptors.html

// install Holder and Wrapper interceptors

chain.add(new WrapperClassInInterceptor());

chain.add(new HolderInInterceptor());

// install interceptors for handler processing

chain.add(new MustUnderstandInterceptor());

chain.add(new LogicalHandlerInInterceptor(binding));

chain.add(new SOAPHandlerInterceptor(binding));

// install data binding interceptors - todo: check we need it

copyDataBindingInterceptors(chain, inMessage.getInterceptorChain());

InterceptorChain oldChain = inMessage.getInterceptorChain();

inMessage.setInterceptorChain(chain);

try {

chain.doIntercept(inMessage);

} finally {

inMessage.setInterceptorChain(oldChain);

}

// TODO: the result should be deserialized from SOAPMessage

Object result = getResult();

return result;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值