Reviewers: rjrjr,

Description:
Improve error message when a RequestFactory 2.3 request is received.
Issue 6628.
Patch by: bobv
Review by: rjrjr


Please review this at http://gwt-code-reviews.appspot.com/1503803/

Affected files:
M user/src/com/google/web/bindery/requestfactory/server/SimpleRequestProcessor.java M user/test/com/google/web/bindery/requestfactory/gwt/client/RequestFactoryTest.java


Index: user/src/com/google/web/bindery/requestfactory/server/SimpleRequestProcessor.java
===================================================================
--- user/src/com/google/web/bindery/requestfactory/server/SimpleRequestProcessor.java (revision 10252) +++ user/src/com/google/web/bindery/requestfactory/server/SimpleRequestProcessor.java (working copy)
@@ -126,7 +126,6 @@
     try {
       process(req, responseBean.as());
     } catch (ReportableException e) {
-      e.printStackTrace();
       // Create a new response envelope, since the state is unknown
       responseBean = FACTORY.response();
       responseBean.as().setGeneralFailure(createFailureMessage(e).as());
@@ -200,7 +199,12 @@
     final RequestState source = new RequestState(service);

     // Make sure the RequestFactory is valid
-    service.resolveRequestFactory(req.getRequestFactory());
+    String requestFactoryToken = req.getRequestFactory();
+    if (requestFactoryToken == null) {
+      // Tell old clients to go away
+ throw new ReportableException("The client payload version is out of sync with the server");
+    }
+    service.resolveRequestFactory(requestFactoryToken);

     // Apply operations
     processOperationMessages(source, req);
Index: user/test/com/google/web/bindery/requestfactory/gwt/client/RequestFactoryTest.java
===================================================================
--- user/test/com/google/web/bindery/requestfactory/gwt/client/RequestFactoryTest.java (revision 10252) +++ user/test/com/google/web/bindery/requestfactory/gwt/client/RequestFactoryTest.java (working copy)
@@ -15,6 +15,7 @@
  */
 package com.google.web.bindery.requestfactory.gwt.client;

+import com.google.web.bindery.autobean.shared.AutoBeanCodex;
 import com.google.web.bindery.requestfactory.shared.EntityProxy;
 import com.google.web.bindery.requestfactory.shared.EntityProxyChange;
 import com.google.web.bindery.requestfactory.shared.EntityProxyId;
@@ -23,6 +24,8 @@
 import com.google.web.bindery.requestfactory.shared.Receiver;
 import com.google.web.bindery.requestfactory.shared.Request;
 import com.google.web.bindery.requestfactory.shared.RequestContext;
+import com.google.web.bindery.requestfactory.shared.RequestTransport;
+import com.google.web.bindery.requestfactory.shared.RequestTransport.TransportReceiver;
 import com.google.web.bindery.requestfactory.shared.ServerFailure;
 import com.google.web.bindery.requestfactory.shared.SimpleBarProxy;
 import com.google.web.bindery.requestfactory.shared.SimpleBarRequest;
@@ -31,7 +34,10 @@
 import com.google.web.bindery.requestfactory.shared.SimpleFooRequest;
 import com.google.web.bindery.requestfactory.shared.SimpleValueContext;
 import com.google.web.bindery.requestfactory.shared.SimpleValueProxy;
+import com.google.web.bindery.requestfactory.shared.impl.MessageFactoryHolder; import com.google.web.bindery.requestfactory.shared.impl.SimpleEntityProxyId; +import com.google.web.bindery.requestfactory.shared.messages.ResponseMessage; +import com.google.web.bindery.requestfactory.shared.messages.ServerFailureMessage;

 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -565,6 +571,49 @@
   }

   /**
+   * Tests the server behavior when an empty JSON object is sent.
+   */
+  public void testEmptyRequestBlankObject() {
+    delayTestFinish(DELAY_TEST_FINISH);
+    RequestTransport transport = req.getRequestTransport();
+    transport.send("{}", new TransportReceiver() {
+      @Override
+      public void onTransportFailure(ServerFailure failure) {
+        fail();
+      }
+
+      @Override
+      public void onTransportSuccess(String payload) {
+        ResponseMessage resp =
+ AutoBeanCodex.decode(MessageFactoryHolder.FACTORY, ResponseMessage.class, payload).as();
+        ServerFailureMessage failure = resp.getGeneralFailure();
+        assertNotNull(failure);
+        finishTestAndReset();
+      }
+    });
+  }
+
+  /**
+   * Tests the server behavior when a zero-length payload is sent.
+   */
+  public void testEmptyRequestZeroLength() {
+    delayTestFinish(DELAY_TEST_FINISH);
+    RequestTransport transport = req.getRequestTransport();
+    transport.send("", new TransportReceiver() {
+      @Override
+      public void onTransportFailure(ServerFailure failure) {
+        // Expect a 500 since the payload is malformed
+        finishTestAndReset();
+      }
+
+      @Override
+      public void onTransportSuccess(String payload) {
+        fail("Should not have succeeded");
+      }
+    });
+  }
+
+  /**
* Tests that enum values used only as method parameters in a RequestContext
    * are in the EnumMap. This test only applies to GWT-based clients.
    */


--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to