
Java EE Webservice Server und Client schreiben
In diesem kleinen Tutorial zeige ich dir wie du einen Server und einen Client mit JavaEE in Java 8 mit XML Web Services (JAX-WS) schreiben kannst.
Ich baue auf die beiden Grundlagenartikel zum Server und zum Client auf. zumindest mal gelesen haben solltest du sie.
Damit ein Webservice in Java verwendet werden kann müssen Proxy Klassen erzeugt werden.
Der Proxy wird anhand der WSDL Klassen erzeugt dafür gibt es das Tool: wsimport-Tool. Es erstellt die benötigten Java Klassen. Mit Netbeans kannst du einfach die WSDL URL einbinden. Auf dem einen oder anderen weg sollte dein Projekt dann die Erzeugten Klassen haben.
Ich habe ein normales JavaEE Projekt angelegt, genau wie in dem anderen Artikel.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package test; import javax.jws.Oneway; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class Testklasse2 { @WebMethod public String sag(String text){ return "Gesagt wurde: " + text; } @WebMethod @Oneway public void zaeleBis(int zahl){ for(int i=0;i <= zahl; i++){ i++; } } } |
Die Klasse hat die @WebService Annotation und die Methoden haben entweder die @WebService Annotation, damit der client nach aufruf auf rückantwort wartet oder die @Oneway Annotation damit der Client nicht wartet sondern sofort weiterarbeitet.
Sind die Klassen soweit im Server erstellt kann man sich die Proxyklassen mit dem WSImport toll oder mit Netbeans erstellen. Der aufruf ist unter Windows und linux eignetlich gleich lediglich die Dateipfade müssen geändert werden!
1 2 |
wsimport -d /home/user/webServicesTest/compiled/ -s /home/user/webServicesTest/sorce/ http://localhost:8080/ServerTestWeb/Testklasse2?w sdl |
Durch WSImportt wurden in beiden Verzeichnissen die Sorce- und die Compilierten Dateien erstellt.
Diese Klassen können jetzt verwendet werden.
Dafür kopiert man einfach die Dateien ab dem Wurzeiverzeichniss auf den src Ordner der eigenen Java Anwendung.
Bei mir heisst das paket einfach Test also kopiere ich es einfach einschliesslich aller UNTERORDNER in die IDE
Der Server hat Zwei Methoden, einmal eine Methode bei der man einen String übergibt und der Server diesen Verarbeitet und Verändert zurück gibt. Die andere Methode ist in Java nach dem Fire-and-forget Prinzip geschrieben, der Client ruft sie auf und die Methode arbeitet einfach vor sich hin bis sie fertig ist.
Der Client kann schon irgendwas anderes in der Zeit machen. Das ist also immer dann sinvoll wen der Client keine Rückmeldung vom Server braucht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package meinProgramm; import test.Testklasse2; import test.Testklasse2Service; public class Main { public static void main(String[] args) { Testklasse2Service test = new Testklasse2Service(); Testklasse2 port = test.getTestklasse2Port(); String s = port.sag("Hallo Server ich bin der Client!"); System.out.println(s); // Eine Oneway aufrufen: port.zaeleBis(1000); } } |
Wichtig: Der Server MUSS vor dem Client laufen!
Es ist sehr einfach im Prinzip werden nur die 2 Klassen gebraucht alles andere macht die IDE und WSImport für einem.
Die Rückgabe bei der Ersten Methode erscheint in der Konsole, bei der Zweiten Methode erscheint nichts.
Klar, denn die @Oneway methode soll ja nichts zurückgeben.
Auch hier gibt es wieder alle Projektdateien zum Download die sind eigentlich sehr selbsterklärend. WebService-Client-and-Server