@Override public void filter(final ContainerRequestContext containerRequestContext, final ContainerResponseContext containerResponseContext) throws IOException { HttpResponse httpResponse = new HttpResponse() { @Override public int getHttpStatusCode() { return containerResponseContext.getStatus(); } }; responseInterceptor.handle(new HttpServerResponseAdapter(httpResponse)); } }
@Override public void afterCompletion(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception ex) { final ServerSpan span = (ServerSpan) request.getAttribute(HTTP_SERVER_SPAN_ATTRIBUTE); if (span != null) { serverThreadBinder.setCurrentSpan(span); } responseInterceptor.handle(new HttpServerResponseAdapter(new HttpResponse() { @Override public int getHttpStatusCode() { return response.getStatus(); } })); }
@Override public void afterCompletion(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final Exception ex) { final ServerSpan span = (ServerSpan) request.getAttribute(HTTP_SERVER_SPAN_ATTRIBUTE); if (span != null) { serverThreadBinder.setCurrentSpan(span); } if (serverTracer != null && ex != null) { // TODO: revisit https://github.com/openzipkin/openzipkin.github.io/issues/52 String message = ex.getMessage(); if (message == null) message = ex.getClass().getSimpleName(); serverTracer.submitBinaryAnnotation("error", message); } responseInterceptor.handle(new HttpServerResponseAdapter(new HttpResponse() { // retrolambda fails to backport response::getStatus @Override public int getHttpStatusCode() { return response.getStatus(); // This won't work in Servlet 2.5 } })); } }
/** * Intercepts the server response flow and extract response information * to be published to the Zipkin server for tracing. */ @Override public void postCall(Request request, int status, ServiceMethodInfo serviceMethodInfo) throws Exception { HttpResponse httpResponse = new TraceableHttpServerResponse((Response) serviceMethodInfo .getAttribute(RESPONDER_ATTRIBUTE)); HttpServerResponseAdapter adapter = new HttpServerResponseAdapter(httpResponse); respInterceptor.handle(adapter); } }
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { String alreadyFilteredAttributeName = getAlreadyFilteredAttributeName(); boolean hasAlreadyFilteredAttribute = request.getAttribute(alreadyFilteredAttributeName) != null; if (hasAlreadyFilteredAttribute) { // Proceed without invoking this filter... filterChain.doFilter(request, response); } else { final StatusExposingServletResponse statusExposingServletResponse = new StatusExposingServletResponse((HttpServletResponse) response); requestInterceptor.handle(new HttpServerRequestAdapter(new ServletHttpServerRequest((HttpServletRequest) request), spanNameProvider)); try { filterChain.doFilter(request, statusExposingServletResponse); } finally { responseInterceptor.handle(new HttpServerResponseAdapter(new HttpResponse() { @Override public int getHttpStatusCode() { return statusExposingServletResponse.getStatus(); } })); } } }