package com.lcw.util;

import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.common.json.JSON;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcInvocation;
import com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker;
import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
import java.lang.reflect.Method;

/**
 *
 * @author lancw
 */
public class DubboUtil {

    private static final DubboProtocol PROTOCOL = DubboProtocol.getDubboProtocol();

    /**
     * 调用方法
     *
     * @param c
     * @param method
     * @param fullUrl
     * @param args
     * @return
     * @throws java.lang.Exception
     */
    public static Object invoke(Class c, Method method, String fullUrl, Object... args) throws Exception {
        DubboInvoker<?> invoker = (DubboInvoker<?>) PROTOCOL.refer(c, URL.valueOf(fullUrl));
        if (invoker.isAvailable()) {
            Invocation inv = new RpcInvocation(method, args);
            Result ret = invoker.invoke(inv);
            PROTOCOL.destroy();
            return JSON.json(ret.getValue());
        }
        return null;
    }
}