12
votes

Comment puis-je appeler une méthode GWT RPC sur un serveur à partir d'une écluse de gause non GWT (mais Java)?

J'ai une application Java régulière et je souhaite accéder à un point final RPC GWT. Avez-vous une idée de comment faire cela arriver? Mon application GWT est sur un GAE / J et je pourrais utiliser le repos par exemple, mais j'ai déjà les points finaux RPC GWT et ne veulent pas construire une autre façade.

Oui, j'ai vu Invoquer un service RPC GWT de Java directement , mais cette discussion passe dans une direction différente.


1 commentaires

Pourquoi ce wiki communautaire est-il? Le fait-il juste passer automatiquement de trop d'éditions?


5 Réponses :


4
votes

La mise en œuvre Java dans GWT du protocole RPC dans les packages com.google.gwt.user.server.rpc et com.google.gwt.user.server.rpc.implent Malheureusement ne couvre que la désérialisation des demandes et la sérialisation des réponses. Le travail réel est effectué dans les classes servererializationtreamreader et servererializationtreamwriter (chacun env. 750 lignes de code).

Pour mettre en œuvre un client, vous devez évidemment sérialiser la demande et désérialiser la réponse, mais comme il n'y a pas de documentation disponible pour le protocole et AFAIK Aucune mise en œuvre du client Java disponible, vous auriez probablement une ingénieur ingénieur (DE). classes et écrivez votre propre code pour tout faire "l'inverse autour".

Vous pouvez trouver des informations de haut niveau sur le protocole ici


0 commentaires

1
votes

Malheureusement, je pense que Jarnbjo a raison d'avoir à réiliter la moitié du mécanisme RPC du navigateur.

alternativement, si vous avez fini par avoir à écrire une interface de repos pour les clients distants, vous pouvez modifier votre application GWT à partir des RPCS et utiliser également l'interface de repos et partagez votre bibliothèque client entre les clients externes et le client du GWT. interface auside.


0 commentaires

6
votes

GWT SyncProxy vous permet d'accéder aux services RPC GWT (méthodes E.G) à partir du code PURE Java (NOT JSNI).

voir http: // www. gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/ pour plus de détails.


0 commentaires

2
votes

Vous pouvez trouver ce que vous recherchez dans cet article sur gwtrpccommlayer: http://googlewebebtoolkit.blogspot.com/2010/07/gwtrpccommLayer-extending-gwt-rpc-to-do.html


0 commentaires

1
votes

J'ai exploré toute la réponse et je réussis aujourd'hui à travailler en tant que client PURE Java.

Les besoins de la synchronisation de SyncProxy, vous avez le code complet du projet GWT (côté serveur). Et pour le faire, vous créez simplement une classe supplémentaire qui incendie la synchronisation de la synchronisation. Dans cette classe, vous devez importer toutes les classes et fonctions nécessaires, c'est pourquoi vous avez besoin de code serveur. P>

et vous devez vérifier le fichier suivant pourraient être téléchargés à partir du serveur: P>

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();
                } 

              }
}


0 commentaires