Class Servlet3SnippetInjectingResponseWrapper

java.lang.Object
javax.servlet.ServletResponseWrapper
javax.servlet.http.HttpServletResponseWrapper
io.opentelemetry.javaagent.instrumentation.servlet.v3_0.snippet.Servlet3SnippetInjectingResponseWrapper
All Implemented Interfaces:
io.opentelemetry.javaagent.bootstrap.servlet.SnippetInjectingResponseWrapper, javax.servlet.http.HttpServletResponse, javax.servlet.ServletResponse

public class Servlet3SnippetInjectingResponseWrapper extends javax.servlet.http.HttpServletResponseWrapper implements io.opentelemetry.javaagent.bootstrap.servlet.SnippetInjectingResponseWrapper
Notes on Content-Length: the snippet length is only added to the content length when injection occurs and the content length was set previously.

If the Content-Length is set after snippet injection occurs (either for the first time or is set again for some reason), we intentionally do not add the snippet length, because the application server may be making that call at the end of a request when it sees the request has not been submitted, in which case it is likely using the real length of content that has been written, including the snippet length.

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
     

    Fields inherited from interface javax.servlet.http.HttpServletResponse

    SC_ACCEPTED, SC_BAD_GATEWAY, SC_BAD_REQUEST, SC_CONFLICT, SC_CONTINUE, SC_CREATED, SC_EXPECTATION_FAILED, SC_FORBIDDEN, SC_FOUND, SC_GATEWAY_TIMEOUT, SC_GONE, SC_HTTP_VERSION_NOT_SUPPORTED, SC_INTERNAL_SERVER_ERROR, SC_LENGTH_REQUIRED, SC_METHOD_NOT_ALLOWED, SC_MOVED_PERMANENTLY, SC_MOVED_TEMPORARILY, SC_MULTIPLE_CHOICES, SC_NO_CONTENT, SC_NON_AUTHORITATIVE_INFORMATION, SC_NOT_ACCEPTABLE, SC_NOT_FOUND, SC_NOT_IMPLEMENTED, SC_NOT_MODIFIED, SC_OK, SC_PARTIAL_CONTENT, SC_PAYMENT_REQUIRED, SC_PRECONDITION_FAILED, SC_PROXY_AUTHENTICATION_REQUIRED, SC_REQUEST_ENTITY_TOO_LARGE, SC_REQUEST_TIMEOUT, SC_REQUEST_URI_TOO_LONG, SC_REQUESTED_RANGE_NOT_SATISFIABLE, SC_RESET_CONTENT, SC_SEE_OTHER, SC_SERVICE_UNAVAILABLE, SC_SWITCHING_PROTOCOLS, SC_TEMPORARY_REDIRECT, SC_UNAUTHORIZED, SC_UNSUPPORTED_MEDIA_TYPE, SC_USE_PROXY
  • Constructor Summary

    Constructors
    Constructor
    Description
    Servlet3SnippetInjectingResponseWrapper(javax.servlet.http.HttpServletResponse response, String snippet)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addHeader(String name, String value)
     
    void
    addIntHeader(String name, int value)
     
    boolean
     
    javax.servlet.ServletOutputStream
     
     
    boolean
     
    boolean
     
    void
     
    void
    setContentLengthLong(long length)
     
    void
    setHeader(String name, String value)
     
    void
    setIntHeader(String name, int value)
     
    void
     

    Methods inherited from class javax.servlet.http.HttpServletResponseWrapper

    addCookie, addDateHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, getHeader, getHeaderNames, getHeaders, getStatus, sendError, sendError, sendRedirect, setDateHeader, setStatus, setStatus

    Methods inherited from class javax.servlet.ServletResponseWrapper

    flushBuffer, getBufferSize, getCharacterEncoding, getContentType, getLocale, getResponse, isCommitted, isWrapperFor, isWrapperFor, reset, resetBuffer, setBufferSize, setCharacterEncoding, setContentType, setLocale, setResponse

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface javax.servlet.ServletResponse

    flushBuffer, getBufferSize, getCharacterEncoding, getContentType, getLocale, isCommitted, reset, resetBuffer, setBufferSize, setCharacterEncoding, setContentType, setLocale

    Methods inherited from interface io.opentelemetry.javaagent.bootstrap.servlet.SnippetInjectingResponseWrapper

    getCharacterEncoding
  • Field Details

  • Constructor Details

    • Servlet3SnippetInjectingResponseWrapper

      public Servlet3SnippetInjectingResponseWrapper(javax.servlet.http.HttpServletResponse response, String snippet)
  • Method Details

    • containsHeader

      public boolean containsHeader(String name)
      Specified by:
      containsHeader in interface javax.servlet.http.HttpServletResponse
      Overrides:
      containsHeader in class javax.servlet.http.HttpServletResponseWrapper
    • setHeader

      public void setHeader(String name, String value)
      Specified by:
      setHeader in interface javax.servlet.http.HttpServletResponse
      Overrides:
      setHeader in class javax.servlet.http.HttpServletResponseWrapper
    • addHeader

      public void addHeader(String name, String value)
      Specified by:
      addHeader in interface javax.servlet.http.HttpServletResponse
      Overrides:
      addHeader in class javax.servlet.http.HttpServletResponseWrapper
    • setIntHeader

      public void setIntHeader(String name, int value)
      Specified by:
      setIntHeader in interface javax.servlet.http.HttpServletResponse
      Overrides:
      setIntHeader in class javax.servlet.http.HttpServletResponseWrapper
    • addIntHeader

      public void addIntHeader(String name, int value)
      Specified by:
      addIntHeader in interface javax.servlet.http.HttpServletResponse
      Overrides:
      addIntHeader in class javax.servlet.http.HttpServletResponseWrapper
    • setContentLength

      public void setContentLength(int len)
      Specified by:
      setContentLength in interface javax.servlet.ServletResponse
      Overrides:
      setContentLength in class javax.servlet.ServletResponseWrapper
    • setContentLengthLong

      public void setContentLengthLong(long length) throws Throwable
      Throws:
      Throwable
    • isContentTypeTextHtml

      public boolean isContentTypeTextHtml()
      Specified by:
      isContentTypeTextHtml in interface io.opentelemetry.javaagent.bootstrap.servlet.SnippetInjectingResponseWrapper
    • getOutputStream

      public javax.servlet.ServletOutputStream getOutputStream() throws IOException
      Specified by:
      getOutputStream in interface javax.servlet.ServletResponse
      Overrides:
      getOutputStream in class javax.servlet.ServletResponseWrapper
      Throws:
      IOException
    • getWriter

      public PrintWriter getWriter() throws IOException
      Specified by:
      getWriter in interface javax.servlet.ServletResponse
      Overrides:
      getWriter in class javax.servlet.ServletResponseWrapper
      Throws:
      IOException
    • updateContentLengthIfPreviouslySet

      public void updateContentLengthIfPreviouslySet()
      Specified by:
      updateContentLengthIfPreviouslySet in interface io.opentelemetry.javaagent.bootstrap.servlet.SnippetInjectingResponseWrapper
    • isNotSafeToInject

      public boolean isNotSafeToInject()
      Specified by:
      isNotSafeToInject in interface io.opentelemetry.javaagent.bootstrap.servlet.SnippetInjectingResponseWrapper