1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.codec.delimited.serialization;
21
22 import org.apache.mina.codec.IoBuffer;
23 import org.apache.mina.codec.delimited.IoBufferDecoder;
24 import org.apache.thrift.TBase;
25 import org.apache.thrift.TDeserializer;
26 import org.apache.thrift.TException;
27 import org.apache.thrift.protocol.TBinaryProtocol;
28
29
30
31
32 public class ThriftDynamicMessageDecoder extends
33 IoBufferDecoder<ThriftDynamicMessageDecoder.ThriftSerializedMessage> {
34 private final TDeserializer deserializer = new TDeserializer(
35 new TBinaryProtocol.Factory());
36
37 @Override
38 public ThriftSerializedMessage decode(IoBuffer buffer) {
39 return new ThriftSerializedMessage(deserializer, buffer);
40 }
41
42 public static final class ThriftSerializedMessage {
43 private final IoBuffer buffer;
44
45 private final TDeserializer deserializer;
46
47 public ThriftSerializedMessage(TDeserializer deserializer,
48 IoBuffer buffer) {
49 this.buffer = buffer;
50 this.deserializer = deserializer;
51 }
52
53 public <L extends TBase<?, ?>> L get(Class<L> clazz)
54 throws InstantiationException, IllegalAccessException,
55 TException {
56 L object = clazz.newInstance();
57 byte array[] = new byte[buffer.remaining()];
58 buffer.get(array);
59 deserializer.deserialize(object, array);
60 return object;
61 }
62 }
63
64 public static ThriftDynamicMessageDecoder newInstance() {
65 return new ThriftDynamicMessageDecoder();
66 }
67 }