2016-07-01 6 views
0

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

ВОПРОС: -

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

Но мы хотим, чтобы это было возможно в gwt для вызова gwt RPC.

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

ANDROID Пример: -

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

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

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


EDIT NEW Проблема: com.gdevelop импорт не может быть решена

Я прошел через несколько Документов GWT для перекрестных вызовов домена, как GWT удаленных процедур в приложение для Android. Я получил файл syncproxy 0.5 jar, который точно такой же, как и для 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

EDIT 2: -

GWT-No 'Access-Control-Allow-Origin' header is present on the requested resource

ответ

1

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

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

EDIT:
Как создать простой Примеру:

  1. Создать "New Web Application project..." и выберите "generate project sample code" и назовите его «MobileApp»
  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 для вашего webapp и разрешать запросы на междоменные запросы.
  5. Открыть http://127.0.0.1:8080/mobileapp/ в вашем браузере и нажать кнопку Send. Он будет использовать метод сервера своего webapp
    Важно: Это работает только если оба GreetingService интерфейсы имеют одни и те же методы ... так всегда держать их в синхронизации

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

+0

Извините, но я не могу понять, как использовать эту функцию.? Как это будет полезно для вызова других методов на стороне сервера. –

+0

это то же самое, что вы делаете в своем проекте andriod с помощью 'SyncProxy.setBaseURL (« http://www.enggheads.in/CrossModuleCode/ »);« init greet service »GreetingServiceAsync greetingService = GWT.create (GreetingService .class); 'и затем изменить точку входа' ((ServiceDefTarget) greetService) .setServiceEntryPoint ("http://www.enggheads.in/CrossModuleCode/"); ' – Tobika

+0

Невозможно использовать методы другой стороны сервера проекта , Например, если у меня есть функция fun() в другом проекте, то как использовать ее в текущем проекте. Один из проектов мобильного веб-сайта на том же веб-сайте в Интернете. Надеюсь, ты понял мой запрос –