GWT RequestFactory не запускается должным образом после использования edit () - PullRequest
0 голосов
/ 06 марта 2012

У меня проблема с использованием «fire ()» с GWT RequestFactory после того, как я использовал его для размораживания и редактирования прокси.

Если у меня есть два объекта фабрики запросов и связанные с ними контексты, подобные этому:

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

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

с использованием «fire ()» при первом запросе работает нормально:

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

эта часть работает нормально, потому что я получаю «onSuccess».Но когда запускается метод update (), который выглядит следующим образом:

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

sendRequest2 всегда завершается ошибкой с ошибкой

Индекс ошибки сервера: 0 Размер: 0

и я поставил точку останова в коде для службы "что-то ()", и он даже не доходит до этого кода!В req2.edit () должно быть что-то, что ранит req2 и sendRequest2, но что?

Спасибо.

1 Ответ

3 голосов
/ 06 марта 2012

что такое «б»? строка xProxy x = req2.edit(b); упоминается впервые? это должно быть xProxy x = req2.edit(response);

Во всяком случае .. это не проблема .. «Ошибка сервера» означает, что RequestFactory обнаружил исключительную ситуацию во время обработки запроса на стороне сервера. Что-то (но, возможно, не что-то ()) вызывает исключение IndexOutOfBounds.

Если вы посмотрите на RequestFactoryServlet.java (который, кстати, очень легко заменить своим собственным), вы можете увидеть, что он устанавливает блок try catch, который перехватывает все исключения при обработке запроса. Он передает их в DefaultExceptionHandler, который оборачивает их в ServerFailure и возвращает вам код GWT в виде вызова onFailure ().

Простой способ определить, где выбрасывается исключение, - установить точку останова на IndexOutOfBoundsException, убедившись, что она перехватывает как «пойманные» исключения, так и необработанные.

...