我正在尝试在服务器和客户端上使用AutoBean来通过AppEngines通道API发送和接收json数据。我不想将这些数据存储在数据存储区中。我已经为RequestFactoryServlet使用了这个对象的代理(下面只使用了AutoBean),所以这应该是可行的。我没有为完全复制RequestFactoryServlet的Proxy的对象编写新的Proxy,而是想使用我用于RequestFactoryServlet的代理。唯一的问题是我在编译来自我的AutoBeanFactory时遇到错误。
调用生成器 com.google.web.bindery.autobean.gwt.rebind.AutoBeanFactoryGenerator [错误] com.wmba.wmbaapp.shared.ObjectProxy参数化并不简单,但是obj方法没有提供 代表
所以我不确定该怎么做。似乎在我添加客户端之前,它能够将对象序列化为JSON就好了,但由于某种原因它不喜欢这个。这听起来像是想要我的代表,但是我无法从互联网上找到任何内容。
有人有什么想法吗?
注意:我也尝试过与EntityProxy相同的东西(这是我在AutoBean页面上读到的RequestFactory框架的基础,但是我得到了同样的错误。)
答案 0 :(得分:4)
问题在于EntityProxy
定义了不是getter的stableId
方法(名称不以get
开头)。这使得它成为一个非简单的 bean,AutoBeans需要将一个真实的bean实例包装在创建的AutoBean
(委托)中,作为参数传递您的案例中AutoBean
- ObjectProxy
的类型 - obj
的{{1}}方法。
换句话说,AutoBeans希望您的AutoBeanFactory
方法具有以下形式:
obj
最简单的解决方案是不要尝试将实体代理重用于AutoBeans。
您可以通过使用:
注释AutoBean<ObjectProxy> obj(ObjectProxy toWrap);
来使其工作
AutoBeanFactory
您可能还需要添加@Category(EntityProxyCategory.class)
,请参阅http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/web/bindery/requestfactory/vm/InProcessRequestFactory.java
答案 1 :(得分:3)
对我来说,我有一个属性设置器,在我的Ojbect接口中有一个空参数列表。它与工厂没有任何关系,除了工厂试图为其创建代理的接口:
interface Factory {
AutoBeans<MyObject> createObject();
}
interface MyObject {
String getProperty();
void setProperty();
}
这是一个愚蠢的错误但却让我误解了这个精确的编译器错误。添加上一个答案中提到的类别注释标识了错误的属性设置器。