在使用“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
我在“something()”服务的代码中放了一个断点,它甚至都没有得到那个代码!必须有一些关于“req2.edit()”的东西会伤害req2和sendRequest2,但是什么?
感谢。
答案 0 :(得分:3)
xProxy x = req2.edit(b);
行是第一次被提及?应该是xProxy x = req2.edit(response);
无论如何..那不是问题.. “服务器错误”表示RequestFactory在处理请求(服务器端)期间捕获到异常。某些东西(但可能不是某些东西())会引发IndexOutOfBounds异常。
如果你看一下RequestFactoryServlet.java(可以用你自己的btw替换它),你可以看到它设置了一个try catch块,它在处理请求时捕获所有异常。它将它们传递给'DefaultExceptionHandler',它将它们包装在ServerFailure中,然后作为onFailure()调用返回给你GWT代码。
查找异常抛出位置的简单方法是在IndexOutOfBoundsException上设置断点,确保捕获“捕获”异常以及未捕获的异常。