package kernel.rmi; import java.io.Serializable; import java.lang.reflect.Method; import java.util.Arrays; import com.alibaba.fastjson.JSON; import kernel.web.ApplicationUtil; /** * @author JORGE * @description RMI实体 */ public class RmiEntity implements Serializable{ /** * 调用结果对象 */ private Object result; /** * 方法参数列表 */ private Object[] params; /** * 传输对象是否被序列化 */ public boolean serialed; /** * 方法参数类型 */ public Class[] paramTypes; /** * 序列化版本ID */ private static final long serialVersionUID = -5588644542304795465L; public RmiEntity(Object result,boolean... forces) { if(null==result) return; boolean force=(null==forces || 0==forces.length)?false:forces[0]; if(force) { this.serialed=true; this.result=JSON.toJSONString(result); return; } if(result instanceof Serializable) { this.result=result; }else { this.serialed=true; this.result=JSON.toJSONString(result); } } public RmiEntity(Method method,Object[] params,boolean... forces) { if(0==method.getParameterCount()) return; this.paramTypes=method.getParameterTypes(); boolean force=(null==forces || 0==forces.length)?false:forces[0]; if(force) { this.serialed=true; this.params=Arrays.stream(params).map(ele->null==ele?null:JSON.toJSONString(ele)).toArray(); return; } int len=params.length; boolean requireSerialize=false; for(int i=0;inull==ele?null:JSON.toJSONString(ele)).toArray(); return; }else { this.params=params; } } public Object getResult(Method method) throws Throwable { if(null==result) return null; Object retObject=!serialed?result:JSON.parseObject((String)result,method.getGenericReturnType()); if(retObject instanceof Throwable) { throw ApplicationUtil.getDeclaredCause((Throwable)retObject, method); }else { return retObject; } } public Object[] getParams() { if(!serialed) return params; if(null==paramTypes) return null; int len=paramTypes.length; Object[] args=new Object[len]; for(int i=0;i