1616 */
1717public class JacksonMetadataEncoder implements MetadataEncoder , MetadataDecoder {
1818
19- private static final TypeReference <Map <String , String >> TYPE =
19+ private static final TypeReference <Map <String , String >> DEFAULT_TYPE =
2020 new TypeReference <Map <String , String >>() {};
2121
2222 private final ObjectMapper delegate ;
23+ private final TypeReference <?> type ;
2324
2425 /**
2526 * Create instance with external {@link ObjectMapper}.
2627 *
2728 * @param delegate jackson object mapper
29+ * @param type type of metadata
2830 */
29- public JacksonMetadataEncoder (ObjectMapper delegate ) {
31+ public JacksonMetadataEncoder (ObjectMapper delegate , TypeReference <?> type ) {
3032 this .delegate = delegate ;
33+ this .type = type ;
3134 }
3235
3336 /**
3437 * Create instance with default {@link ObjectMapper}.
3538 */
3639 public JacksonMetadataEncoder () {
3740 this .delegate = DefaultObjectMapper .OBJECT_MAPPER ;
41+ this .type = DEFAULT_TYPE ;
3842 }
3943
4044 /**
@@ -49,7 +53,7 @@ public Object decode(ByteBuffer buffer) {
4953 if (buffer .remaining () == 0 ) {
5054 return Collections .emptyMap ();
5155 }
52- return this .delegate .readValue (buffer .array (), TYPE );
56+ return this .delegate .readValue (buffer .array (), this . type );
5357 } catch (Exception e ) {
5458 throw Exceptions .propagate (e );
5559 }
@@ -64,7 +68,7 @@ public Object decode(ByteBuffer buffer) {
6468 @ Override
6569 public ByteBuffer encode (Object metadata ) {
6670 try {
67- return ByteBuffer .wrap (this .delegate .writeValueAsBytes (metadata ));
71+ return ByteBuffer .wrap (this .delegate .writerFor ( this . type ). writeValueAsBytes (metadata ));
6872 } catch (Exception e ) {
6973 throw Exceptions .propagate (e );
7074 }
0 commit comments