2012-02-18 19 views
2

我是新來GWT和RequestFactory所以我編碼使用GWT RequestFactory爲RPC和物化的ORM一個簡單的測試應用程序。GWT RequestFactory:提示「無類型令牌......」異常

我有一個簡單的Person實體,並能獲得工作的罰款所有CRUD操作。我想嘗試在我的Person類中添加一個用於將地址存儲爲@Embedded屬性的值類型,就像它在Google開發人員網站上顯示的一樣。所以我加了一個簡單的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:無類型令牌......

Spefically似乎得到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); 
    } 

我假設它試圖從請求上下文中確定類型,但它沒有幫助我看到我的結尾丟失了什麼。什麼會造成這種情況?

回答

1

這個職位從托馬斯Broyer的Google Web Toolkit谷歌集團解決了這個問題。這裏有一個報價:

在Eclipse中的註釋處理幾乎不可用。我昨天奮戰了幾個小時,讓它刷新生成的DeobfuscatorBuilder。 IIRC,我在eclipse中刷新項目,然後重新啓動它,然後禁用註釋處理,刪除.apt_generated文件夾並重新啓用註釋處理。如果你可以在你的項目中使用Maven,那麼我敢打賭它在那裏效果更好! (我有gwt用戶項目本身的問題,所以它不是我的選擇)下一次,我會嘗試設置生成操作(或其他)來運行「javac -proc:only」,而不是依靠Eclipse的內置(和非常錯誤的)APT。

1

你可能缺少必要的with()

嘗試像req.save(person).with("address").fire();

+0

這不工作,我不認爲它不會反正適用。 with()用於檢索具有存儲的鍵值的實體,該鍵值與其他實體類型建立關係(尚未到達該點,但其下一個在我的測試列表中)。 – 2012-02-19 00:03:06

+0

那麼這是我唯一的想法......我花了很多時間尋找這個'with()'指令,所以我認爲它可能是一樣的。希望有人會有更好的答案! – foch 2012-02-19 00:06:28

+0

我收回了我之前說過的話。我剛剛注意到一個持久化方法的例子,它使用了.with()[這裏是鏈接](http://code.google.com/p/listwidget/source/browse/trunk/src/main/java/com/turbomanage/ listwidget /客戶端/ MVP/EditListActivity.java)。但是,正如我之前所說,這並沒有解決我的問題。 – 2012-02-20 01:04:04