2016-07-01 21 views
0

Wir haben unser Webprojekt auf GWT mit Java erstellt. Völlig gut funktioniert. Jetzt machen wir die Version der Website für mobile, die auch auf gwt sein wird und eine andere URL haben wird (wie zB.exam.com).GWT- Wie RPC-Aufruf (Server-Seite) eines Projekts in einem anderen Projekt aufrufen?

PROBLEM: -

Wir haben die Server-Seite unserer Web-Projekt als Server-Seite von die mobile Website verwenden möchten. Damit nur das Front-End verändert werden muss. Wie gegangen durch einige Tutorials bekommen, dass es möglich ist, dass gwt rpc Anruf von Android App gemacht.

Aber wir wollen, dass es möglich sein sollte in gwt zu gwt RPC-Aufruf.

Für Android-App verwenden sie Syncproxy, wo sie die baseurl ändern und verwenden, um die gwt serverseitigen Methoden aufzurufen. Es wird sicher die Wiederverwendbarkeit des Codes sein.

ANDROID Beispiel: -

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

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

So, wie es für GWT-Projekt zu erreichen Serverseite Methoden anderen Projektes throuhg diese Methode zu benutzen?


EDIT NEUE AUSGABE: Der Import com.gdevelop nicht aufgelöst werden kann

ich durch mehrere Dokumente von GWT für die Cross-Domain-RPC-Aufrufe wie GWT Android App gegangen war. Ich habe die Syncproxy 0,5 JAR-Datei, die genau das gleiche wie für Android ist. Die gleichen Funktionen haben. Ich habe die JAR-Datei in das Projekt importiert und die Funktionen von SyncProxy wie folgt aufgerufen.

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

}

Jetzt, während das Projekt kompilieren ich erhalte die folgenden Fehler.error

EDIT 2: -

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

Antwort

1

Versuchen Sie, den Service Entry Point in Ihrem Kind Projekt
((ServiceDefTarget) greetService).setServiceEntryPoint("http://testing.enggheads.in/enggheads/");

wenn Ihr childproject withtin einer anderen Domäne bereitgestellt wird Sie Möglicherweise benötigen Sie einen CORS-Filter, um Cross-Site-Anfragen zuzulassen

EDIT:
Wie man ein einfaches exampel einzurichten:

  1. erstellen "New Web Application project..." und wählen Sie "generate project sample code" und nennen Sie es „mobileapp“
  2. andere "New Web Application project..." erstellen und wählen Sie „Projekt Beispielcode erzeugen“ und den Namen es "Webapp"
  3. im Mobileapp.java Kopie dieser Code in der ersten Zeile des onModuleLoad: ((ServiceDefTarget) greetingService).setServiceEntryPoint("http://127.0.0.1:8080/webapp/webapp/greet");webapp/greet ist die <url-pattern>/webapp/greet</url-pattern> von Ihrem web.xml. http://127.0.0.1:8080/webapp ist die URL zu Ihrer Webanwendung
  4. Kompilieren Sie beide Anwendungen und stellen Sie sie auf derselben Tomcat-Instanz bereit. Wenn Sie sie auf verschiedenen Tomcats bereitstellen, müssen Sie einen CORS-Filter für Ihre Webanwendung verwenden und domänenübergreifende Anfragen zulassen.
  5. Öffnen Sie http://127.0.0.1:8080/mobileapp/ in Ihrem Browser und drücken Sie die Send Taste. Es wird die Server-Methode Ihrer webapp
    Wichtig verwenden: Dies funktioniert nur, wenn beide GreetingService Schnittstellen mit den gleichen Methoden haben ... also immer sie

hier synchron halten können Sie die beiden Projekte herunterladen, wie oben beschrieben, auf eigene Gefahr: googledrive link

+0

Entschuldigung, aber ich kann nicht verstehen, wie man diese Funktion benutzt.? Wie es sinnvoll ist, andere Methoden des Domänenservers aufzurufen. –

+0

es ist genau das gleiche, was Sie in Ihrem andriod Projekt mit 'SyncProxy.setBaseURL (" http://www.enggheads.in/CrossModuleCode/ ") tun;' init den Begrüßungsdienst 'GreetingServiceAsync grußservice = GWT.create (GreetingService .class); 'und dann den Einstiegspunkt ändern' ((ServiceDefTarget) greetService) .setServiceEntryPoint ("http://www.enggheads.in/CrossModuleCode/"); ' – Tobika

+0

Es ist nicht möglich, die Methoden des anderen Projektservers zu verwenden . Wie wenn ich eine Funktion Spaß() in einem anderen Projekt habe dann wie man es im aktuellen Projekt verwendet. Eine mobile Website Projekt andere die gleiche Website im Web. Hoffe, du hast meine Abfrage verstanden –