transportinterceptor.java
来自「Xfire文件 用于开发web service 的一个开源工具 很好用的」· Java 代码 · 共 68 行
JAVA
68 行
package org.codehaus.xfire.management.mbeans;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import net.sf.cglib.proxy.Callback;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import org.codehaus.xfire.XFireRuntimeException;
import org.codehaus.xfire.transport.Channel;
import org.codehaus.xfire.transport.Transport;
public class TransportInterceptor implements MethodInterceptor
{
private ServiceStat serviceStat;
private Transport transport;
private Map<Object, Object> channels = new HashMap<Object, Object>();
public TransportInterceptor(Transport transport, ServiceStat serviceStat)
{
super();
this.transport = transport;
this.serviceStat = serviceStat;
}
public Object intercept(Object t, Method m, Object[] args, MethodProxy proxy)
throws Throwable
{
Object c = (Object) proxy.invoke(transport, args);
if (m.getName().equals("createChannel"))
{
Object cached = channels.get(c);
if (cached != null)
return cached;
ChannelInterceptor interceptor = new ChannelInterceptor((Channel) c, serviceStat);
Enhancer e = new Enhancer();
e.setSuperclass(c.getClass());
e.setCallbackType(ChannelInterceptor.class);
e.setUseFactory(false);
Class mock = e.createClass();
Enhancer.registerCallbacks(mock, new Callback[] { interceptor });
try
{
cached = Sun14ReflectionProvider.newInstance(mock);
channels.put(c, cached);
return cached;
}
catch (Exception e1)
{
throw new XFireRuntimeException("Couldn't instantiate MBean transport.", e1);
}
}
else if (m.getName().equals("close"))
{
channels.remove(c);
}
return c;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?