diff --git a/java/src/main/java/org/msgpack/template/AnyTemplate.java b/java/src/main/java/org/msgpack/template/AnyTemplate.java index 69b2669..36c3443 100644 --- a/java/src/main/java/org/msgpack/template/AnyTemplate.java +++ b/java/src/main/java/org/msgpack/template/AnyTemplate.java @@ -24,10 +24,13 @@ public class AnyTemplate implements Template { private AnyTemplate() { } public void pack(Packer pk, Object target) throws IOException { - if(target == null) { + if(target instanceof MessagePackObject) { + pk.pack((MessagePackObject)target); + } else if(target == null) { pk.packNil(); } else { - new ClassTemplate(target.getClass()).pack(pk, target); + TemplateRegistry.lookup(target.getClass()).pack(pk, target); + //new ClassTemplate(target.getClass()).pack(pk, target); } } @@ -47,6 +50,7 @@ public class AnyTemplate implements Template { static { CustomMessage.register(MessagePackObject.class, instance); + TemplateRegistry.register(MessagePackObject.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/BigIntegerTemplate.java b/java/src/main/java/org/msgpack/template/BigIntegerTemplate.java index f0a45fc..c59260b 100644 --- a/java/src/main/java/org/msgpack/template/BigIntegerTemplate.java +++ b/java/src/main/java/org/msgpack/template/BigIntegerTemplate.java @@ -44,6 +44,7 @@ public class BigIntegerTemplate implements Template { static { CustomMessage.register(BigInteger.class, instance); + TemplateRegistry.register(BigInteger.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/BooleanTemplate.java b/java/src/main/java/org/msgpack/template/BooleanTemplate.java index a3143db..e37431c 100644 --- a/java/src/main/java/org/msgpack/template/BooleanTemplate.java +++ b/java/src/main/java/org/msgpack/template/BooleanTemplate.java @@ -43,6 +43,8 @@ public class BooleanTemplate implements Template { static { CustomMessage.register(Boolean.class, instance); + TemplateRegistry.register(Boolean.class, instance); + TemplateRegistry.register(boolean.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/ByteBufferTemplate.java b/java/src/main/java/org/msgpack/template/ByteBufferTemplate.java index c0cb99c..8ea1a4d 100644 --- a/java/src/main/java/org/msgpack/template/ByteBufferTemplate.java +++ b/java/src/main/java/org/msgpack/template/ByteBufferTemplate.java @@ -56,5 +56,9 @@ public class ByteBufferTemplate implements Template { } static final ByteBufferTemplate instance = new ByteBufferTemplate(); + + static { + TemplateRegistry.register(ByteBuffer.class, instance); + } } diff --git a/java/src/main/java/org/msgpack/template/ByteTemplate.java b/java/src/main/java/org/msgpack/template/ByteTemplate.java index c079e45..121d599 100644 --- a/java/src/main/java/org/msgpack/template/ByteTemplate.java +++ b/java/src/main/java/org/msgpack/template/ByteTemplate.java @@ -43,6 +43,8 @@ public class ByteTemplate implements Template { static { CustomMessage.register(Byte.class, instance); + TemplateRegistry.register(Byte.class, instance); + TemplateRegistry.register(byte.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/ClassTemplate.java b/java/src/main/java/org/msgpack/template/ClassTemplate.java index 2831452..68a89e2 100644 --- a/java/src/main/java/org/msgpack/template/ClassTemplate.java +++ b/java/src/main/java/org/msgpack/template/ClassTemplate.java @@ -18,6 +18,8 @@ package org.msgpack.template; import java.io.IOException; +import java.lang.reflect.AccessibleObject; +import java.lang.annotation.Annotation; import org.msgpack.*; import org.msgpack.annotation.MessagePackDelegate; import org.msgpack.annotation.MessagePackMessage; @@ -30,10 +32,6 @@ import java.math.BigInteger; import java.nio.ByteBuffer; public class ClassTemplate implements Template { - static { - Templates.load(); - } - private Class klass; public ClassTemplate(Class klass) { @@ -119,14 +117,14 @@ public class ClassTemplate implements Template { // pk.packDouble((Double)o); // return; //} - if(o instanceof BigInteger) { - pk.packBigInteger((BigInteger)o); - return; - } - if (o instanceof ByteBuffer) { // FIXME - Templates.tByteBuffer().pack(pk, o); - return; - } + //if(o instanceof BigInteger) { + // pk.packBigInteger((BigInteger)o); + // return; + //} + //if (o instanceof ByteBuffer) { + // Templates.tByteBuffer().pack(pk, o); + // return; + //} MessagePacker packer = CustomPacker.get(klass); if(packer != null) { @@ -134,15 +132,15 @@ public class ClassTemplate implements Template { return; } - if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { + if (isAnnotated(klass, MessagePackMessage.class)) { Template tmpl = DynamicTemplate.create(klass); CustomMessage.register(klass, tmpl); tmpl.pack(pk, o); return; - } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { + } else if (isAnnotated(klass, MessagePackDelegate.class)) { // FIXME DelegatePacker throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { + } else if (isAnnotated(klass, MessagePackOrdinalEnum.class)) { Template tmpl = DynamicOrdinalEnumTemplate.create(klass); CustomMessage.register(klass, tmpl); tmpl.pack(pk, o); @@ -171,14 +169,14 @@ public class ClassTemplate implements Template { return obj; } - if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { + if (isAnnotated(klass, MessagePackMessage.class)) { Template tmpl = DynamicTemplate.create(klass); CustomMessage.register(klass, tmpl); return tmpl.unpack(pac, to); - } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { + } else if (isAnnotated(klass, MessagePackDelegate.class)) { // TODO DelegateUnpacker throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { + } else if (isAnnotated(klass, MessagePackOrdinalEnum.class)) { Template tmpl = DynamicOrdinalEnumTemplate.create(klass); CustomMessage.register(klass, tmpl); return tmpl.unpack(pac, to); @@ -187,14 +185,14 @@ public class ClassTemplate implements Template { // fallback MessageConverter converter = null; - if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { + if (isAnnotated(klass, MessagePackMessage.class)) { Template tmpl = DynamicTemplate.create(klass); CustomMessage.register(klass, tmpl); return tmpl.convert(pac.unpackObject(), to); - } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { + } else if (isAnnotated(klass, MessagePackDelegate.class)) { // TODO DelegateConverter throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { + } else if (isAnnotated(klass, MessagePackOrdinalEnum.class)) { Template tmpl = DynamicOrdinalEnumTemplate.create(klass); CustomMessage.register(klass, tmpl); return tmpl.convert(pac.unpackObject(), to); @@ -228,14 +226,14 @@ public class ClassTemplate implements Template { return obj; } - if (CustomMessage.isAnnotated(klass, MessagePackMessage.class)) { + if (isAnnotated(klass, MessagePackMessage.class)) { Template tmpl = DynamicTemplate.create(klass); CustomMessage.register(klass, tmpl); return tmpl.convert(from, to); - } else if (CustomMessage.isAnnotated(klass, MessagePackDelegate.class)) { + } else if (isAnnotated(klass, MessagePackDelegate.class)) { // TODO DelegateConverter throw new UnsupportedOperationException("not supported yet. : " + klass.getName()); - } else if (CustomMessage.isAnnotated(klass, MessagePackOrdinalEnum.class)) { + } else if (isAnnotated(klass, MessagePackOrdinalEnum.class)) { Template tmpl = DynamicOrdinalEnumTemplate.create(klass); CustomMessage.register(klass, tmpl); return tmpl.convert(from, to); @@ -249,5 +247,9 @@ public class ClassTemplate implements Template { throw new MessageTypeException(e.getMessage()); // FIXME } } + + private boolean isAnnotated(Class ao, Class with) { + return ao.getAnnotation(with) != null; + } } diff --git a/java/src/main/java/org/msgpack/template/DoubleTemplate.java b/java/src/main/java/org/msgpack/template/DoubleTemplate.java index 7bbf3f8..602e69b 100644 --- a/java/src/main/java/org/msgpack/template/DoubleTemplate.java +++ b/java/src/main/java/org/msgpack/template/DoubleTemplate.java @@ -43,6 +43,8 @@ public class DoubleTemplate implements Template { static { CustomMessage.register(Double.class, instance); + TemplateRegistry.register(Double.class, instance); + TemplateRegistry.register(double.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/FloatTemplate.java b/java/src/main/java/org/msgpack/template/FloatTemplate.java index 205c0b3..1971885 100644 --- a/java/src/main/java/org/msgpack/template/FloatTemplate.java +++ b/java/src/main/java/org/msgpack/template/FloatTemplate.java @@ -43,6 +43,8 @@ public class FloatTemplate implements Template { static { CustomMessage.register(Float.class, instance); + TemplateRegistry.register(Float.class, instance); + TemplateRegistry.register(float.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/IntegerTemplate.java b/java/src/main/java/org/msgpack/template/IntegerTemplate.java index 630aa79..6b0d9f7 100644 --- a/java/src/main/java/org/msgpack/template/IntegerTemplate.java +++ b/java/src/main/java/org/msgpack/template/IntegerTemplate.java @@ -43,6 +43,8 @@ public class IntegerTemplate implements Template { static { CustomMessage.register(Integer.class, instance); + TemplateRegistry.register(Integer.class, instance); + TemplateRegistry.register(int.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/LongTemplate.java b/java/src/main/java/org/msgpack/template/LongTemplate.java index c5c8865..08ce8ed 100644 --- a/java/src/main/java/org/msgpack/template/LongTemplate.java +++ b/java/src/main/java/org/msgpack/template/LongTemplate.java @@ -43,6 +43,8 @@ public class LongTemplate implements Template { static { CustomMessage.register(Long.class, instance); + TemplateRegistry.register(Long.class, instance); + TemplateRegistry.register(long.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/NullableTemplate.java b/java/src/main/java/org/msgpack/template/NullableTemplate.java index 0efc0cf..431da59 100644 --- a/java/src/main/java/org/msgpack/template/NullableTemplate.java +++ b/java/src/main/java/org/msgpack/template/NullableTemplate.java @@ -21,6 +21,8 @@ import java.io.IOException; import org.msgpack.*; public class NullableTemplate implements Template { + static void load() { } + private Template elementTemplate; public NullableTemplate(Template elementTemplate) { diff --git a/java/src/main/java/org/msgpack/template/ShortTemplate.java b/java/src/main/java/org/msgpack/template/ShortTemplate.java index 970ed78..a65af08 100644 --- a/java/src/main/java/org/msgpack/template/ShortTemplate.java +++ b/java/src/main/java/org/msgpack/template/ShortTemplate.java @@ -43,6 +43,8 @@ public class ShortTemplate implements Template { static { CustomMessage.register(Short.class, instance); + TemplateRegistry.register(Short.class, instance); + TemplateRegistry.register(short.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/StringTemplate.java b/java/src/main/java/org/msgpack/template/StringTemplate.java index de5f7ee..538fc4e 100644 --- a/java/src/main/java/org/msgpack/template/StringTemplate.java +++ b/java/src/main/java/org/msgpack/template/StringTemplate.java @@ -43,6 +43,7 @@ public class StringTemplate implements Template { static { CustomMessage.register(String.class, instance); + TemplateRegistry.register(String.class, instance); } }