无法让gwt-syncproxy正常工作

时间:2015-02-16 22:28:15

标签: java gwt gwt-rpc gwt-syncproxy

我试图让一个非常简单的gwt-syncproxy示例在Eclipse Developer Mode中工作。我创建了样本GWT / GAE项目并命名为#34; testgwtrpc"。我确认这可以发送问候语并收到服务器的响应。我创建了以下独立的Java程序来调用GWT RPC。

    SyncProxy.setBaseURL("http://127.0.0.1:8888/testgwtrpc/");
    GreetingServiceAsync greetingServiceAsync = SyncProxy.create(GreetingService.class);
    greetingServiceAsync.greetServer("Hello", new AsyncCallback<String>() {

        @Override
        public void onFailure(Throwable caught) {
        }

        @Override
        public void onSuccess(String result) {
            System.out.println("From server: " +result);
        }
    });
}

我从SyncProxy.setBaseURL()抛出以下异常:

INFO: No RemoteService in the classpath
Feb 16, 2015 5:10:19 PM com.gdevelop.gwt.syncrpc.SyncProxy populatePolicyMap
INFO: Populating Policy Map
Exception in thread "main" com.gdevelop.gwt.syncrpc.exception.SyncProxyException: Error POLICY_NAME_POPULATION. Unable to populate policy names, see below exception.
  at com.gdevelop.gwt.syncrpc.SyncProxy.populatePolicyMap(SyncProxy.java:515)
  at com.gdevelop.gwt.syncrpc.SyncProxy.setBaseURL(SyncProxy.java:532)
  at com.ptflix.utilities.CallGwtRpc.main(CallGwtRpc.java:12)
Caused by: java.io.FileNotFoundException: http://127.0.0.1:8888/testgwtrpc/compilation-mappings.txt
  at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1835)
  at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
  at com.gdevelop.gwt.syncrpc.RpcPolicyFinder.getResposeText(RpcPolicyFinder.java:201)
  at com.gdevelop.gwt.syncrpc.RpcPolicyFinder.fetcherSerializationPolicyNameJS(RpcPolicyFinder.java:68)
  at com.gdevelop.gwt.syncrpc.RpcPolicyFinder.fetchSerializationPolicyName(RpcPolicyFinder.java:180)
  at com.gdevelop.gwt.syncrpc.SyncProxy.populatePolicyMap(SyncProxy.java:513)
  ... 2 more

看起来这应该很简单,但是,唉,它不起作用。

任何想法为什么?非常感谢。

4 个答案:

答案 0 :(得分:1)

检查此link

  

无法找到RPC策略文件GWT-编译您的网络应用程序,请确保   您的服务正在按预期运行(部署与本地服务)   测试网址,如果使用GAE,请务必更改您的   appengine-web.xml,如Android#Setup_in_Eclipse部分所述。   基本上,您需要确保.gwt.rpc文件是   可以从“远程”Android客户端访问。

答案 1 :(得分:1)

确保您已执行GWT-Compile(IE右击您的testgwtrpc项目,Google->GWT-Compile)。 Eclipse和Dev Mode中的测试不需要这些文件,因为它由GWT的托管服务器系统处理。但Standalone和Android系统是分开的,因此需要访问GWT编译创建的文件。

答案 2 :(得分:0)

来自@JCricket和@Ahmed El-Fayomy的综合答案提供了我需要的信息才能实现这一目标。非常感谢你们两位。我决定巩固你的答案,以便为下一个有同样问题的人提供更完整和清晰的答案。

正如JCricket所说,你必须进行GWT编译,因为gwt-syncproxy从App Engine应用程序下载了几个文件,包括compilation-mappings.txt和* .gwt.rpc文件。 GWT编译生成这些文件。但是,您会发现通过gwt-syncproxy进行的RPC调用仍然失败,除非您指定app-engine允许客户端下载* .gwt.rpc文件。这是按照Ahmed here给出的链接所述完成的。具体来说,在appengine-web.xml的“static-files”部分中,更改:

<exclude path="**.gwt.rpc" /> to <include path="**.gwt.rpc" />

还有一件事:

从客户端应用程序调用SyncProxy.setBaseURL()时,我使用了以下URL:

http://127.0.0.1:8888/testgwtrpc/

其中“testgwtrpc”是模块名称,在我的.gwt.xml文件中重命名。

我还没有在生产模式下尝试过这种方法,只有开发模式。

答案 3 :(得分:0)

我有两个项目,一个遇到过这个问题。 这是因为SyncProxy无法从您的网站下载以下文件:

compilation-mappings.txt
*.nocache.js
*.cache.html
*.gwt.rpc