diff options
| author | frsyuki <frsyuki@users.sourceforge.jp> | 2010-09-27 03:33:21 +0900 |
|---|---|---|
| committer | frsyuki <frsyuki@users.sourceforge.jp> | 2010-09-27 03:33:21 +0900 |
| commit | 7161a235f180fcb23e6451c6a10bfa5a55065eff (patch) | |
| tree | cbd7fdbf8fea6be228c0ccd53e456904db664da1 /java/src | |
| parent | 391034a7859dac3e1c77164c46da03026ec4d743 (diff) | |
| download | msgpack-python-7161a235f180fcb23e6451c6a10bfa5a55065eff.tar.gz | |
java: uses CustomMessage class on Packer, Unpacker and ClassTemplate
Diffstat (limited to 'java/src')
| -rw-r--r-- | java/src/main/java/org/msgpack/CustomConverter.java | 4 | ||||
| -rw-r--r-- | java/src/main/java/org/msgpack/CustomPacker.java | 4 | ||||
| -rw-r--r-- | java/src/main/java/org/msgpack/CustomUnpacker.java | 4 | ||||
| -rw-r--r-- | java/src/main/java/org/msgpack/Packer.java | 16 | ||||
| -rw-r--r-- | java/src/main/java/org/msgpack/Templates.java | 4 | ||||
| -rw-r--r-- | java/src/main/java/org/msgpack/Unpacker.java | 23 | ||||
| -rw-r--r-- | java/src/main/java/org/msgpack/template/ClassTemplate.java | 23 |
7 files changed, 62 insertions, 16 deletions
diff --git a/java/src/main/java/org/msgpack/CustomConverter.java b/java/src/main/java/org/msgpack/CustomConverter.java index 5905419..4351464 100644 --- a/java/src/main/java/org/msgpack/CustomConverter.java +++ b/java/src/main/java/org/msgpack/CustomConverter.java @@ -20,8 +20,8 @@ package org.msgpack; import java.util.Map; import java.util.HashMap; -// FIXME public? -class CustomConverter { +// FIXME package private? +public class CustomConverter { public static void register(Class target, MessageConverter converter) { map.put(target, converter); } diff --git a/java/src/main/java/org/msgpack/CustomPacker.java b/java/src/main/java/org/msgpack/CustomPacker.java index f828c31..f0c6b62 100644 --- a/java/src/main/java/org/msgpack/CustomPacker.java +++ b/java/src/main/java/org/msgpack/CustomPacker.java @@ -20,8 +20,8 @@ package org.msgpack; import java.util.Map; import java.util.HashMap; -// FIXME public? -class CustomPacker { +// FIXME package private? +public class CustomPacker { public static void register(Class target, MessagePacker converter) { map.put(target, converter); } diff --git a/java/src/main/java/org/msgpack/CustomUnpacker.java b/java/src/main/java/org/msgpack/CustomUnpacker.java index 255368d..b6047b8 100644 --- a/java/src/main/java/org/msgpack/CustomUnpacker.java +++ b/java/src/main/java/org/msgpack/CustomUnpacker.java @@ -20,8 +20,8 @@ package org.msgpack; import java.util.Map; import java.util.HashMap; -// FIXME public? -class CustomUnpacker { +// FIXME package private? +public class CustomUnpacker { public static void register(Class target, MessageUnpacker converter) { map.put(target, converter); } diff --git a/java/src/main/java/org/msgpack/Packer.java b/java/src/main/java/org/msgpack/Packer.java index 687f09c..dd8cdee 100644 --- a/java/src/main/java/org/msgpack/Packer.java +++ b/java/src/main/java/org/msgpack/Packer.java @@ -473,11 +473,19 @@ public class Packer { return packDouble((Double)o); } else if(o instanceof BigInteger) { return packBigInteger((BigInteger)o); - } else { - // FIXME check CustomPacker.get(o.getClass()); - // FIXME check annotations - throw new MessageTypeException("unknown object "+o+" ("+o.getClass()+")"); } + + Class klass = o.getClass(); + + MessagePacker packer = CustomPacker.get(klass); + if(packer != null) { + packer.pack(this, o); + return this; + } + + // FIXME check annotations -> code generation -> CustomMessage.registerPacker + + throw new MessageTypeException("unknown object "+o+" ("+o.getClass()+")"); } } diff --git a/java/src/main/java/org/msgpack/Templates.java b/java/src/main/java/org/msgpack/Templates.java index 4c3fdae..a31dd91 100644 --- a/java/src/main/java/org/msgpack/Templates.java +++ b/java/src/main/java/org/msgpack/Templates.java @@ -28,6 +28,10 @@ public class Templates { return new MapTemplate(keyTemplate, valueTemplate); } + public static Template tClass(Class target) { + return new ClassTemplate(target); + } + public static final Template TString = StringTemplate.getInstance(); diff --git a/java/src/main/java/org/msgpack/Unpacker.java b/java/src/main/java/org/msgpack/Unpacker.java index 1b5621f..4e39748 100644 --- a/java/src/main/java/org/msgpack/Unpacker.java +++ b/java/src/main/java/org/msgpack/Unpacker.java @@ -573,10 +573,25 @@ public class Unpacker implements Iterable<MessagePackObject> { obj.messageUnpack(this); } - final public Object unpack(Class klass) throws MessageTypeException { - // FIXME check MessageUnpackable - // FIXME check CustomPacker - // FIXME check annotations + final public Object unpack(Class klass) throws IOException, MessageTypeException, InstantiationException, IllegalAccessException { + if(MessageUnpackable.class.isAssignableFrom(klass)) { + Object obj = klass.newInstance(); + ((MessageUnpackable)obj).messageUnpack(this); + return obj; + } + + MessageUnpacker unpacker = CustomUnpacker.get(klass); + if(unpacker != null) { + return unpacker.unpack(this); + } + + // FIXME check annotations -> code generation -> CustomMessage.registerTemplate + + MessageConverter converter = CustomConverter.get(klass); + if(converter != null) { + return converter.convert(unpackObject()); + } + throw new MessageTypeException(); } } diff --git a/java/src/main/java/org/msgpack/template/ClassTemplate.java b/java/src/main/java/org/msgpack/template/ClassTemplate.java index b5ed854..c529edd 100644 --- a/java/src/main/java/org/msgpack/template/ClassTemplate.java +++ b/java/src/main/java/org/msgpack/template/ClassTemplate.java @@ -28,16 +28,35 @@ public class ClassTemplate implements Template { } public Object unpack(Unpacker pac) throws IOException, MessageTypeException { - return pac.unpack(klass); + try { + return pac.unpack(klass); + } catch (IllegalAccessException e) { + throw new MessageTypeException(e.getMessage()); // FIXME + } catch (InstantiationException e) { + throw new MessageTypeException(e.getMessage()); // FIXME + } } public Object convert(MessagePackObject from) throws MessageTypeException { + if(MessageConvertable.class.isAssignableFrom(klass)) { + Object obj; + try { + obj = klass.newInstance(); + } catch (IllegalAccessException e) { + throw new MessageTypeException(e.getMessage()); // FIXME + } catch (InstantiationException e) { + throw new MessageTypeException(e.getMessage()); // FIXME + } + ((MessageConvertable)obj).messageConvert(from); + return obj; + } + MessageConverter converter = CustomConverter.get(klass); if(converter != null) { return converter.convert(from); } - // FIXME check annotations + // FIXME check annotations -> code generation -> CustomMessage.registerTemplate throw new MessageTypeException(); } |
