From b5617f7df9c64921a5951c3c0072a85e86b0d482 Mon Sep 17 00:00:00 2001 From: Muga Nishizawa Date: Fri, 19 Nov 2010 01:58:30 +0900 Subject: [PATCH] java: refactor register method in MessagePack.java for TemplateProvider --- java/src/main/java/org/msgpack/MessagePack.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/java/src/main/java/org/msgpack/MessagePack.java b/java/src/main/java/org/msgpack/MessagePack.java index 71f63fde..4bb4fc4e 100644 --- a/java/src/main/java/org/msgpack/MessagePack.java +++ b/java/src/main/java/org/msgpack/MessagePack.java @@ -21,6 +21,9 @@ import java.io.OutputStream; import java.io.InputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + import org.msgpack.util.codegen.DynamicTemplate; import org.msgpack.util.codegen.DynamicOrdinalEnumTemplate; import org.msgpack.util.codegen.FieldList; @@ -158,11 +161,21 @@ public class MessagePack { } else { if (MessagePackTemplateProvider.class.isAssignableFrom(target)) { try { + Method m = target.getMethod("getTemplate", new Class[0]); + tmpl = (Template)m.invoke(null, new Object[0]); tmpl = ((MessagePackTemplateProvider) target.newInstance()).getTemplate(); } catch (InstantiationException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); + } catch (IllegalArgumentException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } catch (SecurityException e) { + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); } } else { tmpl = DynamicTemplate.create(target);