@Override
    public void after(Object target, Object[] args, Object result, Throwable throwable) {
        if (isDebug) {
            logger.afterInterceptor(target, args, result, throwable);
        }
        if (!validate(target)) {
            return;
        }
        final boolean shouldTrace = ((ServerMarkerFlagFieldAccessor)target)._$PINPOINT$_getServerMarkerFlag();
        if (shouldTrace) {
            InterceptorScopeInvocation currentTransaction = this.scope.getCurrentInvocation();
            Object attachment = currentTransaction.getAttachment();
            if (attachment instanceof ThriftClientCallContext) {
                ThriftClientCallContext clientCallContext = (ThriftClientCallContext)attachment;
                ThriftHeader headerKeyToBeRead = clientCallContext.getTraceHeaderToBeRead();
                if (headerKeyToBeRead == NONE) {
                    return;
                }
                ThriftRequestProperty parentTraceInfo = clientCallContext.getTraceHeader();
                if (parentTraceInfo == null) {
                    parentTraceInfo = new ThriftRequestProperty();
                    clientCallContext.setTraceHeader(parentTraceInfo);
                }
                try {
                    parentTraceInfo.setTraceHeader(headerKeyToBeRead, result);
                } catch (Throwable t) {
                    logger.warn("Error reading trace header.", t);
                } finally {
                    clientCallContext.setTraceHeaderToBeRead(NONE);
                }
            }
        }
    }
This interceptor reads a data field and if applicable, populates the corresponding parent trace data as marked by the previous interceptor.
<ul>
<li>Synchronous
<p>
<tt>TBaseProcessorProcessInterceptor</tt> -> <tt>ProcessFunctionProcessInterceptor</tt> -> <tt>TProtocolReadFieldBeginInterceptor</tt> <-> <b>
<tt>TProtocolReadTTypeInterceptor</tt></b> -> <tt>TProtocolReadMessageEndInterceptor</tt></li>
<li>Asynchronous
<p>
<tt>TBaseAsyncProcessorProcessInterceptor</tt> -> <tt>TProtocolReadMessageBeginInterceptor</tt> -> <tt>TProtocolReadFieldBeginInterceptor</tt> <-> <b>
<tt>TProtocolReadTTypeInterceptor</tt></b> -> <tt>TProtocolReadMessageEndInterceptor</tt>
</ul>
<p>
Based on Thrift 0.8.0+

@author HyunGil Jeong

@see com.navercorp.pinpoint.plugin.thrift.interceptor.server.TBaseProcessorProcessInterceptor TBaseProcessorProcessInterceptor
@see com.navercorp.pinpoint.plugin.thrift.interceptor.server.ProcessFunctionProcessInterceptor ProcessFunctionProcessInterceptor
@see com.navercorp.pinpoint.plugin.thrift.interceptor.server.async.TBaseAsyncProcessorProcessInterceptor TBaseAsyncProcessProcessInterceptor
@see com.navercorp.pinpoint.plugin.thrift.interceptor.tprotocol.server.TProtocolReadMessageBeginInterceptor TProtocolReadMessageBeginInterceptor
@see com.navercorp.pinpoint.plugin.thrift.interceptor.tprotocol.server.TProtocolReadFieldBeginInterceptor TProtocolReadFieldBeginInterceptor
@see com.navercorp.pinpoint.plugin.thrift.interceptor.tprotocol.server.TProtocolReadMessageEndInterceptor TProtocolReadMessageEndInterceptor
agent-module/plugins/thrift/src/main/java/com/navercorp/pinpoint/plugin/thrift/interceptor/tprotocol/server/TProtocolReadTTypeInterceptor.java