Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从非GWT(但Java)应用程序调用服务器上的GWT RPC方法?_Java_Google App Engine_Gwt_Rpc - Fatal编程技术网

如何从非GWT(但Java)应用程序调用服务器上的GWT RPC方法?

如何从非GWT(但Java)应用程序调用服务器上的GWT RPC方法?,java,google-app-engine,gwt,rpc,Java,Google App Engine,Gwt,Rpc,我有一个常规Java应用程序,希望访问GWT RPC端点。你知道怎么做吗?我的GWT应用程序位于GAE/J上,例如,我可以使用REST,但我已经有了GWT RPC端点,不想再构建另一个façade 是的,我看到了,但这次讨论的方向不同。包com.google.GWT.user.server.RPC和com.google.GWT.user.server.RPC.impl中RPC协议在GWT中的Java实现不幸地只涉及请求的反序列化和响应的序列化。真正的工作是在类ServerSerializatio

我有一个常规Java应用程序,希望访问GWT RPC端点。你知道怎么做吗?我的GWT应用程序位于GAE/J上,例如,我可以使用REST,但我已经有了GWT RPC端点,不想再构建另一个façade


是的,我看到了,但这次讨论的方向不同。

com.google.GWT.user.server.RPC
com.google.GWT.user.server.RPC.impl
中RPC协议在GWT中的Java实现不幸地只涉及请求的反序列化和响应的序列化。真正的工作是在类
ServerSerializationStreamReader
ServerSerializationStreamWriter
中完成的(每个类大约有750行代码)

要实现客户机,您显然需要序列化请求和反序列化响应,但由于没有协议的文档,而且也没有可用的Java客户机实现,因此您可能必须对(反)序列化类进行反向工程,并编写自己的代码以“反其道而行之”


您可以找到一些关于协议的高级信息

不幸的是,我认为jarnbjo必须重新实现浏览器的一半RPC机制是正确的


或者,如果您最终不得不为远程客户端编写REST接口,您可以将GWT应用程序从RPC中切换出来,并在那里使用REST接口,并在外部客户端和GWT的客户端接口之间共享您的客户端库。

GWT SyncProxy允许您访问GWT RPC服务(例如方法)来自纯Java(不是JSNI)代码


有关详细信息,请参阅。

您可以在本文中找到有关GwtRpcCommLayer的内容:

我已经探索了所有答案,今天我成功地作为一个纯java客户机工作

SyncProxy需要您拥有GWT项目(服务器端)的完整代码。要做到这一点,您只需创建一个额外的类,向其中启动SyncProxy。在这个类中,您应该导入所有需要的类和函数,这就是您需要服务器代码的原因

您应该检查是否可以从服务器下载以下文件:

compilation-mappings.txt
*.nocache.js
*.cache.html
*.gwt.rpc
我在cookiemanager之前添加了代码,因为我的服务器端uri是HTTPS。 我的类包含一个登录操作,然后触发GWT请求。 这是我的代码(我对SyncProxy进行了一些升级,因为它不支持cookie/session auth check。):

您可能需要的一些外部链接:


为什么这个社区是维基?它只是从过多的编辑中自动切换吗?
package com.xxx.xxx.x.xx;

import java.io.IOException;
import java.net.CookieManager;
import java.net.URISyntaxException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import net.customware.gwt.dispatch.client.standard.StandardDispatchService;
import net.customware.gwt.dispatch.shared.DispatchException;

import com.gdevelop.gwt.syncrpc.LoginUtils;
import com.gdevelop.gwt.syncrpc.ProxySettings;
import com.gdevelop.gwt.syncrpc.SyncProxy;

public class TestRemoteExecuteAction {

            static Logger logger = Logger.getLogger(TestRemoteExecuteAction.class.getName());
              public static void main(String[] arg) {

                  SyncProxy.setLoggingLevel(Level.ALL);

                try {

                      // Create a trust manager that does not validate certificate chains
                    TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
                            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                                return null;
                            }
                            public void checkClientTrusted(X509Certificate[] certs, String authType) {
                            }
                            public void checkServerTrusted(X509Certificate[] certs, String authType) {
                            }
                        }
                    };

                    // Install the all-trusting trust manager
                    SSLContext sc = SSLContext.getInstance("SSL");
                    sc.init(null, trustAllCerts, new java.security.SecureRandom());
                    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

                    // Create all-trusting host name verifier
                    HostnameVerifier allHostsValid = new HostnameVerifier() {
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    };

                    // Install the all-trusting host verifier
                    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

                    CookieManager cookiemanager = LoginUtils.loginFormBasedJ2EE("https:XXXXX", "XXXX", "XXXX");

                    SyncProxy.setBaseURL("https://XXXXXX");

                    StandardDispatchService rpcService =  SyncProxy.createProxy(StandardDispatchService.class,
                            new ProxySettings().setCookieManager(cookiemanager));

                    System.out.println(cookiemanager.getCookieStore().getCookies().get(0));
                    String JSESSIONID = cookiemanager.getCookieStore().getCookies().get(0).getValue();

                    rpcService.execute(new XXXXXAction("XXX"));



                } catch (NoSuchAlgorithmException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (KeyManagementException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (URISyntaxException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (DispatchException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 

              }
}