All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.dubboclub.restful.client.RestfulInvoker Maven / Gradle / Ivy

package net.dubboclub.restful.client;

import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.rpc.*;
import com.alibaba.fastjson.JSON;
import net.dubboclub.restful.util.ClassUtils;
import net.dubboclub.restful.util.RestfulConstants;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * @date: 2016/2/26.
 * @author:bieber.
 * @project:dubbo-plus.
 * @package:net.dubboclub.restful.client.
 * @version:1.0.0
 * @fix:
 * @description: 描述功能
 */
public class RestfulInvoker implements Invoker {

    private Class serviceType;

    private String baseUrl;

    private String versionGroupFragment;

    private URL url;

    private volatile boolean isEnable=true;

    public RestfulInvoker(URL url, Class serviceType) {
        StringBuffer reqUrl = new StringBuffer("");
        baseUrl=url.toIdentityString();
        if(url.hasParameter(Constants.VERSION_KEY)){
            reqUrl.append("/").append(url.getParameter(Constants.VERSION_KEY));
        }else{
            reqUrl.append("/").append(RestfulConstants.ALL);
        }
        if(url.hasParameter(Constants.GROUP_KEY)){
            reqUrl.append("/").append(url.getParameter(Constants.GROUP_KEY));
        }else{
            reqUrl.append("/").append(RestfulConstants.ALL);
        }
        versionGroupFragment = reqUrl.toString();
        this.serviceType = serviceType;
        this.url = url;
    }






    @Override
    public Class getInterface() {
        return serviceType;
    }

    @Override
    public Result invoke(Invocation invocation) throws RpcException {
        Object[] args = invocation.getArguments();
        Map requestMap = new HashMap();
        RpcResult rpcResult = new RpcResult();
        if(args!=null){
            for(int i=0;i retType = invokedMethod.getReturnType();
            if(retType!=Void.class&&retType!=Void.TYPE&&!ClassUtils.isBasicType(retType)){
                rpcResult.setValue(JSON.parseObject(response,retType));
            }else{
                rpcResult.setValue(ClassUtils.caseBasicType(retType,new String(response)));
            }
        }catch (Exception e) {
            rpcResult.setException(new RpcException(RpcException.NETWORK_EXCEPTION,"fail to invoke restful remote service",e));
        }
        return rpcResult;
    }

    @Override
    public URL getUrl() {
        return url;
    }

    @Override
    public boolean isAvailable() {
        return isEnable;
    }

    @Override
    public void destroy() {
        isEnable=false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy