package com.walker.remote.support; import com.walker.api.client.ResponseData; import com.walker.infrastructure.utils.StringUtils; import com.walker.remote.AbstractByteCoder; import com.walker.remote.Constants; import com.walker.remote.DoubleTrust; import com.walker.remote.RemoteAccessor; import org.apache.hc.client5.http.cookie.CookieStore; import java.util.Map; /** * 一个RemoteAccessor对象负责一个链接到某个ip的状态;
* 如果连接不同的服务端,需要使用多个此对象。 * @author shikeying * @date 2015年12月11日 * */ public class DefaultRemoteAccessor implements RemoteAccessor { private AbstractByteCoder contentCoder = null; private String baseUrl; // 应用程序存储本地文件的根路径 private DoubleTrust doubleTrust; @Override public T requestSync(String methodName, Map simpleData , String jsonParameter, String methodType, String contentType, Map header , ResponseData responseData){ checkRequired(); HttpRemoteTask remoteTask = new HttpRemoteTask(); remoteTask.setDoubleTrust(doubleTrust); remoteTask.setContentCoder(contentCoder); remoteTask.setResponseData(responseData); // 设置简单参数,并优先处理 if(simpleData != null && simpleData.size() > 0){ remoteTask.setSimpleData(simpleData); } // ((HttpRemoteTask)remoteTask).setTimeRecorder(timeRecorder); return remoteTask.execute(baseUrl+methodName, simpleData, jsonParameter, methodType, contentType, header); } @Override public T requestSyncWithoutGet(String methodName , String jsonParameter, String methodType, Map header , ResponseData responseData){ return this.requestSync(methodName, null, jsonParameter, methodType, Constants.APPLICATION_JSON, header, responseData); } @Override public T requestSyncPost(String methodName , String jsonParameter, Map header , ResponseData responseData){ return this.requestSyncWithoutGet(methodName, jsonParameter, Constants.HTTP_METHOD_POST, header, responseData); } @Override public T requestSyncPut(String methodName , String jsonParameter, Map header , ResponseData responseData){ return this.requestSyncWithoutGet(methodName, jsonParameter, Constants.HTTP_METHOD_PUT, header, responseData); } @Override public T requestSyncDelete(String methodName , String jsonParameter, Map header , ResponseData responseData){ return this.requestSyncWithoutGet(methodName, jsonParameter, Constants.HTTP_METHOD_DELETE, header, responseData); } /** * 同步远程服务调用。 * @param methodName * @param simpleData * @param jsonParameter * @param responseData 给定一个响应对象的实例,如:new ResponseLogin() * @return */ @Override public T requestTextSync(String methodName, Map simpleData , String jsonParameter, ResponseData responseData){ checkRequired(); HttpRemoteTask remoteTask = new HttpRemoteTask(); remoteTask.setDoubleTrust(doubleTrust); remoteTask.setContentCoder(contentCoder); remoteTask.setResponseData(responseData); // 设置简单参数,并优先处理 if(simpleData != null && simpleData.size() > 0){ remoteTask.setSimpleData(simpleData); } // ((HttpRemoteTask)remoteTask).setTimeRecorder(timeRecorder); return remoteTask.execute(baseUrl+methodName, jsonParameter); } /** * 带cookie的请求,请求后可以从输入的cookie中获取数据 * @param methodName * @param simpleData * @param jsonParameter * @param responseData * @param cookieStore * @return */ @Override public T requestTextSyncWithCookie(String methodName, Map simpleData , String jsonParameter, ResponseData responseData , CookieStore cookieStore){ checkRequired(); HttpRemoteTask remoteTask = new HttpRemoteTask(); remoteTask.setDoubleTrust(doubleTrust); remoteTask.setContentCoder(contentCoder); remoteTask.setResponseData(responseData); // 设置简单参数,并优先处理 if(simpleData != null && simpleData.size() > 0){ remoteTask.setSimpleData(simpleData); } // return remoteTask.execute(baseUrl+methodName, jsonParameter); return remoteTask.execute(baseUrl+methodName, jsonParameter, cookieStore); } private void checkRequired(){ // if(contentCoder == null || context == null || StringUtils.isEmpty(baseUrl)){ // throw new IllegalArgumentException(); // } //contentCoder 可以为空,为空时不进行加解密,李润冬2015-07-28 if(StringUtils.isEmpty(baseUrl)){ throw new IllegalArgumentException(); } } @Override public void setContentEncoder(AbstractByteCoder byteCoder) { this.contentCoder = byteCoder; } @Override public void setBaseUrl(String baseUrl) { this.baseUrl = baseUrl; } @Override public void setDoubleTrust(DoubleTrust doubleTrust) { this.doubleTrust = doubleTrust; } }