2010-01-22 11 views
11

मेरे पास एक नियमित जावा एप्लिकेशन है और एक जीडब्ल्यूटी आरपीसी एंडपॉइंट तक पहुंचना चाहता हूं। कोई विचार यह कैसे करना है? मेरा जीडब्ल्यूटी एप्लीकेशन जीएई/जे पर है और मैं उदाहरण के लिए आरईएसटी का उपयोग कर सकता हूं लेकिन मेरे पास पहले से ही जीडब्ल्यूटी आरपीसी एंडपॉइंट्स हैं और एक और मुखौटा बनाना नहीं चाहते हैं।मैं गैर जीडब्ल्यूटी (लेकिन जावा) गैपप्लिकेशन से किसी सर्वर पर जीडब्ल्यूटी आरपीसी विधि कैसे कॉल कर सकता हूं?

हां, मैंने Invoke a GWT RPC service from Java directly देखा है, लेकिन यह चर्चा एक अलग दिशा में जाती है।

+2

यह समुदाय विकी क्यों है? क्या यह बहुत सारे संपादन से ऑटो-स्विच किया गया था? –

उत्तर

4

संकुल com.google.gwt.user.server.rpc और com.google.gwt.user.server.rpc.impl में आरपीसी प्रोटोकॉल के जीडब्ल्यूटी में जावा कार्यान्वयन दुर्भाग्यवश केवल अनुरोधों के deserialization और प्रतिक्रियाओं के serialization शामिल हैं। असली काम वर्ग ServerSerializationStreamReader और ServerSerializationStreamWriter (प्रत्येक अनुमोदन 750 कोड की लाइन) में किया जाता है।

क्लाइंट को लागू करने के लिए, आपको स्पष्ट रूप से अनुरोध को क्रमबद्ध करने और प्रतिक्रिया को बेकार करने की आवश्यकता है, लेकिन चूंकि प्रोटोकॉल और AFAIK के लिए कोई दस्तावेज उपलब्ध नहीं है, कोई जावा क्लाइंट कार्यान्वयन उपलब्ध नहीं है, तो आपको संभवत: रिवर्स-इंजीनियर (डी) serialization कक्षाओं और सब कुछ "चारों ओर चारों ओर" करने के लिए अपना खुद का कोड लिखें।

आप प्रोटोकॉल here

1

दुर्भाग्य के बारे में कुछ उच्च स्तरीय जानकारी प्राप्त कर सकते हैं, मुझे लगता jarnbjo सही आरपीसी तंत्र के ब्राउज़र के आधे reimplement करने के बारे में है।

वैकल्पिक रूप से, यदि आप दूरस्थ ग्राहकों के लिए एक आरईएसटी इंटरफ़ेस लिखना चाहते हैं, तो आप अपने जीडब्ल्यूटी ऐप को आरपीसी से दूर कर सकते हैं और वहां भी आरईएसटी इंटरफ़ेस का उपयोग कर सकते हैं, और बाहरी क्लाइंट और जीडब्ल्यूटी के बीच अपनी क्लाइंट लाइब्रेरी साझा कर सकते हैं। क्लाइंट-साइड इंटरफेस।

6

जीडब्ल्यूटी सिंकप्रॉक्सी आपको शुद्ध जावा (जेएसएनआई नहीं) कोड से जीडब्ल्यूटी आरपीसी सेवाओं (जैसे विधियों) तक पहुंचने की अनुमति देता है।

विवरण के लिए http://www.gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/ देखें।

+0

यह प्रोजेक्ट अब गिटहब में स्थानांतरित हो गया है: https: // github।com/jcricket/gwt-syncproxy – JCricket

1

मैं सभी जवाब है और आज का पता लगाया है मैं एक शुद्ध जावा ग्राहक के रूप में काम करने के लिए सफल होते हैं।

सिंकप्रॉक्सी की आवश्यकता है कि आपके पास GWT प्रोजेक्ट (सर्वर पक्ष) का पूरा कोड हो। और ऐसा करने के लिए, आप केवल एक अतिरिक्त कक्षा बनाते हैं जो सिंकप्रॉक्सी को इसमें आग लगती है। इस कक्षा में आपको सभी आवश्यक वर्गों और कार्यों को आयात करना चाहिए, आपको सर्वर कोड की आवश्यकता क्यों है।

और आपको निम्न फ़ाइल की जाँच करनी चाहिए सर्वर से डाउनलोड किया जा सकता है:

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

मैं, cookiemanager से पहले कोड जोड़ क्योंकि मेरे सर्वर साइड uri HTTPS है। और मेरी कक्षा में एक लॉगिन कार्रवाई शामिल है तो जीडब्ल्यूटी अनुरोध को आग लगाना। यह मेरा कोड (। मैं SyncProxy थोड़ा अपग्रेड कर दिया गया है, क्योंकि यह कुकी/सत्र प्रमाणन की जांच का समर्थन नहीं करता है):

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

       } 
} 

कुछ बाहर लिंक आप चाहते हो सकता है:

https://code.google.com/p/gwt-syncproxy/wiki/QuickStart http://cancerberonia.blogspot.de/2012/10/testing-gwt-service-classes.html

संबंधित मुद्दे