GWT- Как сделать RPC-вызов (использовать серверную часть) одного проекта в другом проекте?

Мы создали наш веб-проект на GWT с java. Полностью работает нормально. Теперь мы движемся к созданию версии веб-сайта для мобильных устройств, которая также будет на gwt и наверняка будет иметь другой URL-адрес (например, m.exam.com).

ВОПРОС:-

Мы хотим использовать серверную часть нашего веб-проекта в качестве серверной части мобильного веб-сайта. Так что только интерфейс должен быть изменен. После прохождения некоторых руководств выяснилось, что, возможно, вызов gwt rpc сделан из приложения для Android.

Но мы хотим, чтобы в gwt была возможность вызова gwt RPC.

Для приложения Android они используют Syncproxy, где они меняют базовый URL-адрес и используют его для вызова методов на стороне сервера gwt. Это наверняка будет возможность повторного использования кода.

ПРИМЕР ДЛЯ ANDROID: –

SyncProxy.setBaseURL("http://testing.enggheads.in/enggheads/");

        GreetingServiceAsync greetService = SyncProxy.create(GreetingService.class);

Итак, как добиться, чтобы проект GWT использовал методы на стороне сервера другого проекта с помощью этого метода?


РЕДАКТИРОВАТЬ НОВАЯ ПРОБЛЕМА: проблема импорта com.gdevelop не может быть решена

Я просмотрел больше документов gwt для междоменных вызовов rpc, таких как приложение gwt для Android. Я получил файл jar syncproxy 0.5, который точно такой же, как и для Android. Имея те же функции. Я импортировал файл jar в проект и вызвал функции SyncProxy следующим образом.

public void onModuleLoad() {

    SyncProxy.setBaseURL("http://www.enggheads.in/CrossModuleCode/");
      final GreetingServiceAsync greetService = SyncProxy.create(GreetingService.class);

    final Button sendButton = new Button("Send");
    final TextBox nameField = new TextBox();
    nameField.setText("GWT User");
    final Label errorLabel = new Label();

    // We can add style names to widgets
    sendButton.addStyleName("sendButton");

    // Add the nameField and sendButton to the RootPanel
    // Use RootPanel.get() to get the entire body element
    RootPanel.get("nameFieldContainer").add(nameField);
    RootPanel.get("sendButtonContainer").add(sendButton);
    RootPanel.get("errorLabelContainer").add(errorLabel);

}

Теперь при компиляции проекта я получаю следующие ошибки.error

ИЗМЕНИТЬ 2:-

GWT-No 'Access- Заголовок Control-Allow-Origin присутствует в запрошенном ресурсе


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


Ответы (1)


попробуйте установить точку входа службы в дочернем проекте
((ServiceDefTarget) greetService).setServiceEntryPoint("http://testing.enggheads.in/enggheads/");

если ваш дочерний проект развернут в другом домене, вам может понадобиться фильтр CORS, чтобы разрешить межсайтовые запросы.

РЕДАКТИРОВАТЬ:
Как настроить простой пример:

  1. Создайте "New Web Application project..." и выберите "generate project sample code" и назовите его "мобильное приложение"
  2. Создайте еще один "New Web Application project..." и выберите «создать пример кода проекта» и назовите его «webapp».
  3. в Mobileapp.java скопируйте этот код в первую строку onModuleLoad: ((ServiceDefTarget) greetingService).setServiceEntryPoint("http://127.0.0.1:8080/webapp/webapp/greet"); webapp/greet — это <url-pattern>/webapp/greet</url-pattern>из вашего web.xml. http://127.0.0.1:8080/webapp – это URL-адрес вашего веб-приложения.
  4. Скомпилируйте оба приложения и разверните их на одном экземпляре tomcat. если вы развертываете их на разных котах, вы должны использовать фильтр CORS для своего веб-приложения и разрешить междоменные запросы.
  5. откройте в браузере http://127.0.0.1:8080/mobileapp/ и нажмите кнопку Send. Он будет использовать метод сервера вашего webapp
    . Важно: это работает только в том случае, если оба интерфейса GreetingService имеют одинаковые методы... поэтому всегда синхронизируйте их.

здесь вы можете скачать два проекта, как описано выше, на свой страх и риск: googledrive ссылка

person Tobika    schedule 01.07.2016
comment
Извините, но я не могу понять, как использовать эту функцию.? Как это будет полезно для вызова других методов на стороне сервера домена. - person ; 04.07.2016
comment
это точно то же самое, что вы делаете в своем проекте android с SyncProxy.setBaseURL("http://www.enggheads.in/CrossModuleCode/");, инициируйте службу приветствия GreetingServiceAsync greetingService = GWT.create(GreetingService.class);, а затем измените точку входа ((ServiceDefTarget) greetService).setServiceEntryPoint("http://www.enggheads.in/CrossModuleCode/"); - person Tobika; 04.07.2016
comment
Он не может использовать методы другой стороны сервера проекта. Например, если у меня есть функция fun() в другом проекте, то как ее использовать в текущем проекте. Один проект мобильного веб-сайта, другой тот же веб-сайт в Интернете. Надеюсь, вы поняли мой запрос - person ; 04.07.2016
comment
Да, пожалуйста, загрузите пример. - person ; 04.07.2016
comment
я добавил объяснение, как настроить очень простой пример, а также загрузил код - person Tobika; 04.07.2016
comment