mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-03-27 00:35:18 +01:00
java: uses CustomMessage class on Packer, Unpacker and ClassTemplate
This commit is contained in:
parent
391034a785
commit
7161a235f1
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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()+")");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user