From e3bf8a404b993da62676d1d435e49a37c404fe3b Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 24 Oct 2010 19:32:45 +0900 Subject: java: adds MessagePack class --- java/src/main/java/org/msgpack/MessagePack.java | 123 ++++++++++++++++++++++++ java/src/main/java/org/msgpack/Unpacker.java | 5 +- 2 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 java/src/main/java/org/msgpack/MessagePack.java (limited to 'java/src/main') diff --git a/java/src/main/java/org/msgpack/MessagePack.java b/java/src/main/java/org/msgpack/MessagePack.java new file mode 100644 index 0000000..f9dcce8 --- /dev/null +++ b/java/src/main/java/org/msgpack/MessagePack.java @@ -0,0 +1,123 @@ +// +// MessagePack for Java +// +// Copyright (C) 2009-2010 FURUHASHI Sadayuki +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +package org.msgpack; + +import java.io.OutputStream; +import java.io.InputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +public class MessagePack { + public static byte[] pack(Object obj) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try { + new Packer(out).pack(obj); + } catch (IOException e) { + throw new RuntimeException(e); + } + return out.toByteArray(); + } + + public static void pack(OutputStream out, Object obj) throws IOException { + new Packer(out).pack(obj); + } + + public static byte[] pack(Object obj, Template tmpl) throws MessageTypeException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + try { + new Packer(out).pack(obj, tmpl); + } catch (IOException e) { + throw new RuntimeException(e); + } + return out.toByteArray(); + } + + public static void pack(OutputStream out, Object obj, Template tmpl) throws IOException { + new Packer(out).pack(obj, tmpl); + } + + + public static MessagePackObject unpack(byte[] buffer) throws IOException { + Unpacker pac = new Unpacker(); + pac.wrap(buffer); + try { + return pac.unpackObject(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static Object unpack(byte[] buffer, Template tmpl) throws MessageTypeException { + Unpacker pac = new Unpacker(); + pac.wrap(buffer); + try { + return pac.unpack(tmpl); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static T unpack(byte[] buffer, Class klass) throws MessageTypeException { + Unpacker pac = new Unpacker(); + pac.wrap(buffer); + try { + return pac.unpack(klass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static MessagePackObject unpack(InputStream in) { + Unpacker pac = new Unpacker(in); + try { + return pac.unpackObject(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static Object unpack(InputStream in, Template tmpl) throws IOException, MessageTypeException { + Unpacker pac = new Unpacker(in); + try { + return pac.unpack(tmpl); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static T unpack(InputStream in, Class klass) throws IOException, MessageTypeException { + Unpacker pac = new Unpacker(in); + try { + return pac.unpack(klass); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + + //public static void register(Class target); // TODO: auto-detect + + //public static void register(Class target, Template tmpl); // TODO + + //public static void registerPacker(Class target, MessagePacker packer); // TODO + + //public static void registerConverter(Class target, MessageConverter converter); // TODO + + //public static void registerUnpacker(Class target, MessageUnpacker unpacker); // TODO +} + diff --git a/java/src/main/java/org/msgpack/Unpacker.java b/java/src/main/java/org/msgpack/Unpacker.java index e458b62..d07de1e 100644 --- a/java/src/main/java/org/msgpack/Unpacker.java +++ b/java/src/main/java/org/msgpack/Unpacker.java @@ -580,8 +580,9 @@ public class Unpacker implements Iterable { return tmpl.unpack(this); } - final public Object unpack(Class klass) throws IOException, MessageTypeException, InstantiationException, IllegalAccessException { - return unpack(Templates.tClass(klass)); + final public T unpack(Class klass) throws IOException, MessageTypeException { + // FIXME optional? + return (T)unpack(Templates.tOptional(Templates.tClass(klass))); } } -- cgit v1.2.1 From 19ff0dd17fee50f2ea18b6f941c9f7068260bcb7 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 24 Oct 2010 20:11:39 +0900 Subject: java: fixes ListTemplate and MapTemplate --- java/src/main/java/org/msgpack/template/ListTemplate.java | 3 ++- java/src/main/java/org/msgpack/template/MapTemplate.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'java/src/main') diff --git a/java/src/main/java/org/msgpack/template/ListTemplate.java b/java/src/main/java/org/msgpack/template/ListTemplate.java index 6703df4..f15ae52 100644 --- a/java/src/main/java/org/msgpack/template/ListTemplate.java +++ b/java/src/main/java/org/msgpack/template/ListTemplate.java @@ -34,10 +34,11 @@ public class ListTemplate implements Template { } public void pack(Packer pk, Object target) throws IOException { - if(target instanceof List) { + if(!(target instanceof List)) { throw new MessageTypeException(); } List list = (List)target; + pk.packArray(list.size()); for(Object element : list) { elementTemplate.pack(pk, element); } diff --git a/java/src/main/java/org/msgpack/template/MapTemplate.java b/java/src/main/java/org/msgpack/template/MapTemplate.java index 6925982..9b7b250 100644 --- a/java/src/main/java/org/msgpack/template/MapTemplate.java +++ b/java/src/main/java/org/msgpack/template/MapTemplate.java @@ -40,10 +40,11 @@ public class MapTemplate implements Template { } public void pack(Packer pk, Object target) throws IOException { - if(target instanceof Map) { + if(!(target instanceof Map)) { throw new MessageTypeException(); } Map map = (Map)target; + pk.packMap(map.size()); for(Map.Entry pair : map.entrySet()) { keyTemplate.pack(pk, pair.getKey()); valueTemplate.pack(pk, pair.getValue()); -- cgit v1.2.1 From 0a345cb12bb77c7afc5b29cc4568f717e7862ff6 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 24 Oct 2010 20:16:37 +0900 Subject: java: fixes CollectionTemplate --- java/src/main/java/org/msgpack/template/CollectionTemplate.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'java/src/main') diff --git a/java/src/main/java/org/msgpack/template/CollectionTemplate.java b/java/src/main/java/org/msgpack/template/CollectionTemplate.java index 0269d67..50e6b13 100644 --- a/java/src/main/java/org/msgpack/template/CollectionTemplate.java +++ b/java/src/main/java/org/msgpack/template/CollectionTemplate.java @@ -31,10 +31,11 @@ public class CollectionTemplate implements Template { } public void pack(Packer pk, Object target) throws IOException { - if(target instanceof Collection) { + if(!(target instanceof Collection)) { throw new MessageTypeException(); } Collection collection = (Collection)target; + pk.packArray(collection.size()); for(Object element : collection) { elementTemplate.pack(pk, element); } -- cgit v1.2.1 From 7ac4ad3e38d5537e83a36f2d9fb9a5ce872c0c57 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 24 Oct 2010 20:46:22 +0900 Subject: java: adds MessagePack.register methods --- java/src/main/java/org/msgpack/MessagePack.java | 43 ++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) (limited to 'java/src/main') diff --git a/java/src/main/java/org/msgpack/MessagePack.java b/java/src/main/java/org/msgpack/MessagePack.java index f9dcce8..449f8a0 100644 --- a/java/src/main/java/org/msgpack/MessagePack.java +++ b/java/src/main/java/org/msgpack/MessagePack.java @@ -21,6 +21,10 @@ import java.io.OutputStream; import java.io.InputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +//import org.msgpack.util.codegen.DynamicTemplate; // FIXME +import org.msgpack.util.codegen.DynamicPacker; +import org.msgpack.util.codegen.DynamicConverter; +import org.msgpack.util.codegen.DynamicUnpacker; public class MessagePack { public static byte[] pack(Object obj) { @@ -110,14 +114,43 @@ public class MessagePack { } - //public static void register(Class target); // TODO: auto-detect + public static void register(Class target) { // auto-detect + // FIXME + //Template tmpl; + //if(List.isAssignableFrom(target)) { + //} else if(Set.isAssignableFrom(target)) { + //} else if(Map.isAssignableFrom(target)) { + //} else if(Collection.isAssignableFrom(target)) { + //} else if(BigInteger.isAssignableFrom(target)) { + //} else { + //} + + // FIXME + //Template tmpl = DynamicTemplate.create(target); + //register(target, tmpl); + + // FIXME + CustomPacker.register(target, DynamicPacker.create(target)); + CustomConverter.register(target, DynamicConverter.create(target)); + CustomUnpacker.register(target, DynamicUnpacker.create(target)); + } - //public static void register(Class target, Template tmpl); // TODO + public static void register(Class target, Template tmpl) { + CustomPacker.register(target, tmpl); + CustomConverter.register(target, tmpl); + CustomUnpacker.register(target, tmpl); + } - //public static void registerPacker(Class target, MessagePacker packer); // TODO + public static void registerPacker(Class target, MessagePacker packer) { + CustomPacker.register(target, packer); + } - //public static void registerConverter(Class target, MessageConverter converter); // TODO + public static void registerConverter(Class target, MessageConverter converter) { + CustomConverter.register(target, converter); + } - //public static void registerUnpacker(Class target, MessageUnpacker unpacker); // TODO + public static void registerUnpacker(Class target, MessageUnpacker unpacker) { + CustomUnpacker.register(target, unpacker); + } } -- cgit v1.2.1 From 1bd347d9970ba8d00b757ece940b8a32564821e4 Mon Sep 17 00:00:00 2001 From: frsyuki Date: Sun, 24 Oct 2010 21:17:19 +0900 Subject: java: fixes CustomMessage class --- java/src/main/java/org/msgpack/CustomMessage.java | 13 +++++++++++-- java/src/main/java/org/msgpack/template/AnyTemplate.java | 2 +- .../main/java/org/msgpack/template/BigIntegerTemplate.java | 2 +- .../src/main/java/org/msgpack/template/BooleanTemplate.java | 2 +- .../main/java/org/msgpack/template/ByteArrayTemplate.java | 2 +- java/src/main/java/org/msgpack/template/ByteTemplate.java | 2 +- java/src/main/java/org/msgpack/template/DoubleTemplate.java | 2 +- java/src/main/java/org/msgpack/template/FloatTemplate.java | 2 +- .../src/main/java/org/msgpack/template/IntegerTemplate.java | 2 +- java/src/main/java/org/msgpack/template/LongTemplate.java | 2 +- java/src/main/java/org/msgpack/template/ShortTemplate.java | 2 +- java/src/main/java/org/msgpack/template/StringTemplate.java | 2 +- .../java/org/msgpack/util/codegen/DynamicCodeGenBase.java | 6 +++--- 13 files changed, 25 insertions(+), 16 deletions(-) (limited to 'java/src/main') diff --git a/java/src/main/java/org/msgpack/CustomMessage.java b/java/src/main/java/org/msgpack/CustomMessage.java index 959c9cd..832aa59 100644 --- a/java/src/main/java/org/msgpack/CustomMessage.java +++ b/java/src/main/java/org/msgpack/CustomMessage.java @@ -24,9 +24,18 @@ public class CustomMessage { CustomPacker.register(target, packer); } - public static void registerTemplate(Class target, Template tmpl) { - CustomUnpacker.register(target, tmpl); + public static void registerConverter(Class target, MessageConverter converter) { + CustomConverter.register(target, converter); + } + + public static void registerUnpacker(Class target, MessageUnpacker unpacker) { + CustomUnpacker.register(target, unpacker); + } + + public static void register(Class target, Template tmpl) { + CustomPacker.register(target, tmpl); CustomConverter.register(target, tmpl); + CustomUnpacker.register(target, tmpl); } public static boolean isAnnotated(Class target, Class with) { diff --git a/java/src/main/java/org/msgpack/template/AnyTemplate.java b/java/src/main/java/org/msgpack/template/AnyTemplate.java index fb2e1ee..91eab90 100644 --- a/java/src/main/java/org/msgpack/template/AnyTemplate.java +++ b/java/src/main/java/org/msgpack/template/AnyTemplate.java @@ -46,7 +46,7 @@ public class AnyTemplate implements Template { static final AnyTemplate instance = new AnyTemplate(); static { - CustomMessage.registerTemplate(MessagePackObject.class, instance); + CustomMessage.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 66e142b..79b5c7d 100644 --- a/java/src/main/java/org/msgpack/template/BigIntegerTemplate.java +++ b/java/src/main/java/org/msgpack/template/BigIntegerTemplate.java @@ -43,7 +43,7 @@ public class BigIntegerTemplate implements Template { static final BigIntegerTemplate instance = new BigIntegerTemplate(); static { - CustomMessage.registerTemplate(BigInteger.class, instance); + CustomMessage.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 e9fd33c..dd3367f 100644 --- a/java/src/main/java/org/msgpack/template/BooleanTemplate.java +++ b/java/src/main/java/org/msgpack/template/BooleanTemplate.java @@ -42,7 +42,7 @@ public class BooleanTemplate implements Template { static final BooleanTemplate instance = new BooleanTemplate(); static { - CustomMessage.registerTemplate(Boolean.class, instance); + CustomMessage.register(Boolean.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/ByteArrayTemplate.java b/java/src/main/java/org/msgpack/template/ByteArrayTemplate.java index 45a006f..2008b7c 100644 --- a/java/src/main/java/org/msgpack/template/ByteArrayTemplate.java +++ b/java/src/main/java/org/msgpack/template/ByteArrayTemplate.java @@ -42,7 +42,7 @@ public class ByteArrayTemplate implements Template { static final ByteArrayTemplate instance = new ByteArrayTemplate(); static { - CustomMessage.registerTemplate(byte[].class, instance); + CustomMessage.register(byte[].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 d58e8b0..0c8a31b 100644 --- a/java/src/main/java/org/msgpack/template/ByteTemplate.java +++ b/java/src/main/java/org/msgpack/template/ByteTemplate.java @@ -42,7 +42,7 @@ public class ByteTemplate implements Template { static final ByteTemplate instance = new ByteTemplate(); static { - CustomMessage.registerTemplate(Byte.class, instance); + CustomMessage.register(Byte.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/DoubleTemplate.java b/java/src/main/java/org/msgpack/template/DoubleTemplate.java index c899e73..94550eb 100644 --- a/java/src/main/java/org/msgpack/template/DoubleTemplate.java +++ b/java/src/main/java/org/msgpack/template/DoubleTemplate.java @@ -42,7 +42,7 @@ public class DoubleTemplate implements Template { static final DoubleTemplate instance = new DoubleTemplate(); static { - CustomMessage.registerTemplate(Double.class, instance); + CustomMessage.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 354e3f8..c247e29 100644 --- a/java/src/main/java/org/msgpack/template/FloatTemplate.java +++ b/java/src/main/java/org/msgpack/template/FloatTemplate.java @@ -42,7 +42,7 @@ public class FloatTemplate implements Template { static final FloatTemplate instance = new FloatTemplate(); static { - CustomMessage.registerTemplate(Float.class, instance); + CustomMessage.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 21ff0af..2dee8e0 100644 --- a/java/src/main/java/org/msgpack/template/IntegerTemplate.java +++ b/java/src/main/java/org/msgpack/template/IntegerTemplate.java @@ -42,7 +42,7 @@ public class IntegerTemplate implements Template { static final IntegerTemplate instance = new IntegerTemplate(); static { - CustomMessage.registerTemplate(Integer.class, instance); + CustomMessage.register(Integer.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 d8990af..930b7d0 100644 --- a/java/src/main/java/org/msgpack/template/LongTemplate.java +++ b/java/src/main/java/org/msgpack/template/LongTemplate.java @@ -42,7 +42,7 @@ public class LongTemplate implements Template { static final LongTemplate instance = new LongTemplate(); static { - CustomMessage.registerTemplate(Long.class, instance); + CustomMessage.register(Long.class, instance); } } diff --git a/java/src/main/java/org/msgpack/template/ShortTemplate.java b/java/src/main/java/org/msgpack/template/ShortTemplate.java index 0268797..10ac43b 100644 --- a/java/src/main/java/org/msgpack/template/ShortTemplate.java +++ b/java/src/main/java/org/msgpack/template/ShortTemplate.java @@ -42,7 +42,7 @@ public class ShortTemplate implements Template { static final ShortTemplate instance = new ShortTemplate(); static { - CustomMessage.registerTemplate(Short.class, instance); + CustomMessage.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 4a4be3e..dd31d9e 100644 --- a/java/src/main/java/org/msgpack/template/StringTemplate.java +++ b/java/src/main/java/org/msgpack/template/StringTemplate.java @@ -42,7 +42,7 @@ public class StringTemplate implements Template { static final StringTemplate instance = new StringTemplate(); static { - CustomMessage.registerTemplate(String.class, instance); + CustomMessage.register(String.class, instance); } } diff --git a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java index c80d354..c8ab3c7 100644 --- a/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java +++ b/java/src/main/java/org/msgpack/util/codegen/DynamicCodeGenBase.java @@ -581,7 +581,7 @@ public class DynamicCodeGenBase implements Constants { } else if (CustomMessage.isAnnotated(c, MessagePackMessage.class)) { // @MessagePackMessage Template tmpl = DynamicTemplate.create(c); - CustomMessage.registerTemplate(c, tmpl); + CustomMessage.register(c, tmpl); return tmpl; } else if (CustomMessage.isAnnotated(c, MessagePackDelegate.class)) { // FIXME DelegatePacker @@ -593,12 +593,12 @@ public class DynamicCodeGenBase implements Constants { MessagePackOrdinalEnum.class)) { // @MessagePackOrdinalEnum Template tmpl = DynamicOrdinalEnumTemplate.create(c); - CustomMessage.registerTemplate(c, tmpl); + CustomMessage.register(c, tmpl); return tmpl; } else if (MessageConvertable.class.isAssignableFrom(c) || MessageUnpackable.class.isAssignableFrom(c)) { Template tmpl = new MessageUnpackableConvertableTemplate(c); - CustomMessage.registerTemplate(c, tmpl); + CustomMessage.register(c, tmpl); return tmpl; } else { throw new MessageTypeException("Type error: " -- cgit v1.2.1