在GWT2.4中使用Locator和ServiceLocator时出现一些错误

时间:2012-01-12 03:51:33

标签: gwt requestfactory

无法验证此方法,因为返回类型(XXXProxy)的域映射无法解析为域类型添加@SuppressWarnings(“requestfactory”)以解除。

从GWT 2.4开始,必须先验证RequestFactory接口,然后RequestFactory服务器代码或基于JVM的客户端才能使用它们。本文档介绍了验证这些接口的机制。

根据http://code.google.com/p/google-web-toolkit/wiki/RequestFactoryInterfaceValidation

我已经完成但在Proxy和Request类中出现了一些错误。 那样:

Cannot validate this method because the domain mapping for the return   type (XXXProxy) could not be resolved to a domain type Add @SuppressWarnings("requestfactory") to dismiss.
Could not find domain method similar to java.lang.Integer countUsers()。

帮助!我已经通过了在实体类中使用实现服务 但无法通过使用定位器和ServiceLocator。

mycode的:

@ServiceName(value="UserProxy.class", locator="UserServiceLocator.class")
public interface UserServiceRequest extends RequestContext {

    Request<Integer> countUsers();
    Request<Void> generateUsers();
    Request<List<UserProxy>> findAllUsers();
    InstanceRequest<UserProxy, Void> persist();
    InstanceRequest<UserProxy, Void> remove();

}

@ProxyForName(value = "User.class", locator = "UserLocator.class")
public interface UserProxy extends EntityProxy {

    //...setter and getter

    EntityProxyId<UserProxy> stableId();

}

错误[在服务器上使用调试方法]

  

com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost   严重:意外的错误   java.lang.RuntimeException:必须为com.geogre.shared.DemoRfLocateRequestFactory RequestFactory类型运行RequestFactory ValidationTool       在com.google.web.bindery.requestfactory.vm.impl.Deobfuscator $ Builder.load(Deobfuscator.java:59)       在com.google.web.bindery.requestfactory.server.ResolverServiceLayer.updateDeobfuscator(ResolverServiceLayer.java:43)       在com.google.web.bindery.requestfactory.server.ResolverServiceLayer.resolveRequestFactory(ResolverServiceLayer.java:176)       在com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestFactory(ServiceLayerDecorator.java:172)       在com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestFactory(ServiceLayerDecorator.java:172)       在com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestFactory(ServiceLayerDecorator.java:172)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)       at java.lang.reflect.Method.invoke(Unknown Source)       在com.google.web.bindery.requestfactory.server.ServiceLayerCache.getOrCache(ServiceLayerCache.java:233)       在com.google.web.bindery.requestfactory.server.ServiceLayerCache.resolveRequestFactory(ServiceLayerCache.java:198)       在com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:207)       在com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:127)       在com.google.web.bindery.requestfactory.server.RequestFactoryServlet.doPost(RequestFactoryServlet.java:133)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:637)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:717)       在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)       在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)       在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)       在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)       at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)       在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)       在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)       at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)       在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)       在org.mortbay.jetty.Server.handle(Server.java:324)       在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)       at org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:843)       在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)       在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)       在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)       在org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)       在org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:488)         Pragma:没有缓存         缓存控制:无缓存      响应标头         内容类型:text / html;字符集= ISO-8859-1         内容长度:1420

1 个答案:

答案 0 :(得分:2)

您似乎在某种程度上错误地使用了@ServiceName注释。如果要提及类文字,请使用@Service而不是

@Service(value=MyServiceType.class, locator=MyServiceLocator.class)

如果要使用@ServiceName,则需要完整的包名称

@ServiceName(value="com.company.server.MyServiceType", locator="com.company.gwt.MyServiceLocator")

对于@ProxyFor和@ProxyForName也是如此,你似乎也错误地使用它。

在任何情况下,您都不能将RequestContext的服务指向代理 - 它应该指向User,而不是UserProxy。