【问题标题】:GWT RequestFactory: getting "No type for token ..." ExceptionGWT RequestFactory:得到“没有类型的令牌......”异常
【发布时间】:2012-02-18 22:49:47
【问题描述】:

我是 GWT 和 RequestFactory 的新手,所以我正在编写一个简单的测试应用程序,使用用于 RPC 的 GWT RequestFactory 和用于 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();

所以一切都可以完美编译,并且单步执行代码在客户端一切正常。在服务器端,我得到 UnexpectedExcpetion: No type for token...

特别是在 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);
  }

我假设它试图从请求上下文中确定类型,但它并没有帮助我看到我最后缺少什么。这是什么原因造成的?

【问题讨论】:

    标签: gwt-rpc requestfactory


    【解决方案1】:

    您可能缺少所需的with()

    尝试类似req.save(person).with("address").fire();

    【讨论】:

    • 那行不通,我认为它无论如何都不会适用。 with() 用于检索存储了与其他实体类型建立关系的键值的实体(还没有达到这一点,但它在我的测试列表中是下一个)。
    • 嗯,这是我唯一的想法......我浪费了很多时间来寻找这个with()instruction,所以我认为它可能是一样的。希望有人能给出更好的答案!
    • 我收回我之前说的话。我刚刚注意到一个使用 .with() here link 的持久方法示例。但是,正如我之前所说,这并没有解决我的问题。
    • 我的测试使用了@Embedded 字段。与我的错误信念相反,正如您之前建议的那样,需要 .with() 。
    【解决方案2】:

    Thomas Broyer Google Web Toolkit Google Group 的这篇帖子解决了这个问题。这是一个报价:

    Eclipse 中的注解处理勉强可用。我昨天战斗了几个小时,以使其刷新生成的 DeobfuscatorBuilder。 IIRC,我在eclipse中刷新项目,然后重新启动它,然后禁用注释处理,删除 .apt_generated 文件夹并重新启用注释处理。如果您可以将 Maven 用于您的项目,那么我敢打赌它在那里工作得更好! (我在 gwt-user 项目本身上遇到了问题,所以这不是我的选择)下一次,我将尝试设置一个构建操作(或其他)来运行“javac -proc:only”而不是依赖于 Eclipse 的内置(并且非常有问题)APT。

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 2017-12-16
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多