Ho un problema con l'uso di "fire ()" con un RequestFactory GWT dopo averlo usato per sbloccare e modificare un proxy.
Se ho due oggetti factory di richiesta e i loro contesti associati come questo:
private SyntheticRequest req1 = requestFactory.someRequest();
private Request<xProxy> sendRequest1 = req1.something();
private SyntheticRequest req2 = requestFactory.someRequest();
private Request<xProxy> sendRequest2 = req2.something();
usando "fire ()" sulla prima richiesta funziona benissimo:
sendRequest1.fire(new Receiver<xProxy>() {
@Override
public void onSuccess(xProxy response) {
...
if (somethingIsTrue){
xProxy x = req2.edit(response); //<-- **I think this causes a problem later, although the proxy "x" works as expected here.**
x.setSomething("something");
update();
}
});
quella parte funziona bene perché arrivo a "onSuccess". Ma quando questo esegue "update ()", che assomiglia a questo:
private void update(){
sendRequest2.fire(new Receiver<xProxy>(){
...onFailure...
...onSuccess...
});
}
sendRequest2 fallisce sempre, con l'errore
Indice errore server: 0 Dimensione: 0
e ho inserito un punto di interruzione nel codice per il servizio "qualcosa ()" e non arriva nemmeno a quel codice! Deve esserci qualcosa in "req2.edit ()" che danneggia req2 e sendRequest2, ma cosa?
Grazie.
risposte:
3 per risposta № 1che cos'è "b"? la linea xProxy x = req2.edit(b);
è la prima volta che viene menzionata? xProxy x = req2.edit(response);
Comunque .. questo non è il problema .. "Errore server" indica che RequestFactory ha rilevato un'eccezione durante l'elaborazione di una richiesta, lato server. Qualcosa (ma forse non qualcosa ()) sta generando un'eccezione IndexOutOfBounds.
Se dai un'occhiata a RequestFactoryServlet.java (che puoi sostituire con il tuo btw molto facilmente) puoi vederlo mentre imposta un blocco try catch che rileva tutte le eccezioni durante l'elaborazione di una richiesta. Li passa a "DefaultExceptionHandler" che li avvolge in un ServerFailure e che viene restituito al codice GWT come una chiamata onFailure ().
Un modo semplice per trovare dove viene generata l'eccezione è impostare un breakpoint su IndexOutOfBoundsException, assicurandosi di catturare eccezioni "catturate" e non rilevate.