apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JavaxApmAsyncListener.java [137:174]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    private void endTransaction(AsyncEvent event) {
        // To ensure transaction is ended only by a single event
        if (completed.getAndSet(true) || transaction == null) {
            return;
        }

        try {
            HttpServletRequest request = (HttpServletRequest) event.getSuppliedRequest();
            request.removeAttribute(TRANSACTION_ATTRIBUTE);

            HttpServletResponse response = (HttpServletResponse) event.getSuppliedResponse();
            final Response resp = transaction.getContext().getResponse();
            if (transaction.isSampled() && servletTransactionHelper.isCaptureHeaders()) {
                for (String headerName : response.getHeaderNames()) {
                    resp.addHeader(headerName, response.getHeaders(headerName));
                }
            }
            // request.getParameterMap() may allocate a new map, depending on the servlet container implementation
            // so only call this method if necessary
            final String contentTypeHeader = request.getHeader("Content-Type");
            final Map<String, String[]> parameterMap;
            if (transaction.isSampled() && servletTransactionHelper.captureParameters(request.getMethod(), contentTypeHeader)) {
                parameterMap = request.getParameterMap();
            } else {
                parameterMap = null;
            }
            Throwable throwableToSend = event.getThrowable();
            if (throwableToSend == null) {
                throwableToSend = throwable;
            }
            servletTransactionHelper.onAfter(transaction, throwableToSend,
                response.isCommitted(), response.getStatus(), true, request.getMethod(), parameterMap,
                request.getServletPath(), request.getPathInfo(), contentTypeHeader, false
            );
        } finally {
            asyncContextAdviceHelperImpl.recycle(this);
        }
    }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



apm-agent-plugins/apm-servlet-plugin/src/main/java/co/elastic/apm/agent/servlet/helper/JakartaApmAsyncListener.java [138:175]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    private void endTransaction(AsyncEvent event) {
        // To ensure transaction is ended only by a single event
        if (completed.getAndSet(true) || transaction == null) {
            return;
        }

        try {
            HttpServletRequest request = (HttpServletRequest) event.getSuppliedRequest();
            request.removeAttribute(TRANSACTION_ATTRIBUTE);

            HttpServletResponse response = (HttpServletResponse) event.getSuppliedResponse();
            final Response resp = transaction.getContext().getResponse();
            if (transaction.isSampled() && servletTransactionHelper.isCaptureHeaders()) {
                for (String headerName : response.getHeaderNames()) {
                    resp.addHeader(headerName, response.getHeaders(headerName));
                }
            }
            // request.getParameterMap() may allocate a new map, depending on the servlet container implementation
            // so only call this method if necessary
            final String contentTypeHeader = request.getHeader("Content-Type");
            final Map<String, String[]> parameterMap;
            if (transaction.isSampled() && servletTransactionHelper.captureParameters(request.getMethod(), contentTypeHeader)) {
                parameterMap = request.getParameterMap();
            } else {
                parameterMap = null;
            }
            Throwable throwableToSend = event.getThrowable();
            if (throwableToSend == null) {
                throwableToSend = throwable;
            }
            servletTransactionHelper.onAfter(transaction, throwableToSend,
                response.isCommitted(), response.getStatus(), true, request.getMethod(), parameterMap,
                request.getServletPath(), request.getPathInfo(), contentTypeHeader, false
            );
        } finally {
            asyncContextAdviceHelperImpl.recycle(this);
        }
    }
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



