public <T> Invoker<T> getInvoker(T proxy, Class<T> type, URL url) { // TODO Wrapper类不能正确处理带$的类名 final Wrapper wrapper = Wrapper.getWrapper(proxy.getClass().getName().indexOf('$') < 0 ? proxy.getClass() : type); return new AbstractProxyInvoker<T>(proxy, type, url) { @Override protected Object doInvoke(T proxy, String methodName, Class<?>[] parameterTypes, Object[] arguments) throws Throwable { return wrapper.invokeMethod(proxy, methodName, parameterTypes, arguments); } }; }
/** * has method. * * @param name method name. * @return has or has not. */ public boolean hasMethod(String name) { for (String mn : getMethodNames()) if (mn.equals(name)) return true; return false; }
private static String args(Class<?>[] cs, String name) { int len = cs.length; if (len == 0) return ""; StringBuilder sb = new StringBuilder(); for (int i = 0; i < len; i++) { if (i > 0) sb.append(','); sb.append(arg(cs[i], name + "[" + i + "]")); } return sb.toString(); }
private static URL getRegistryURL(URL url) { return url.setPath(RegistryService.class.getName()) .removeParameter(Constants.EXPORT_KEY).removeParameter(Constants.REFER_KEY) .addParameter(Constants.INTERFACE_KEY, RegistryService.class.getName()) .addParameter(Constants.CLUSTER_STICKY_KEY, "true") .addParameter(Constants.LAZY_CONNECT_KEY, "true") .addParameter(Constants.RECONNECT_KEY, "false") .addParameterIfAbsent(Constants.TIMEOUT_KEY, "10000") .addParameterIfAbsent(Constants.CALLBACK_INSTANCES_LIMIT_KEY, "10000") .addParameterIfAbsent(Constants.CONNECT_TIMEOUT_KEY, "10000") .addParameter(Constants.METHODS_KEY, StringUtils.join(new HashSet<String>(Arrays.asList(Wrapper.getWrapper(RegistryService.class).getDeclaredMethodNames())), ",")) //.addParameter(Constants.STUB_KEY, RegistryServiceStub.class.getName()) //.addParameter(Constants.STUB_EVENT_KEY, Boolean.TRUE.toString()) //for event dispatch //.addParameter(Constants.ON_DISCONNECT_KEY, "disconnect") .addParameter("subscribe.1.callback", "true") .addParameter("unsubscribe.1.callback", "false"); }
String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames(); if(methods.length == 0) { logger.warn("NO method found in service interface " + interfaceClass.getName());
jb.objectBegin(); Wrapper w = Wrapper.getWrapper(c); String pns[] = w.getPropertyNames(); Object value = w.getPropertyValue(obj, pn); if (value == null || value == obj) jb.valueNull();
private static void json(Object obj, String[] properties, JSONWriter jb, boolean writeClass) throws IOException { if (obj == null) { jb.valueNull(); } else { Wrapper wrapper = Wrapper.getWrapper(obj.getClass()); Object value; jb.objectBegin(); for (String prop : properties) { jb.objectItem(prop); value = wrapper.getPropertyValue(obj, prop); if (value == null) jb.valueNull(); else DEFAULT_CONVERTER.writeValue(value, jb, writeClass); } jb.objectEnd(); } }
continue; c1.append(" if( $2.equals(\"").append(fn).append("\") ){ w.").append(fn).append("=").append(arg(ft, "$3")).append("; return; }"); c2.append(" if( $2.equals(\"").append(fn).append("\") ){ return ($w)w.").append(fn).append("; }"); pts.put(fn, ft); boolean hasMethod = hasMethods(methods); if (hasMethod) { c3.append(" try{"); c3.append(" w.").append(mn).append('(').append(args(m.getParameterTypes(), "$4")).append(");").append(" return null;"); else c3.append(" return ($w)w.").append(mn).append('(').append(args(m.getParameterTypes(), "$4")).append(");"); Method method = (Method) entry.getValue(); if ((matcher = ReflectUtils.GETTER_METHOD_DESC_PATTERN.matcher(md)).matches()) { String pn = propertyName(matcher.group(1)); c2.append(" if( $2.equals(\"").append(pn).append("\") ){ return ($w)w.").append(method.getName()).append("(); }"); pts.put(pn, method.getReturnType()); } else if ((matcher = ReflectUtils.IS_HAS_CAN_METHOD_DESC_PATTERN.matcher(md)).matches()) { String pn = propertyName(matcher.group(1)); c2.append(" if( $2.equals(\"").append(pn).append("\") ){ return ($w)w.").append(method.getName()).append("(); }"); pts.put(pn, method.getReturnType()); } else if ((matcher = ReflectUtils.SETTER_METHOD_DESC_PATTERN.matcher(md)).matches()) { Class<?> pt = method.getParameterTypes()[0]; String pn = propertyName(matcher.group(1)); c1.append(" if( $2.equals(\"").append(pn).append("\") ){ w.").append(method.getName()).append("(").append(arg(pt, "$3")).append("); return; }"); pts.put(pn, pt);
@Override public void objectItem(String name) { mStack.push(name); // push name. mType = (mWrapper == null ? Object.class : mWrapper.getPropertyType(name)); }
/** * get property value. * * @param instance instance. * @param pns property name array. * @return value array. */ public Object[] getPropertyValues(Object instance, String[] pns) throws NoSuchPropertyException, IllegalArgumentException { Object[] ret = new Object[pns.length]; for (int i = 0; i < ret.length; i++) ret[i] = getPropertyValue(instance, pns[i]); return ret; }
params.put(Constants.METHODS_KEY, StringUtils.join(Wrapper.getWrapper(clazz).getDeclaredMethodNames(), ","));
String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames(); if(methods.length == 0) { logger.warn("NO method found in service interface " + interfaceClass.getName());
jb.objectBegin(); Wrapper w = Wrapper.getWrapper(c); String pns[] = w.getPropertyNames(); Object value = w.getPropertyValue(obj, pn); if (value == null || value == obj) jb.valueNull();
private static void json(Object obj, String[] properties, JSONWriter jb, boolean writeClass) throws IOException { if (obj == null) { jb.valueNull(); } else { Wrapper wrapper = Wrapper.getWrapper(obj.getClass()); Object value; jb.objectBegin(); for (String prop : properties) { jb.objectItem(prop); value = wrapper.getPropertyValue(obj, prop); if (value == null) jb.valueNull(); else DEFAULT_CONVERTER.writeValue(value, jb, writeClass); } jb.objectEnd(); } }
continue; c1.append(" if( $2.equals(\"").append(fn).append("\") ){ w.").append(fn).append("=").append(arg(ft, "$3")).append("; return; }"); c2.append(" if( $2.equals(\"").append(fn).append("\") ){ return ($w)w.").append(fn).append("; }"); pts.put(fn, ft); boolean hasMethod = hasMethods(methods); if (hasMethod) { c3.append(" try{"); c3.append(" w.").append(mn).append('(').append(args(m.getParameterTypes(), "$4")).append(");").append(" return null;"); else c3.append(" return ($w)w.").append(mn).append('(').append(args(m.getParameterTypes(), "$4")).append(");"); Method method = (Method) entry.getValue(); if ((matcher = ReflectUtils.GETTER_METHOD_DESC_PATTERN.matcher(md)).matches()) { String pn = propertyName(matcher.group(1)); c2.append(" if( $2.equals(\"").append(pn).append("\") ){ return ($w)w.").append(method.getName()).append("(); }"); pts.put(pn, method.getReturnType()); } else if ((matcher = ReflectUtils.IS_HAS_CAN_METHOD_DESC_PATTERN.matcher(md)).matches()) { String pn = propertyName(matcher.group(1)); c2.append(" if( $2.equals(\"").append(pn).append("\") ){ return ($w)w.").append(method.getName()).append("(); }"); pts.put(pn, method.getReturnType()); } else if ((matcher = ReflectUtils.SETTER_METHOD_DESC_PATTERN.matcher(md)).matches()) { Class<?> pt = method.getParameterTypes()[0]; String pn = propertyName(matcher.group(1)); c1.append(" if( $2.equals(\"").append(pn).append("\") ){ w.").append(method.getName()).append("(").append(arg(pt, "$3")).append("); return; }"); pts.put(pn, pt);
@Override public void objectItem(String name) { mStack.push(name); // push name. mType = (mWrapper == null ? Object.class : mWrapper.getPropertyType(name)); }
/** * get property value. * * @param instance instance. * @param pns property name array. * @return value array. */ public Object[] getPropertyValues(Object instance, String[] pns) throws NoSuchPropertyException, IllegalArgumentException { Object[] ret = new Object[pns.length]; for (int i = 0; i < ret.length; i++) ret[i] = getPropertyValue(instance, pns[i]); return ret; }
params.put(Constants.METHODS_KEY, StringUtils.join(Wrapper.getWrapper(clazz).getDeclaredMethodNames(), ","));
String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames(); if (methods.length == 0) { logger.warn("NO method found in service interface " + interfaceClass.getName());
Wrapper w = Wrapper.getWrapper(c); String pns[] = w.getPropertyNames(); Object value = w.getPropertyValue(obj,pn); if( value == null || value == obj) jb.valueNull();