com.google.gwt.user.server.rpc

## Class RemoteServiceServlet

- java.lang.Object
- - javax.servlet.GenericServlet
  - - javax.servlet.http.HttpServlet
    - - com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet
      - - com.google.gwt.user.server.rpc.RemoteServiceServlet

- All Implemented Interfaces:
    SerializationPolicyProvider, java.io.Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig
  Direct Known Subclasses:
    AbstractXsrfProtectedServiceServlet, RemoteLoggingServiceImpl, XsrfTokenServiceServlet

      public class RemoteServiceServlet
      extends AbstractRemoteServiceServlet
      implements SerializationPolicyProvider

  The servlet base class for your RPC service implementations that automatically deserializes incoming requests from the client and serializes outgoing responses for client/server RPCs.
  See Also:
    Serialized Form

- - ### Field Summary

    - ### Fields inherited from class com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet

      `perThreadRequest, perThreadResponse`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RemoteServiceServlet()` The default constructor used by service implementations that extend this class.
    `RemoteServiceServlet(java.lang.Object delegate)` The wrapping constructor used by service implementations that are separate from this class.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `checkPermutationStrongName()` This method is called by `processCall(String)` and will throw a SecurityException if `AbstractRemoteServiceServlet.getPermutationStrongName()` returns `null`.
    `protected SerializationPolicy` | `doGetSerializationPolicy(javax.servlet.http.HttpServletRequest request, java.lang.String moduleBaseURL, java.lang.String strongName)` Gets the `SerializationPolicy` for given module base URL and strong name if there is one.
    `SerializationPolicy` | `getSerializationPolicy(java.lang.String moduleBaseURL, java.lang.String strongName)` Returns a `SerializationPolicy` for a given module base URL and serialization policy strong name.
    `(package private) static SerializationPolicy` | `loadSerializationPolicy(javax.servlet.http.HttpServlet servlet, javax.servlet.http.HttpServletRequest request, java.lang.String moduleBaseURL, java.lang.String strongName)` Used by HybridServiceServlet.
    `protected void` | `onAfterResponseSerialized(java.lang.String serializedResponse)` Override this method to examine the serialized response that will be returned to the client.
    `protected void` | `onBeforeRequestDeserialized(java.lang.String serializedRequest)` Override this method to examine the serialized version of the request payload before it is deserialized into objects.
    `java.lang.String` | `processCall(java.lang.String payload)` Process a call originating from the given request.
    `void` | `processPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)` Standard HttpServlet method: handle the POST.
    `protected boolean` | `shouldCompressResponse(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String responsePayload)` Determines whether the response to a given servlet request should or should not be GZIP compressed.

    - ### Methods inherited from class com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet

      `doPost, doUnexpectedFailure, getPermutationStrongName, getThreadLocalRequest, getThreadLocalResponse, onAfterRequestDeserialized, readContent`

    - ### Methods inherited from class javax.servlet.http.HttpServlet

      `doDelete, doGet, doHead, doOptions, doPut, doTrace, getLastModified, service, service`

    - ### Methods inherited from class javax.servlet.GenericServlet

      `destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, init, log, log`

    - ### Methods inherited from class java.lang.Object

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

- - ### Constructor Detail

    - #### RemoteServiceServlet

          public RemoteServiceServlet()

      The default constructor used by service implementations that extend this class. The servlet will delegate AJAX requests to the appropriate method in the subclass.

    - #### RemoteServiceServlet

          public RemoteServiceServlet(java.lang.Object delegate)

      The wrapping constructor used by service implementations that are separate from this class. The servlet will delegate AJAX requests to the appropriate method in the given object.

  - ### Method Detail

    - #### loadSerializationPolicy

          static SerializationPolicy loadSerializationPolicy(javax.servlet.http.HttpServlet servlet,
                                                    javax.servlet.http.HttpServletRequest request,
                                                    java.lang.String moduleBaseURL,
                                                    java.lang.String strongName)

      Used by HybridServiceServlet.

    - #### getSerializationPolicy

          public final SerializationPolicy getSerializationPolicy(java.lang.String moduleBaseURL,
                                                   java.lang.String strongName)

      Description copied from interface: `SerializationPolicyProvider`
      Returns a `SerializationPolicy` for a given module base URL and serialization policy strong name.
      Specified by:
        `getSerializationPolicy` in interface `SerializationPolicyProvider`
      Parameters:
        `moduleBaseURL` - the URL for the module
        `strongName` - strong name of the serialization policy for the specified module URL
      Returns:
        a `SerializationPolicy` for a given module base URL and RPC strong name; must not return `null`

    - #### processCall

          public java.lang.String processCall(java.lang.String payload)
                                       throws SerializationException

      Process a call originating from the given request. Uses the `RPC.invokeAndEncodeResponse(Object, java.lang.reflect.Method, Object[])` method to do the actual work.

      Subclasses may optionally override this method to handle the payload in any way they desire (by routing the request to a framework component, for instance). The `HttpServletRequest` and `HttpServletResponse` can be accessed via the `AbstractRemoteServiceServlet.getThreadLocalRequest()` and `AbstractRemoteServiceServlet.getThreadLocalResponse()` methods.

      This is public so that it can be unit tested easily without HTTP.
      Parameters:
        `payload` - the UTF-8 request payload
      Returns:
        a string which encodes either the method's return, a checked exception thrown by the method, or an `IncompatibleRemoteServiceException`
      Throws:
        `SerializationException` - if we cannot serialize the response
        `UnexpectedException` - if the invocation throws a checked exception that is not declared in the service method's signature
        `java.lang.RuntimeException` - if the service method throws an unchecked exception (the exception will be the one thrown by the service)

    - #### processPost

          public final void processPost(javax.servlet.http.HttpServletRequest request,
                         javax.servlet.http.HttpServletResponse response)
                                 throws java.io.IOException,
                                        javax.servlet.ServletException,
                                        SerializationException

      Standard HttpServlet method: handle the POST. This doPost method swallows ALL exceptions, logs them in the ServletContext, and returns a GENERIC_FAILURE_MSG response with status code 500.
      Specified by:
        `processPost` in class `AbstractRemoteServiceServlet`
      Throws:
        `javax.servlet.ServletException`
        `SerializationException`
        `java.io.IOException`

    - #### checkPermutationStrongName

          protected void checkPermutationStrongName()
                                             throws java.lang.SecurityException

      This method is called by `processCall(String)` and will throw a SecurityException if `AbstractRemoteServiceServlet.getPermutationStrongName()` returns `null`. This method can be overridden to be a no-op if there are clients that are not expected to provide the "X-GWT-Permutation" header.
      Throws:
        `java.lang.SecurityException` - if `AbstractRemoteServiceServlet.getPermutationStrongName()` returns `null`

    - #### doGetSerializationPolicy

          protected SerializationPolicy doGetSerializationPolicy(javax.servlet.http.HttpServletRequest request,
                                                     java.lang.String moduleBaseURL,
                                                     java.lang.String strongName)

      Gets the `SerializationPolicy` for given module base URL and strong name if there is one. Override this method to provide a `SerializationPolicy` using an alternative approach.
      Parameters:
        `request` - the HTTP request being serviced
        `moduleBaseURL` - as specified in the incoming payload
        `strongName` - a strong name that uniquely identifies a serialization policy file
      Returns:
        a `SerializationPolicy` for the given module base URL and strong name, or `null` if there is none

    - #### onAfterResponseSerialized

          protected void onAfterResponseSerialized(java.lang.String serializedResponse)

      Override this method to examine the serialized response that will be returned to the client. The default implementation does nothing and need not be called by subclasses.
      Parameters:
        `serializedResponse` -

    - #### onBeforeRequestDeserialized

          protected void onBeforeRequestDeserialized(java.lang.String serializedRequest)

      Override this method to examine the serialized version of the request payload before it is deserialized into objects. The default implementation does nothing and need not be called by subclasses.
      Parameters:
        `serializedRequest` -

    - #### shouldCompressResponse

          protected boolean shouldCompressResponse(javax.servlet.http.HttpServletRequest request,
                                       javax.servlet.http.HttpServletResponse response,
                                       java.lang.String responsePayload)

      Determines whether the response to a given servlet request should or should not be GZIP compressed. This method is only called in cases where the requester accepts GZIP encoding.

      This implementation currently returns `true` if the response string's estimated byte length is longer than 256 bytes. Subclasses can override this logic.

      Parameters:
        `request` - the request being served
        `response` - the response that will be written into
        `responsePayload` - the payload that is about to be sent to the client
      Returns:
        `true` if responsePayload should be GZIP compressed, otherwise `false`.