/ / GWT RequestFactory no se dispara correctamente después de usar edit () - google-app-engine, gwt, requestfactory

GWT RequestFactory no se dispara correctamente después de usar edit () - google-app-engine, gwt, requestfactory

Tengo un problema al usar "fire ()" con un GWT RequestFactory después de haberlo utilizado para descongelar y editar un proxy.

Si tengo dos objetos de fábrica de solicitud y sus contextos asociados como este:

private SyntheticRequest req1 = requestFactory.someRequest();
private Request<xProxy> sendRequest1 = req1.something();

private SyntheticRequest req2 = requestFactory.someRequest();
private Request<xProxy> sendRequest2 = req2.something();

el uso de "fire ()" en la primera solicitud funciona bien:

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();
}
});

esa parte funciona bien porque llego al "onSuccess". Pero cuando este ejecuta "update ()", que se ve así:

private void update(){
sendRequest2.fire(new Receiver<xProxy>(){
...onFailure...
...onSuccess...
});
}

sendRequest2 siempre falla, con el error

Índice de error del servidor: 0 Tamaño: 0

¡Y puse un punto de interrupción en el código para el servicio "algo ()" y nunca llega a ese código! Debe haber algo sobre el "req2.edit ()" que duele req2 y sendRequest2, pero ¿qué?

Gracias.

Respuestas

3 para la respuesta № 1

¿Qué es "b"? la línea xProxy x = req2.edit(b); es la primera vez que se menciona? se supone que es xProxy x = req2.edit(response);

De todos modos ... ese no es el problema ... "Error del servidor" indica que RequestFactory detectó una excepción durante el procesamiento de una solicitud, del lado del servidor. Algo (pero tal vez no algo) está lanzando una excepción IndexOutOfBounds.

Si echa un vistazo a RequestFactoryServlet.java (que puede reemplazar fácilmente con el suyo por cierto) puede verlo configurando un bloque try catch que detecta todas las excepciones al procesar una solicitud. Los pasa a "DefaultExceptionHandler", que los envuelve en un ServerFailure, y se le devuelve el código GWT como una llamada onFailure ().

Una forma fácil de encontrar dónde se está lanzando la excepción es establecer un punto de interrupción en la excepción IndexOutOfBoundsException, asegurándose de capturar las excepciones "atrapadas", así como las no detectadas.