我是GWT和RequestFactory的新手,所以我使用GWT RequestFactory为RPC编写一个简单的测试应用程序,并为ORM编写Objectify。
我有一个简单的Person实体,并且能够使所有的crud操作正常工作。我想在我的Person类中添加一个值类型来存储地址作为@Embedded属性,就像它在Google Developer网站上显示的那样。所以我添加了一个简单的POJO地址,AddressProxy扩展了ValueProxy等等。
我最终在RequestFactory调用中添加了几行代码,如下所示:
PersonRequest req = rf.personRequest();
AddressProxy address = req.create(AddressProxy.class); // Added this
address.setCity(city); // this
PersonProxy person = req.create(PersonProxy.class);
person.setName("Joe");
person.setPhone("215-555-1212");
person.setAddress(address); // and this.
req.save(person).fire();
因此,所有内容都能完美编译并逐步完成代码,客户端的所有内容都是A-OK。在服务器端,我得到UnexpectedExcpetion:没有类型的令牌......
在com.google.web.bindery.requestfactory.server.ResolverServiceLayer下,似乎很容易陷入这种方法:
@Override
public Class<? extends BaseProxy> resolveClass(String typeToken) {
String deobfuscated = deobfuscator.getTypeFromToken(typeToken);
if (deobfuscated == null) {
die(null, "No type for token %s", typeToken);
}
我假设它正在尝试从请求上下文中确定类型,但它并没有帮助我看到我最终缺少的内容。会导致这种情况的原因是什么?
答案 0 :(得分:1)
您可能错过了所需的with()
。
尝试req.save(person).with("address").fire();
答案 1 :(得分:1)
来自Thomas Broyer的Google Web Toolkit Google小组的这篇文章解决了这个问题。这是一个引用:
Eclipse中的注释处理几乎无法使用。我昨天奋战了几个小时,让它刷新生成的DeobfuscatorBuilder。 IIRC,我在eclipse中刷新项目,然后重新启动它,然后禁用注释处理,删除.apt_generated文件夹并重新启用注释处理。如果您可以将Maven用于您的项目,那么我敢打赌它在那里工作得更好! (我在gwt-user项目本身就遇到了问题,所以对我来说不是一个选项)下次,我会尝试设置一个构建动作(或其他)来运行“javac -proc:only”而不是依赖Eclipse的内置(并且非常多的)APT。