Q:

HttpMessageNotWritableException because of org.codehaus.jackson.map. JsonMappingException while converting java.util. UnmodifiableRandomAccessList

I got the following List<ColumnFamilyDefinition> data from Cassandra
ThriftCfDef[
            keyspace=sample_data,
            name=application_data,
            columnType=STANDARD,
            comparatorType=me.prettyprint.hector.api.ddl. ComparatorType@757e1d2f,
            subComparatorType=<null>,
            comparatorTypeAlias=,
            subComparatorTypeAlias=,
            comment=,
            rowCacheSize=0.0,
            rowCacheSavePeriodInSeconds=0,
            keyCacheSize=0.0,
            readRepairChance=0.1,
            columnMetadata=[
                ThriftColumnDef[
                    name=java.nio. HeapByteBuffer[
                        pos=3208lim=3216cap=14616
                    ],
                    validationClass=org.apache.cassandra.db.marshal. UTF8Type,
                    indexType=<null>,
                    indexName=<null>
                ],
                ThriftColumnDef[
                    name=java.nio. HeapByteBuffer[
                        pos=3271lim=3280cap=14616
                    ],
                    validationClass=org.apache.cassandra.db.marshal. UTF8Type,
                    indexType=<null>,
                    indexName=<null>
                ]
            ],
            gcGraceSeconds=864000,
            keyValidationClass=org.apache.cassandra.db.marshal. UTF8Type,
            keyValidationAlias=,
            defaultValidationClass=org.apache.cassandra.db.marshal. BytesType,
            id=3656,
            maxCompactionThreshold=32,
            minCompactionThreshold=4,
            memtableOperationsInMillions=0.0,
            memtableThroughputInMb=0,
            memtableFlushAfterMins=0,
            keyCacheSavePeriodInSeconds=0,
            replicateOnWrite=true,
            compactionStrategy=org.apache.cassandra.db.compaction. SizeTieredCompactionStrategy,
            compactionStrategyOptions={

            },
            compressionOptions={
                sstable_compression=org.apache.cassandra.io.compress. SnappyCompressor
            },
            mergeShardsChance=0.0,
            rowCacheProvider=<null>,
            keyAlias=<null>,
            rowCacheKeysToSave=0
        ]

I am getting the below error because of ThriftColumnDef
HttpMessageNotWritableException : Could not write JSON: (was java.nio. BufferUnderflowException) (through reference chain: java.util. HashMap["sample_data"]->java.util. UnmodifiableRandomAccessList[2]->me.prettyprint.cassandra.service. ThriftCfDef["columnMetadata"]->java.util. ArrayList[0]->me.prettyprint.cassandra.service. ThriftColumnDef["name"]->java.nio. HeapByteBuffer["long"]); nested exception is org.codehaus.jackson.map. JsonMappingException: (was java.nio. BufferUnderflowException) (through reference chain: java.util. HashMap["sample_data"]->java.util. UnmodifiableRandomAccessList[2]->me.prettyprint.cassandra.service. ThriftCfDef["columnMetadata"]->java.util. ArrayList[0]->me.prettyprint.cassandra.service. ThriftColumnDef["name"]->java.nio. HeapByteBuffer["long"])

Below is the complete stacktrace
org.springframework.http.converter. HttpMessageNotWritableException: Could not write JSON: (was java.nio. BufferUnderflowException) (through reference chain: java.util. HashMap["sample_data"]->java.util. UnmodifiableRandomAccessList[2]->me.prettyprint.cassandra.service. ThriftCfDef["columnMetadata"]->java.util. ArrayList[0]->me.prettyprint.cassandra.service. ThriftColumnDef["name"]->java.nio. HeapByteBuffer["long"]); nested exception is org.codehaus.jackson.map. JsonMappingException: (was java.nio. BufferUnderflowException) (through reference chain: java.util. HashMap["sample_data"]->java.util. UnmodifiableRandomAccessList[2]->me.prettyprint.cassandra.service. ThriftCfDef["columnMetadata"]->java.util. ArrayList[0]->me.prettyprint.cassandra.service. ThriftColumnDef["name"]->java.nio. HeapByteBuffer["long"])
    at org.springframework.http.converter.json. MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:143)
    at org.springframework.http.converter. AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:179)
    at org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.writeWithMessageConverters(AnnotationMethodHandlerAdapter.java:1031)
    at org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.handleResponseBody(AnnotationMethodHandlerAdapter.java:989)
    at org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.getModelAndView(AnnotationMethodHandlerAdapter.java:938)
    at org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:438)
    at org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    at org.springframework.web.servlet. DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    at org.springframework.web.servlet. DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet. FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet. FrameworkServlet.doPost(FrameworkServlet.java:789)
    at javax.servlet.http. HttpServlet.service(HttpServlet.java:643)
    at javax.servlet.http. HttpServlet.service(HttpServlet.java:723)
    at org.apache.catalina.core. ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core. ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core. StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core. StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core. StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves. ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core. StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector. CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net. JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang. Thread.run(Thread.java:662)
