Class RPCServletUtils


  • public class RPCServletUtils
    extends java.lang.Object
    Utility class containing helper methods used by servlets that integrate with the RPC system.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) static int BUFFER_SIZE
      Package protected for use in tests.
      static java.nio.charset.Charset CHARSET_UTF8
      The UTF-8 Charset.
      static java.lang.String CHARSET_UTF8_NAME  
    • Method Summary

      All Methods Static Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      static boolean acceptsGzipEncoding​(javax.servlet.http.HttpServletRequest request)
      Returns true if the HttpServletRequest accepts Gzip encoding.
      static boolean exceedsUncompressedContentLengthLimit​(java.lang.String content)
      Returns true if the response content's estimated UTF-8 byte length exceeds 256 bytes.
      static java.nio.charset.Charset getCharset​(java.lang.String encoding)
      Get the Charset for a named character set.
      static boolean isExpectedException​(java.lang.reflect.Method serviceIntfMethod, java.lang.Throwable cause)
      Returns true if the Method definition on the service is specified to throw the exception contained in the InvocationTargetException or false otherwise.
      static java.lang.String readContent​(javax.servlet.http.HttpServletRequest request, java.lang.String expectedContentType, java.lang.String expectedCharSet)
      Returns the content of an HttpServletRequest by decoding it using expectedCharSet, or UTF-8 if expectedCharSet is null.
      static java.lang.String readContentAsGwtRpc​(javax.servlet.http.HttpServletRequest request)
      Returns the content of an HttpServletRequest, after verifying a gwt/x-gwt-rpc; charset=utf-8 content type.
      static java.lang.String readContentAsUtf8​(javax.servlet.http.HttpServletRequest request)
      static java.lang.String readContentAsUtf8​(javax.servlet.http.HttpServletRequest request, boolean checkHeaders)
      static void setGzipEncodingHeader​(javax.servlet.http.HttpServletResponse response)
      Sets the correct header to indicate that a response is gzipped.
      static boolean shouldGzipResponseContent​(javax.servlet.http.HttpServletRequest request, java.lang.String responseContent)
      Returns true if the request accepts gzip encoding and the response content's estimated UTF-8 byte length exceeds 256 bytes.
      static void writeResponse​(javax.servlet.ServletContext servletContext, javax.servlet.http.HttpServletResponse response, java.lang.String responseContent, boolean gzipResponse)
      Write the response content into the HttpServletResponse.
      static void writeResponseForUnexpectedFailure​(javax.servlet.ServletContext servletContext, javax.servlet.http.HttpServletResponse response, java.lang.Throwable failure)
      Called when the servlet itself has a problem, rather than the invoked third-party method.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • CHARSET_UTF8_NAME

        public static final java.lang.String CHARSET_UTF8_NAME
        See Also:
        Constant Field Values
      • CHARSET_UTF8

        public static final java.nio.charset.Charset CHARSET_UTF8
        The UTF-8 Charset. Use this to avoid concurrency bottlenecks when converting between byte arrays and Strings. See http://code.google.com/p/google-web-toolkit/issues/detail?id=6398
      • BUFFER_SIZE

        static final int BUFFER_SIZE
        Package protected for use in tests.
        See Also:
        Constant Field Values
    • Method Detail

      • acceptsGzipEncoding

        public static boolean acceptsGzipEncoding​(javax.servlet.http.HttpServletRequest request)
        Returns true if the HttpServletRequest accepts Gzip encoding. This is done by checking that the accept-encoding header specifies gzip as a supported encoding.
        Parameters:
        request - the request instance to test for gzip encoding acceptance
        Returns:
        true if the HttpServletRequest accepts Gzip encoding
      • exceedsUncompressedContentLengthLimit

        public static boolean exceedsUncompressedContentLengthLimit​(java.lang.String content)
        Returns true if the response content's estimated UTF-8 byte length exceeds 256 bytes.
        Parameters:
        content - the contents of the response
        Returns:
        true if the response content's estimated UTF-8 byte length exceeds 256 bytes
      • getCharset

        public static java.nio.charset.Charset getCharset​(java.lang.String encoding)
        Get the Charset for a named character set. Caches Charsets to work around a concurrency bottleneck in FastCharsetProvider. See http://code.google.com/p/google-web-toolkit/issues/detail?id=6398
        Parameters:
        encoding - the name of the Charset to get. If this is null the default UTF-8 character set will be returned.
        Returns:
        the named Charset.
      • isExpectedException

        public static boolean isExpectedException​(java.lang.reflect.Method serviceIntfMethod,
                                                  java.lang.Throwable cause)
        Returns true if the Method definition on the service is specified to throw the exception contained in the InvocationTargetException or false otherwise. NOTE we do not check that the type is serializable here. We assume that it must be otherwise the application would never have been allowed to run.
        Parameters:
        serviceIntfMethod - the method from the RPC request
        cause - the exception that the method threw
        Returns:
        true if the exception's type is in the method's signature
      • readContent

        public static java.lang.String readContent​(javax.servlet.http.HttpServletRequest request,
                                                   java.lang.String expectedContentType,
                                                   java.lang.String expectedCharSet)
                                            throws java.io.IOException,
                                                   javax.servlet.ServletException
        Returns the content of an HttpServletRequest by decoding it using expectedCharSet, or UTF-8 if expectedCharSet is null.
        Parameters:
        request - the servlet request whose content we want to read
        expectedContentType - the expected content (i.e. 'type/subtype' only) in the Content-Type request header, or null if no validation is to be performed, and you are willing to allow for some types of cross type security attacks
        expectedCharSet - the expected request charset, or null if no charset validation is to be performed and UTF-8 should be assumed
        Returns:
        the content of an HttpServletRequest by decoding it using expectedCharSet, or UTF-8 if expectedCharSet is null
        Throws:
        java.io.IOException - if the request's input stream cannot be accessed, read from or closed
        javax.servlet.ServletException - if the request's content type does not equal the supplied expectedContentType or expectedCharSet
      • readContentAsGwtRpc

        public static java.lang.String readContentAsGwtRpc​(javax.servlet.http.HttpServletRequest request)
                                                    throws java.io.IOException,
                                                           javax.servlet.ServletException
        Returns the content of an HttpServletRequest, after verifying a gwt/x-gwt-rpc; charset=utf-8 content type.
        Parameters:
        request - the servlet request whose content we want to read
        Returns:
        the content of an HttpServletRequest by decoding it using UTF-8
        Throws:
        java.io.IOException - if the request's input stream cannot be accessed, read from or closed
        javax.servlet.ServletException - if the request's content type is not gwt/x-gwt-rpc; charset=utf-8, ignoring case
      • readContentAsUtf8

        @Deprecated
        public static java.lang.String readContentAsUtf8​(javax.servlet.http.HttpServletRequest request)
                                                  throws java.io.IOException,
                                                         javax.servlet.ServletException
        Returns the content of an HttpServletRequest by decoding it using the UTF-8 charset.
        Parameters:
        request - the servlet request whose content we want to read
        Returns:
        the content of an HttpServletRequest by decoding it using the UTF-8 charset
        Throws:
        java.io.IOException - if the requests input stream cannot be accessed, read from or closed
        javax.servlet.ServletException - if the content length of the request is not specified of if the request's content type is not 'text/x-gwt-rpc' and 'charset=utf-8'
      • readContentAsUtf8

        @Deprecated
        public static java.lang.String readContentAsUtf8​(javax.servlet.http.HttpServletRequest request,
                                                         boolean checkHeaders)
                                                  throws java.io.IOException,
                                                         javax.servlet.ServletException
        Returns the content of an HttpServletRequest by decoding it using the UTF-8 charset.
        Parameters:
        request - the servlet request whose content we want to read
        checkHeaders - Specify 'true' to check the Content-Type header to see that it matches the expected value 'text/x-gwt-rpc' and the content encoding is UTF-8. Disabling this check may allow some types of cross type security attacks.
        Returns:
        the content of an HttpServletRequest by decoding it using the UTF-8 charset
        Throws:
        java.io.IOException - if the requests input stream cannot be accessed, read from or closed
        javax.servlet.ServletException - if the content length of the request is not specified of if the request's content type is not 'text/x-gwt-rpc' and 'charset=utf-8'
      • setGzipEncodingHeader

        public static void setGzipEncodingHeader​(javax.servlet.http.HttpServletResponse response)
        Sets the correct header to indicate that a response is gzipped.
      • shouldGzipResponseContent

        public static boolean shouldGzipResponseContent​(javax.servlet.http.HttpServletRequest request,
                                                        java.lang.String responseContent)
        Returns true if the request accepts gzip encoding and the response content's estimated UTF-8 byte length exceeds 256 bytes.
        Parameters:
        request - the request associated with the response content
        responseContent - a string that will be
        Returns:
        true if the request accepts gzip encoding and the response content's estimated UTF-8 byte length exceeds 256 bytes
      • writeResponse

        public static void writeResponse​(javax.servlet.ServletContext servletContext,
                                         javax.servlet.http.HttpServletResponse response,
                                         java.lang.String responseContent,
                                         boolean gzipResponse)
                                  throws java.io.IOException
        Write the response content into the HttpServletResponse. If gzipResponse is true, the response content will be gzipped prior to being written into the response.
        Parameters:
        servletContext - servlet context for this response
        response - response instance
        responseContent - a string containing the response content
        gzipResponse - if true the response content will be gzip encoded before being written into the response
        Throws:
        java.io.IOException - if reading, writing, or closing the response's output stream fails
      • writeResponseForUnexpectedFailure

        public static void writeResponseForUnexpectedFailure​(javax.servlet.ServletContext servletContext,
                                                             javax.servlet.http.HttpServletResponse response,
                                                             java.lang.Throwable failure)
        Called when the servlet itself has a problem, rather than the invoked third-party method. It writes a simple 500 message back to the client.
        Parameters:
        servletContext -
        response -
        failure -