Hi, how are you doing? :)

I faced a problem with GWT but I decided to discuss it rather than to 
submit a bug directly:

I'm 'standardizing' the server errors behavior on my app, and I was 
surprised to see how 
com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext

is closed code: here is a snippet of how the payload is read:
public void processPayload(final Receiver<Void> receiver, String payload) {
/*some code here...     */
// Send return values
      Set<Throwable> causes = null;
      for (int i = 0, j = state.invocations.size(); i < j; i++) {
        try {
          if (response.getStatusCodes().get(i)) {
            state.invocations.get(i).onSuccess(response.getInvocationResults
().get(i));
          } else {
            ServerFailureMessage failure =
                AutoBeanCodex.decode(MessageFactoryHolder.FACTORY, 
ServerFailureMessage.class,
                    response.getInvocationResults().get(i)).as();
            state.invocations.get(i).onFail(
                new ServerFailure(failure.getMessage(), failure.
getExceptionType(), failure
                    .getStackTrace(), failure.isFatal()));
          }
        } catch (Throwable t) {
          if (causes == null) {
            causes = new HashSet<Throwable>();
          }
          causes.add(t);
        }
      }
/* and continues...*/

I was wondering why there is no method to express 
state.invocations.get(i).onSuccess

and
state.invocations.get(i).onFail


*But why am I concerned?*
I wanted to intercept the server failures and use an exception recognition 
and an I18n mechanism to display errors accordingly (buisness errors along 
with possible actions, and system errors as a boring alert)

Fortunately I created a BasicReceiver at the very start of the project (2 
years ago) and I insisted it is important to have our own Receiver, and 
only some developers forgot to use it, so I have a centralized way to 
handle onFailure() calls. But architecturally speaking this is not good to 
rely on the fact that developers will not forget to use the good class, 
after all nothing obliges them to use it, it compiles, it works. But only 
if there is an error, there will be a per case bug.

So I wanted to propose one or both these code changes:

   - externalize methods, so  that AbstractRequestContext can be extended : 
   state.invocations.get(i).onSuccess(...) -> becomes : 
   AbstractRequestContext#onSuccess( AbstractRequest res )
   - add an observer mechanism so we can get warned of transport events
   
Note: I already have my own implementation of RequestTransport but since 
exceptions pass in the onTransportSuccess() method, I cannot detect them if 
I don't parse the payload
Note2: this post is really motivated by empathy (only to make a better GWT 
platform), It's not specific to my project, so don't take my suggestions as 
personal attacks :)

thanks for reading

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit-contributors/a5133209-deab-4784-adc9-3cd49501ac32%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to