Обращение к сервлету, отличному от GWT, со стороны клиента GWT

Допустим, есть сторонний веб-сервис RESTful, предоставляющий конечную точку GET по адресу:

http://someservice.com/api/askAnyQuestion

И я хочу попасть в этот сервис, поместив свой вопрос в строку запроса:

http://someservice.com/api/askAnyQuestion&q=Does%20my%20dog%20know%20about%20math%3F

Как получить доступ к этой службе из клиентского приложения GWT? Я читал RequestFactory руководства, но RF, похоже, предназначен только для предоставления уровня доступа к данным (DAL) и для CRUDding сущностей, и я не совсем уверен, подходит ли это для этого варианта использования.

Дополнительные супербонусные баллы, если кто-нибудь может предоставить пример кода, а не только ссылку на учебники GWT, которые я уже прочитал, или блог какого-нибудь гуглера, который я, вероятно, тоже читал ;-).


person Community    schedule 19.02.2013    source источник


Ответы (2)


Несколько дней назад у меня была такая же проблема, и я попытался реализовать ее с помощью requestBuilder. Вы получите сообщение о междоменном сценарии.

https://developers.google.com/web-toolkit/doc/1.6/FAQ_Server#How_can_I_dynamically_fetch_JSON_feeds_from_other_web_domains?

Я обработал это с помощью RPC-запроса к моему серверу и оттуда HTTP-запроса на стороне сервера к междоменному URL-адресу.

https://developers.google.com/web-toolkit/doc/latest/tutorial/Xsite

public static void SendRequest(String method, String notifications) {
    String url = SERVICE_BASE_URL + method;

    JSONObject requestObject = new JSONObject();
    JSONArray notificationsArray =null;
    JSONObject mainRequest = new JSONObject();
    try {
        notificationsArray = new JSONArray(notifications);
        requestObject.put("notifications", notificationsArray);

        mainRequest.put("request", requestObject);
    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    HttpURLConnection connection = null;
    try
    {
        URL server = new URL(url);
        connection = (HttpURLConnection) server.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        connection.setDoInput(true);
        connection.setDoOutput(true);

        DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
        writer.writeBytes(mainRequest.toString());
        writer.flush();
        writer.close();

        parseResponse(connection);
    }
    catch (Exception e)
    {
        System.out.println("An error occurred: " + e.getMessage());
    }
    finally
    {
        if (connection != null)
        {
            connection.disconnect();
        }
    }
}
person Sam    schedule 19.02.2013

Вы можете использовать RequestBuilder. . Успешно использовал его для работы с REST.

         RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
         try {
            builder.sendRequest(null, new RequestCallback() {
                @Override
                public void onError(Request request, Throwable exception) {
                    // process error
                }

                @Override
                public void onResponseReceived(Request request, Response response) {
                    if (200 == response.getStatusCode()) {
                        // process success
                    } else {
                        // process other HTTP response codes
                    }
                }
            });
        } catch (RequestException e) {
            // process exception
        }

Также ознакомьтесь с этим вопросом для получения информации, связанной с межсайтовыми запросами.

person udalmik    schedule 19.02.2013
comment
Это не работает, если вы хотите сделать межсайтовый запрос. не так ли? - person Sam; 19.02.2013
comment
Ты прав. В вопросе, о котором я упоминал, есть трюк с заголовком «Access-Control-Allow-Origin». Если это не соответствует требованиям, то да - мы можем использовать какой-то прокси-код на сервере в том же домене. В моем реальном сценарии служба REST развернута в том же домене. - person udalmik; 19.02.2013