Caused by: org.codehaus.jackson.map. JsonMappingException: (was java.nio. BufferUnderflowException) (through reference chain: java.util. HashMap["sample_data"]->java.util. UnmodifiableRandomAccessList[2]->me.prettyprint.cassandra.service. ThriftCfDef["columnMetadata"]->java.util. ArrayList[0]->me.prettyprint.cassandra.service. ThriftColumnDef["name"]->java.nio. HeapByteBuffer["long"])
    at org.codehaus.jackson.map. JsonMappingException.wrapWithPath(JsonMappingException.java:218)
    at org.codehaus.jackson.map. JsonMappingException.wrapWithPath(JsonMappingException.java:183)
    at org.codehaus.jackson.map.ser. SerializerBase.wrapAndThrow(SerializerBase.java:131)
    at org.codehaus.jackson.map.ser. BeanSerializer.serializeFields(BeanSerializer.java:183)
    at org.codehaus.jackson.map.ser. BeanSerializer.serialize(BeanSerializer.java:142)
    at org.codehaus.jackson.map.ser. BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:430)
    at org.codehaus.jackson.map.ser. BeanSerializer.serializeFields(BeanSerializer.java:175)
    at org.codehaus.jackson.map.ser. BeanSerializer.serialize(BeanSerializer.java:142)
    at org.codehaus.jackson.map.ser. ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:304)
    at org.codehaus.jackson.map.ser. ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:254)
    at org.codehaus.jackson.map.ser. ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142)
    at org.codehaus.jackson.map.ser. BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:430)
    at org.codehaus.jackson.map.ser. BeanSerializer.serializeFields(BeanSerializer.java:175)
    at org.codehaus.jackson.map.ser. BeanSerializer.serialize(BeanSerializer.java:142)
    at org.codehaus.jackson.map.ser. ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:304)
    at org.codehaus.jackson.map.ser. ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:254)
    at org.codehaus.jackson.map.ser. ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142)
    at org.codehaus.jackson.map.ser. MapSerializer.serializeFields(MapSerializer.java:287)
    at org.codehaus.jackson.map.ser. MapSerializer.serialize(MapSerializer.java:212)
    at org.codehaus.jackson.map.ser. MapSerializer.serialize(MapSerializer.java:23)
    at org.codehaus.jackson.map.ser. StdSerializerProvider._serializeValue(StdSerializerProvider.java:600)
    at org.codehaus.jackson.map.ser. StdSerializerProvider.serializeValue(StdSerializerProvider.java:280)
    at org.codehaus.jackson.map. ObjectMapper.writeValue(ObjectMapper.java:1352)
    at org.springframework.http.converter.json. MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:140)
    ... 24 more
Caused by: java.nio. BufferUnderflowException
    at java.nio. Buffer.nextGetIndex(Buffer.java:478)
    at java.nio. HeapByteBuffer.getLong(HeapByteBuffer.java:387)
    at sun.reflect. NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect. NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect. DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect. Method.invoke(Method.java:597)
    at org.codehaus.jackson.map.ser. BeanPropertyWriter.get(BeanPropertyWriter.java:467)
    at org.codehaus.jackson.map.ser. BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:402)
    at org.codehaus.jackson.map.ser. BeanSerializer.serializeFields(BeanSerializer.java:175)
    ... 44 more

How do I get this thrift data convert to valid JSON to return as a response to the end user? 

A:

The problem was with the below byte data which needs to be converted to String. 
name=java.nio. HeapByteBuffer[
  pos=3208lim=3216cap=14616
]

Below method can be used to convert byte data to String. 
Charset charset = Charset.forName("UTF-8");
CharsetDecoder decoder = charset.newDecoder();
String data = "";
int old_position = byteBuffer.position();
try {
    data = decoder.decode(java.nio. HeapByteBuffer[pos=3208lim=3216cap=14616]).toString();
    byteBuffer.position(old_position);
    System.out.println(data);
} catch (CharacterCodingException e) {
    e.printStackTrace();
}

Hope this helps solve anyone else problem.