summaryrefslogtreecommitdiff
path: root/java/src
diff options
context:
space:
mode:
authorfrsyuki <frsyuki@users.sourceforge.jp>2010-09-27 03:33:21 +0900
committerfrsyuki <frsyuki@users.sourceforge.jp>2010-09-27 03:33:21 +0900
commit7161a235f180fcb23e6451c6a10bfa5a55065eff (patch)
treecbd7fdbf8fea6be228c0ccd53e456904db664da1 /java/src
parent391034a7859dac3e1c77164c46da03026ec4d743 (diff)
downloadmsgpack-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.java4
-rw-r--r--java/src/main/java/org/msgpack/CustomPacker.java4
-rw-r--r--java/src/main/java/org/msgpack/CustomUnpacker.java4
-rw-r--r--java/src/main/java/org/msgpack/Packer.java16
-rw-r--r--java/src/main/java/org/msgpack/Templates.java4
-rw-r--r--java/src/main/java/org/msgpack/Unpacker.java23
-rw-r--r--java/src/main/java/org/msgpack/template/ClassTemplate.java23
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();
}