Jackson typebase ext deser by komamitsu · Pull Request #408 · msgpack/msgpack-java

Expand Up @@ -49,6 +49,7 @@ public class MessagePackParser { private static final ThreadLocal<Tuple<Object, MessageUnpacker>> messageUnpackerHolder = new ThreadLocal<Tuple<Object, MessageUnpacker>>(); private final MessageUnpacker messageUnpacker;
private static final BigInteger LONG_MIN = BigInteger.valueOf((long) Long.MIN_VALUE); private static final BigInteger LONG_MAX = BigInteger.valueOf((long) Long.MAX_VALUE); Expand All @@ -61,6 +62,7 @@ public class MessagePackParser private long tokenPosition; private long currentPosition; private final IOContext ioContext; private ExtensionTypeCustomDeserializers extTypeCustomDesers;
private enum Type { Expand All @@ -74,6 +76,7 @@ private enum Type private String stringValue; private BigInteger biValue; private MessagePackExtensionType extensionTypeValue; private boolean reuseResourceInParser;
private abstract static class StackItem { Expand Down Expand Up @@ -116,16 +119,43 @@ private static class StackItemForArray public MessagePackParser(IOContext ctxt, int features, ObjectCodec objectCodec, InputStream in) throws IOException { this(ctxt, features, new InputStreamBufferInput(in), objectCodec, in); this(ctxt, features, objectCodec, in, true); }
public MessagePackParser( IOContext ctxt, int features, ObjectCodec objectCodec, InputStream in, boolean reuseResourceInParser) throws IOException { this(ctxt, features, new InputStreamBufferInput(in), objectCodec, in, reuseResourceInParser); }
public MessagePackParser(IOContext ctxt, int features, ObjectCodec objectCodec, byte[] bytes) throws IOException { this(ctxt, features, new ArrayBufferInput(bytes), objectCodec, bytes); this(ctxt, features, objectCodec, bytes, true); }
private MessagePackParser(IOContext ctxt, int features, MessageBufferInput input, ObjectCodec objectCodec, Object src) public MessagePackParser( IOContext ctxt, int features, ObjectCodec objectCodec, byte[] bytes, boolean reuseResourceInParser) throws IOException { this(ctxt, features, new ArrayBufferInput(bytes), objectCodec, bytes, reuseResourceInParser); }
private MessagePackParser(IOContext ctxt, int features, MessageBufferInput input, ObjectCodec objectCodec, Object src, boolean reuseResourceInParser) throws IOException { super(features); Expand All @@ -135,6 +165,14 @@ private MessagePackParser(IOContext ctxt, int features, MessageBufferInput input DupDetector dups = Feature.STRICT_DUPLICATE_DETECTION.enabledIn(features) ? DupDetector.rootDetector(this) : null; parsingContext = JsonReadContext.createRootContext(dups); this.reuseResourceInParser = reuseResourceInParser; if (!reuseResourceInParser) { this.messageUnpacker = MessagePack.newDefaultUnpacker(input); return; } else { this.messageUnpacker = null; }
MessageUnpacker messageUnpacker; Tuple<Object, MessageUnpacker> messageUnpackerTuple = messageUnpackerHolder.get(); Expand All @@ -154,6 +192,11 @@ private MessagePackParser(IOContext ctxt, int features, MessageBufferInput input messageUnpackerHolder.set(new Tuple<Object, MessageUnpacker>(src, messageUnpacker)); }
public void setExtensionTypeCustomDeserializers(ExtensionTypeCustomDeserializers extTypeCustomDesers) { this.extTypeCustomDesers = extTypeCustomDesers; }
@Override public ObjectCodec getCodec() { Expand Down Expand Up @@ -514,6 +557,12 @@ public Object getEmbeddedObject() case BYTES: return bytesValue; case EXT: if (extTypeCustomDesers != null) { ExtensionTypeCustomDeserializers.Deser deser = extTypeCustomDesers.getDeser(extensionTypeValue.getType()); if (deser != null) { return deser.deserialize(extensionTypeValue.getData()); } } return extensionTypeValue; default: throw new IllegalStateException("Invalid type=" + type); Expand Down Expand Up @@ -607,6 +656,10 @@ public String getCurrentName()
private MessageUnpacker getMessageUnpacker() { if (!reuseResourceInParser) { return this.messageUnpacker; }
Tuple<Object, MessageUnpacker> messageUnpackerTuple = messageUnpackerHolder.get(); if (messageUnpackerTuple == null) { throw new IllegalStateException("messageUnpacker is null"); Expand Down