Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2011 ritwik.net
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package com.openyelp.client;
 
 import java.util.UUID;
 
 
 public final class JsonRpcInvoker {
 
 	private final Random rand = new Random();
 
 	private final TypeChecker typeChecker;
 
 	public JsonRpcInvoker() {
 		this(new GsonTypeChecker());
 	}
 
 	public JsonRpcInvoker(TypeChecker typeChecker) {
 		this. = typeChecker;
 	}

Parameters:
typeChecker 类型检查
maxWorkTime 最大超时时间
 
 	public JsonRpcInvoker(TypeChecker typeCheckerint maxWorkTime) {
 		super();
 		this. = typeChecker;
 		this. = maxWorkTime;
 	}
 
 	@SuppressWarnings("unchecked")
 	public <T> T get(final JsonRpcClientTransport transport,
 			final String handlefinal Class<T>... classes) {
 		for (Class<T> clazz : classes) {
 		}
 		return (T) Proxy.newProxyInstance(
 				JsonRpcInvoker.class.getClassLoader(), classes,
 				new InvocationHandler() {
 
 					public Object invoke(final Object proxy,
 							final Method methodfinal Object[] args)
 							throws Throwable {
 						return JsonRpcInvoker.this.invoke(handletransport,
 								methodargs);
 					}
 				});
 	}
 
 	public int maxWorkTime = 3;
 
 	private Object invoke(String handleNameJsonRpcClientTransport transport,
 			Method methodObject[] argsthrows Throwable {
 
 		String key = UUID.randomUUID().toString().toLowerCase();
 		int time = 0;
 		Object object = work(handleNametransportmethodargskey);
 		if (object == null) {
 			while (time < ) {
 				object = work(handleNametransportmethodargskey);
 				..println("重新连接服务器" + time);
 				if (object != null) {
 					break;
 				}
 				time++;
 			}
 		}
		return object;
	}
	public String getKey(Object[] args) {
		StringBuffer buffer = new StringBuffer();
		if (args != null) {
			for (int i = 0; i < args.lengthi++) {
				buffer.append(args[i].toString() + "/");
			}
		}
		return buffer.toString();
	}
		return ;
	}
	public void setDiskCache(RpcStringCache diskCache) {
		this. = diskCache;
	}
	public JsonRpcInvoker(TypeChecker typeCheckerint maxWorkTime,
			RpcStringCache cache) {
		super();
		this. = typeChecker;
		this. = maxWorkTime;
		this. = cache;
	}
		return ;
	}
	public void setCache(RpcStringCache cache) {
		this. = cache;
	}
	private Object work(String handleNameJsonRpcClientTransport transport,
			Method methodObject[] argsString key) {
		Gson gson = new Gson();
		String cachekey = handleName + method.getName() + getKey(args);
		String keyy = Utils.getMD5Str(cachekey);
		String responseData = null;
		if ( != null) {
			responseData = .get(keyy);
			if (responseData == null) {
				responseData = c(handleNametransportmethodargskeygson);
				.put(keyyresponseData);
			}
else {
			responseData = c(handleNametransportmethodargskeygson);
		}
		if (responseData == null) {
			if(!=null){
				responseData=.get(keyy);
			}
		}
		if (responseData == null) {
			return null;
		}
		JsonParser parser = new JsonParser();
		JsonObject resp = (JsonObjectparser.parse(new StringReader(
				responseData));
		// int sid = resp.get("id").getAsInt();
		// if (id == sid) {
		// } else {
		// return null;
		// }
		JsonElement result = resp.get("result");
		JsonElement error = resp.get("error");
出错以后返回null
		if (error != null && !error.isJsonNull()) {
			if (error.isJsonPrimitive()) {
				..println("<<>>>>>" + error.getAsString());
else if (error.isJsonObject()) {
				Integer code = (o.has("code") ? o.get("code").getAsInt() : null);
				String message = (o.has("message") ? o.get("message")
						.getAsString() : null);
				String data = (o.has("data") ? (o.get("data"instanceof JsonObject ? o
						.get("data").toString() : o.get("data").getAsString())
null);
				..println(message + "<<>>>>>" + data);
else {
				..println("<<>>>>>" + error.toString());
			}
			return null;
		}
		if(!=null){
			..println("缓存数据");
			.put(keyy,responseData);
		}
		if (method.getReturnType() == void.class) {
			return null;
		}
		return gson.fromJson(result.toString(), method.getReturnType());
	}
	private String c(String handleNameJsonRpcClientTransport transport,
			Method methodObject[] argsString keyGson gson) {
		String responseData = null;
		String methodName = handleName + "." + method.getName();
		JsonObject req = new JsonObject();
		req.addProperty("id"id);
		req.addProperty("key"key);
		req.addProperty("method"methodName);
		JsonArray params = new JsonArray();
		if (args != null) {
			for (Object o : args) {
				params.add(gson.toJsonTree(o));
			}
		}
		req.add("params"params);
		String requestData = req.toString();
		try {
			responseData = transport.call(requestData);
catch (Exception e) {
		}
		return responseData;
	}
New to GrepCode? Check out our FAQ X