2010-10-27 13 views
19

मैं वेब विकास ढांचे के रूप में जीडब्ल्यूटी का उपयोग कर रहा हूं। मुझे अपने जीडब्ल्यूटी क्लाइंट कोड से कुछ आरईएसटी सेवाओं तक पहुंचने की ज़रूरत है। इसके अलावा मुझे जेएसओएन (या शायद एक्सएमएल) का विश्लेषण करना होगा जो इन सेवाओं के प्रतिक्रिया प्रारूप है। इस समस्या का सबसे अच्छा तरीका कौन सा है?जीडब्ल्यूटी से रीस्टफुल सेवाओं को कैसे कॉल करें?

अग्रिम धन्यवाद।

उत्तर

14

आप (यदि आप किसी अन्य डोमेन पर सेवाओं को फोन करने की जरूरत है या JsonpRequestBuilder) मानक GWT RequestBuilder का उपयोग कर बाकी सेवाओं कॉल कर सकते हैं।

JSON उत्तर स्ट्रिंग के साथ

, आप एक JSONValue पाने के लिए JSONParser.parseStrict(jsonString) कॉल कर सकते हैं, एक JSONObject, JSONArray हो सकता है, आदि यह this package में सभी उपलब्ध है।

import javax.ws.rs.POST; 
... 
public interface PizzaService extends RestService { 
    @POST 
    public void order(PizzaOrder request, 
         MethodCallback<OrderConfirmation> callback); 
} 

या जब आप सेवा इंटरफेस बनाने की मुसीबत के माध्यम से जाने के लिए नहीं करना चाहती:

2

आरईएसटी सेवाओं के लिए: चेकआउट gwt-rest

GWT में JSON समर्थन के लिए: देखने here

+0

कैसे शोकहारा-gwt एक आरामदायक सेवा कॉल का उपयोग कर शोकहारा वेब सेवा के लिए एक अनुरोध पोस्ट करने के लिए। मैं परियोजना प्रलेखन में एक उदाहरण नहीं देख सका। – ovunccetin

+0

क्षमा करें, गलत लिंक जोड़ा गया। मेरा मतलब था gwt-rest। – z00bs

7

आप आसानी से प्रॉक्सी सेवा इंटरफ़ेस बनाकर अपने GWT आवेदन में RestyGWT का उपयोग कर एक RESTful वेब सेवाओं कॉल कर सकते हैं

Resource resource = new Resource(GWT.getModuleBaseURL() + "pizza-service"); 

JSONValue request = ... 

resource.post().json(request).send(new JsonCallback() { 
    public void onSuccess(Method method, JSONValue response) { 
     System.out.println(response); 
    } 
    public void onFailure(Method method, Throwable exception) { 
     Window.alert("Error: "+exception); 
    } 
}); 

यह जेएसओएन को जावा ऑब्जेक्ट को एन्कोडिंग और डीकोड करने के लिए भी अच्छा एपीआई मिला है।

2

RequestBuilder HTTP अनुरोध करने के लिए निम्न स्तर का दृष्टिकोण है।

आप Turbo GWT HTTP के साथ काम कर रहे उच्च स्तर के दृष्टिकोण का सहारा ले सकते हैं, क्लाइंट-सर्वर संचार के प्रबंधन के लिए एक सुविधाजनक एपीआई और प्रवाहपूर्वक अनुरोध कर सकते हैं।

यह बेहतर शैली संचार बेहतर फिट बैठता है। निम्न उदाहरण पर विचार करें:

Request request = requestor.request(Void.class, Book.class) 
     .path("server").segment("books").segment(1) 
     .get(new AsyncCallback<Book>() { 
      @Override 
      public void onFailure(Throwable caught) { 

      } 

      @Override 
      public void onSuccess(Book result) { 
       Window.alert("My book title: " + result.getTitle()); 
      } 
}); 

(बाकी के लिए जो धारणात्मक RPC संचार के लिए आवश्यक है, लेकिन नहीं) कोई उन्हें कॉल करने से पहले अपने बाकी सेवाओं मैप करने के लिए ज़रूरत नहीं है। आप मांग पर अपनी सेवाओं का उपभोग कर सकते हैं।

+0

वे "अनुरोधकर्ता" के लिए नामित हैं https://github.com/reinert/requestor –

2

कोड के नीचे स्रोत का उपयोग किया RequestBuilder GWT

JSONObject jsonObject = new JSONObject(); 

email = (String) vslLoginView.getFieldUserEmailID().getValue(); 
password = (String) vslLoginView.getFieldUserPasword().getValue(); 

jsonObject.put("email", new JSONString(email)); 
jsonObject.put("password", new JSONString(password)); 
System.out.println("Password at Presenter:" 
    + jsonObject.get("password")); 
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, 
    RecursosURL.LOGIN.toString()/*your restful webservice url */ + "/authenticateuser"); 
builder.setHeader("Content-Type", "application/json"); 
try { 
    SC.showPrompt(constants.wait()); 
    builder.sendRequest(jsonObject.toString(), 
     new SamrtWebRequestCallback(false, false, false, false) { 

      @Override 
      public void onSuccess(Response response) { 
       // Recevie response of logged user data from restful webservice 
       JSONObject jsonOnlineUser = JSONParser.parse(
        response.getText()).isObject(); 
       UserTO userTO = ConverterUser 
        .converterJSONParaUser(jsonOnlineUser); 
       String primaryAccess = jsonOnlineUser.get(
        "primaryAccess").isString().stringValue(); 

       HashMap<String, Object> parameters = new HashMap<String, Object>(); 
       if (primaryAccess.equals("S")) { 

        parameters.put("email", email); 
        parameters.put("password", password); 
        parameters.put("id", jsonOnlineUser.get("id") 
         .isString().stringValue()); 

       } else { 

        parameters.put("email", email); 
        handlerManager.fireEvent(new EvtIrParaPage(
         Pages.PAGE_INICIAL, parameters)); 
       } 

      } 

      @Override 
      protected void onErrorCallbackAdapter(Response response) { 
       vslLoginView.getLabelMsgErro().setContents(
        response.getText()); 
       vslLoginView.getLabelMsgErro().setVisible(true); 
      } 
     }); 

} catch (RequestException e) { 
    e.printStackTrace(); 
} 
संबंधित मुद्दे