}
@Override
public <T extends RequestTrace> void reportRequestTrace(T requestTrace) throws IOException {
if (isActive() && requestTrace instanceof HttpRequestTrace) {
HttpRequestTrace httpRequestTrace = (HttpRequestTrace) requestTrace;
final String connectionId = httpRequestTrace.getConnectionId();
if (connectionId != null && !connectionId.trim().isEmpty()) {
logger.debug("reportRequestTrace {} ({})", requestTrace.getName(), requestTrace.getTimestamp());
final AsyncContext asyncContext = connectionIdToAsyncContextMap.remove(connectionId);
if (isActive(asyncContext)) {
logger.debug("asyncContext {}", httpRequestTrace.getConnectionId());
writeRequestTracesToResponse((HttpServletResponse) asyncContext.getResponse(), getAllRequestTraces(httpRequestTrace, connectionId));
asyncContext.complete();
} else {
bufferRequestTrace(connectionId, httpRequestTrace);
}