使用RequestFactory保存到GAE时出现NullPointerException

时间:2013-07-19 17:29:34

标签: java requestfactory objectify

我试图坚持一个带有客体化但却没有成功的简单课程。

长篇大论道歉,但我认为更多信息要好于更少。

我跟随David M. Chandler的例子:

http://turbomanage.wordpress.com/2011/03/25/using-gwt-requestfactory-with-objectify/

但我一直收到NullPointerException。

我不知道我做错了什么,但我使用的课程如下:

我的代理,DatastoreObjectProxy:

@ProxyFor(value = DatastoreObject.class, locator = ObjectifyLocator.class)
public interface DatastoreObjectProxy extends EntityProxy{

    Long getId();
    void setId(Long id);
    Integer getVersion();
    void setVersion(Integer id);

}

和BeingProxy:

@ProxyFor(value = Being.class, locator = ObjectifyLocator.class)
public interface BeingProxy extends DatastoreObjectProxy {

    String getName();
    void setName(String name);
    String getFiscalNumber();
    void setFiscalNumber(String fiscalNumber);

}

和我的要求工厂:

public interface MyRequestFactory extends RequestFactory{

    @Service(value = BeingDao.class, locator = DaoServiceLocator.class)
    interface BeingRequestContext extends RequestContext {
        Request<List<BeingProxy>> listAll();
        Request<Void> save(BeingProxy being);
        Request<BeingProxy> saveAndReturn(BeingProxy being);
        Request<Void> removeBeing(BeingProxy being);
    }

    BeingRequestContext beingRequestContext();

}

最后,我的UI使用以下代码来创建和检索Being实体:

@UiHandler( “btnAdd”)     void onBtnAddClick(ClickEvent事件){

    //Validate name
//TODO warn user if invalid
if (txtName==null||txtName.getText().equals("")){return;}
String n = txtName.getText();

//Validate fiscal number
//TODO warn user if invalid
if (txtFiscalNumber==null||txtFiscalNumber.getText().equals("")){return;}
String fn = txtFiscalNumber.getText();

BeingRequestContext reqCtx = rf.beingRequestContext();
final BeingProxy being = reqCtx.create(BeingProxy.class);
being.setName(n);
being.setFiscalNumber(fn);

Request<BeingProxy> saveRequest = reqCtx.saveAndReturn(being);
saveRequest.fire(new Receiver<BeingProxy>(){
    @Override
    public void onSuccess(BeingProxy response) {
        addToList(response);
    }
});

抛出前面提到的异常。

我注意到服务器代码是笔记执行的。所以我猜问题出在请求工厂或客户端。但是我对代码进行了三重检查,没有发现任何错误。

感谢您的时间。

最诚挚的问候。

2 个答案:

答案 0 :(得分:1)

我想出了这个。我没有正确初始化请求工厂。我不得不用事件总线初始化它:

final MyRequestFactory rf = GWT.create(MyRequestFactory.class);

        EventBus eventBus = new SimpleEventBus();
        rf.initialize(eventBus);

答案 1 :(得分:0)

您需要在objectify服务中注册对象类,以便定位器找到它们。

在声明类后立即在ObjectifyLocator.java中添加以下代码:

public class ObjectifyLocator {
    static {
       ObjectifyService.register(DatastoreObject.class);
       ObjectifyService.register(Being.class);
     }

}