private void populateAndEndSubsegment()

in aws-xray-recorder-sdk-aws-sdk/src/main/java/com/amazonaws/xray/handlers/TracingHandler.java [451:479]


    private void populateAndEndSubsegment(Subsegment currentSubsegment, Request<?> request, Response<?> response) {
        if (null != response) {
            String requestId = null;
            if (response.getAwsResponse() instanceof AmazonWebServiceResult<?>) {
                // Not all services return responses extending AmazonWebServiceResult (e.g. S3)
                ResponseMetadata metadata = ((AmazonWebServiceResult<?>) response.getAwsResponse()).getSdkResponseMetadata();
                if (null != metadata) {
                    requestId = metadata.getRequestId();
                    if (null != requestId) {
                        currentSubsegment.putAws(REQUEST_ID_SUBSEGMENT_KEY, requestId);
                    }
                }
            } else if (null != response.getHttpResponse()) { // S3 does not follow request id header convention
                if (null != response.getHttpResponse().getHeader(S3_REQUEST_ID_HEADER_KEY)) {
                    currentSubsegment.putAws(REQUEST_ID_SUBSEGMENT_KEY,
                                             response.getHttpResponse().getHeader(S3_REQUEST_ID_HEADER_KEY));
                }
                if (null != response.getHttpResponse().getHeader(EntityHeaderKeys.AWS.EXTENDED_REQUEST_ID_HEADER)) {
                    currentSubsegment.putAws(EntityDataKeys.AWS.EXTENDED_REQUEST_ID_KEY,
                                             response.getHttpResponse().getHeader(
                                                 EntityHeaderKeys.AWS.EXTENDED_REQUEST_ID_HEADER));
                }
            }
            currentSubsegment.putAllAws(extractResponseParameters(request, response.getAwsResponse()));
            currentSubsegment.putAllHttp(extractHttpResponseInformation(response.getHttpResponse()));
        }

        finalizeSubsegment(request);
    }