From 14f28d546e4b40153f712331c8ccaf40934aa627 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Thu, 24 Dec 2015 10:40:23 +0800 Subject: [PATCH] --- .../src/org/redkale/convert/Factory.java | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/android-jdk6-redkale/src/org/redkale/convert/Factory.java b/android-jdk6-redkale/src/org/redkale/convert/Factory.java index e8cba848e..5e836bdc8 100644 --- a/android-jdk6-redkale/src/org/redkale/convert/Factory.java +++ b/android-jdk6-redkale/src/org/redkale/convert/Factory.java @@ -341,8 +341,24 @@ public abstract class Factory { od = new ObjectDecoder(type); decoder = od; } else if (!clazz.getName().startsWith("java.")) { - od = new ObjectDecoder(type); - decoder = od; + SimpledCoder simpleCoder = null; + for (final Method method : clazz.getDeclaredMethods()) { + if (!Modifier.isStatic(method.getModifiers())) continue; + if (method.getParameterTypes().length != 0) continue; + if (method.getReturnType() != SimpledCoder.class) continue; + try { + method.setAccessible(true); + simpleCoder = (SimpledCoder) method.invoke(null); + break; + } catch (Exception e) { + } + } + if (simpleCoder == null) { + od = new ObjectDecoder(type); + decoder = od; + } else { + decoder = simpleCoder; + } } if (decoder == null) throw new ConvertException("not support the type (" + type + ")"); register(type, decoder); @@ -403,8 +419,24 @@ public abstract class Factory { } else if (clazz == Object.class) { return (Encodeable) this.anyEncoder; } else if (!clazz.getName().startsWith("java.")) { - oe = new ObjectEncoder(type); - encoder = oe; + SimpledCoder simpleCoder = null; + for (final Method method : clazz.getDeclaredMethods()) { + if (!Modifier.isStatic(method.getModifiers())) continue; + if (method.getParameterTypes().length != 0) continue; + if (method.getReturnType() != SimpledCoder.class) continue; + try { + method.setAccessible(true); + simpleCoder = (SimpledCoder) method.invoke(null); + break; + } catch (Exception e) { + } + } + if (simpleCoder == null) { + oe = new ObjectEncoder(type); + encoder = oe; + } else { + encoder = simpleCoder; + } } if (encoder == null) throw new ConvertException("not support the type (" + type + ")"); register(type, encoder);