我們試圖將RequestFactory
與現有的Java實體模型結合使用。我們的Java實體的所有實施DomainObject
接口和暴露getObjectId()
方法(這個名字被選爲getId()
可能會模棱兩可,並與域對象的實際從域ID衝突建模。我可以在不使用getId()和getVersion()方法的情況下使用RequestFactory嗎?
的ServiceLayerDecorator
接口允許的定製。ID以及版本屬性查找策略
public class MyServiceLayerDecorator extends ServiceLayerDecorator {
@Override
public Object getId(Object object) {
DomainObject domainObject = (DomainObject) object;
return domainObject.getObjectId();
}
}
到目前爲止,一切都很好。然而,嘗試部署該解決方案的產量運行時錯誤尤其RequestFactoryInterfaceValidator
抱怨:
[ERROR] There is no getId() method in type com.mycompany.server.MyEntity
再後來就:
[ERROR] Type type com.mycompany.client.MyEntityProxy was previously marked as bad
[ERROR] The type com.mycompany.client.MyEntityProxy did not pass RequestFactory validation
[ERROR] Unexpected error
com.google.web.bindery.requestfactory.server.UnexpectedException: The type com.mycompany.client.MyEntityProxy did not pass RequestFactory validation
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die(ServiceLayerDecorator.java:212) ~[gwt-servlet.jar:na]
我的問題是 - 爲何ServiceLayerDecorator
允許自定義ID和版本查找策略如果RequestFactoryInterfaceValidator
是硬編碼的getId()
和getVersion()
公約?
我想我可以覆蓋ServiceLayerDecorator.resolveClass()
忽略「中毒」的代理類,但在這一點上似乎是我打的框架太多...
通過'RequestFactoryInterfaceValidator'挖掘並重新閱讀文檔後,似乎我可能需要在這裏使用自定義的'Locator'類型... – Eric
然而,一個更基本的問題是適用的。如果我仍然需要用定義這種行爲的特定Locator來標記每個EntityProxy,那麼在ServiceLayerDecorator中允許全局重寫'getId()'和'getVersion()'有什麼用? – Eric