W Eclipse wybieramy File → New → Dynamic Web Project
Do utworzenia mojego Web Service'u wybrałem podejście bottom-up czyli utworzenie usługi z klasy Java. Alternatywnie można wybrać podejście top-down czyli utworzenie usługi na bazie istniejącego dokumentu WSDL.
Poniżej moja klasa z jedną metodą
public class AxisDemoService { public String sayHello(String name){ return "Hello "+name; } }
Następnie wybieramy File –> New → Web Service
W następnym kroku należy wybrać funkcje dostępne dla naszej usługi
i wystartować server
To czy usługa została poprawnie uruchomiona można sprawdzić pod adresem: http://localhost:8080/AxisWS/services
Czas na utworzenie aplikacji klienckiej. Ja zrobię to w osobnym projekcie o nazwie AxisWSClient.
Ponownie wybieramy File → New → Dynamic Web Project , a następnie File –> New → Web Service Client. Wskazujemy na lokalizację naszego dokumentu WSDL:
Poniżej wygenerowany z automatu kod mojej aplikacji klienckiej.
Czas na mały test. Utworzyłem w tym celu dodatkową klasę
import java.rmi.RemoteException; public class AxisDemoServiceTest { public static void main(String[] args) throws RemoteException { AxisDemoServiceProxy proxy = new AxisDemoServiceProxy(); proxy.setEndpoint("http://localhost:8080/AxisWS/services/AxisDemoService?wsdl"); String message = proxy.sayHello("Kuba"); System.out.println(message); } }
Warto jeszcze zabezpieczyć usługę. W tym celu wykorzystałem najprostszą z możliwych autentykację typu BASIC. W pliku konfiguracyjnym tomcat-users.xml dodałem użytkownika
i stworzyłem odpowiednie wpisy w pliku web.xml
Axis Services /services/* ws_role BASIC Axis WS Realm
Moja klasa testowa w aplikacji klienckiej także wymagała małej modyfikacji
public class AxisDemoServiceTest { public static void main(String[] args) throws RemoteException { AxisDemoServiceProxy proxy = new AxisDemoServiceProxy(); proxy.setEndpoint("http://localhost:8080/AxisWS/services/AxisDemoService?wsdl"); AxisDemoServiceSoapBindingStub stub = (AxisDemoServiceSoapBindingStub)proxy.getAxisDemoService(); stub.setUsername("ws_user"); stub.setPassword("ws_password"); String message = proxy.sayHello("Kuba"); System.out.println(message); } }
Działa.