AutoBean编译错误:“参数化不简单......”

时间:2012-03-03 08:52:21

标签: json google-app-engine gwt

我正在尝试在服务器和客户端上使用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框架的基础,但是我得到了同样的错误。)

2 个答案:

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

这是一个愚蠢的错误但却让我误解了这个精确的编译器错误。添加上一个答案中提到的类别注释标识了错误的属性设置器。