com.google.gwt.user.server.rpc

## Class RPCServletUtils

- java.lang.Object
- - com.google.gwt.user.server.rpc.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 and 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

    Methods
    Modifier and Type | Method and 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)` Deprecated. Use `readContent(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String)` instead.
    `static java.lang.String` | `readContentAsUtf8(javax.servlet.http.HttpServletRequest request, boolean checkHeaders)` Deprecated. Use `readContent(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String)` instead.
    `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 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.
      See Also:
        `Charset#forName(String)}`

    - #### 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

      Deprecated. Use `readContent(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String)` instead.
      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

      Deprecated. Use `readContent(javax.servlet.http.HttpServletRequest, java.lang.String, java.lang.String)` instead.
      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 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 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` -