无法让 gwt-syncproxy 工作

Unable to get gwt-syncproxy working

我正在尝试获得一个非常简单的 gwt-syncproxy 示例以在 Eclipse 开发人员模式下工作。我创建了示例 GWT/GAE 项目并将其命名为 "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

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

知道为什么吗?非常感谢帮助。

检查这个link

Unable to find RPC Policy File GWT-Compile your web-app, make sure your service is running where you expect it to be (deployed vs local testing urls), and if using GAE, make sure to alter your appengine-web.xml as noted in the Android#Setup_in_Eclipse section. Essentially, you need to make sure that the .gwt.rpc files are available to access from the "remote" Android client.

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

@JCricket 和@Ahmed El-Fayomy 的综合回答提供了我需要的信息来完成这项工作。非常感谢你们俩。我决定合并您的答案,以便为下一个遇到相同问题的人提供更完整和清晰的答案。

正如 JCricket 所说,您必须进行 GWT 编译,因为 gwt-syncproxy 从 App Engine 应用程序下载多个文件,包括编译-mappings.txt 和 *.gwt.rpc 文件(s ). GWT 编译生成这些文件。但是,您会发现通过 gwt-syncproxy 的 RPC 调用仍然会失败,除非您指定 app-engine 以允许客户端下载 *.gwt.rpc 文件。这是按照 Ahmed here 给出的 link 中的描述完成的。具体来说,在 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 文件中重命名。

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

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

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