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. P>
Oui, j'ai vu Invoquer un service RPC GWT de Java directement , mais cette discussion passe dans une direction différente. P>
5 Réponses :
La mise en œuvre Java dans GWT du protocole RPC dans les packages 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". P>
Vous pouvez trouver des informations de haut niveau sur le protocole ici p> com.google.gwt.user.server.rpc code> et
com.google.gwt.user.server.rpc.implent code> 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 code> et
servererializationtreamwriter code> (chacun env. 750 lignes de code). p>
Malheureusement, je pense que Jarnbjo a raison d'avoir à réiliter la moitié du mécanisme RPC du navigateur. P>
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. p>
GWT SyncProxy vous permet d'accéder aux services RPC GWT (méthodes E.G) à partir du code PURE Java (NOT JSNI). P>
voir http: // www. gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/ pour plus de détails. P>
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 P>
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(); } } }
Pourquoi ce wiki communautaire est-il? Le fait-il juste passer automatiquement de trop d'éditions?