Tuesday, January 3, 2012

Overriding processCall to intercept RPC calls

I needed a solution to intercept RPC calls to make sure the user session hasn't expired.  Here is my code:


@Override
    public String processCall(String payload) throws SerializationException {

        boolean validSession = (!getThreadLocalRequest().getSession().isNew());
           
        RPCRequest rpcRequest =  RPC.decodeRequest(payload, this.remoteServiceClass);
           
        if(!validSession && !rpcRequest.getMethod().getName().equalsIgnoreCase("isUserLoggedIn")){
            return RPC.encodeResponseForFailure(null, new IncompatibleRemoteServiceException("Logged out"));
        }else{
            return super.processCall(payload);
        }
       
      }

Everything works however I had to use the IncompatibleRemoteServiceException rather then a custom exception.  Whenever I tried to use my custom exception or IllegalArgumentException with RPC.encodeResponseForFailure() I would get a 500 response from my RPC call.  Anyone have any information that could help me return a custom exception?

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.

No comments:

Post a Comment