⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transportinterceptor.java

📁 Xfire文件 用于开发web service 的一个开源工具 很好用的
💻 JAVA
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -