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
23 import org.apache.mina.codec.IoBuffer;
24 import org.apache.mina.codec.ProtocolDecoderException;
25 import org.apache.mina.codec.delimited.IoBufferDecoder;
26 import org.apache.thrift.TBase;
27 import org.apache.thrift.TDeserializer;
28 import org.apache.thrift.TException;
29 import org.apache.thrift.protocol.TBinaryProtocol;
30
31
32
33
34
35
36
37
38 public class ThriftMessageDecoder<OUTPUT extends TBase<?, ?>> extends IoBufferDecoder<OUTPUT> {
39 private final TDeserializer deserializer = new TDeserializer(new TBinaryProtocol.Factory());
40
41 private final Class<OUTPUT> clazz;
42
43
44
45
46
47
48 public ThriftMessageDecoder(Class<OUTPUT> clazz) {
49 super();
50 this.clazz = clazz;
51 }
52
53 public static <L extends TBase<?, ?>> ThriftMessageDecoder<L> newInstance(Class<L> clazz) {
54 return new ThriftMessageDecoder<L>(clazz);
55 }
56
57
58
59
60 @Override
61 public OUTPUT decode(IoBuffer input) {
62 OUTPUT object;
63 try {
64 byte array[] = new byte[input.remaining()];
65 input.get(array);
66 object = clazz.newInstance();
67 deserializer.deserialize(object, array);
68 return object;
69 } catch (TException e) {
70 throw new ProtocolDecoderException(e);
71 } catch (InstantiationException e) {
72 throw new ProtocolDecoderException(e);
73 } catch (IllegalAccessException e) {
74 throw new ProtocolDecoderException(e);
75 }
76 }
77
78 }