WS - ćwiczenie pierwsze

Korzystanie z Usług Sieciowych przy pomocy protokołu SOAP

Celem tego podstawowego ćwiczenia jest zrozumienie działania ustług internetowych (Web Service) i implementacja prostych aplikacji, które są w stanie użyć dostępnie dostępnych Web Serviców. Poszczególne punkty tłumaczą jak przetestować przykładowy serwis oraz jak stworzyć aplikacje umożliwiające wywołanie udostępnionych usług w kilkku językach programowania.

Poniższe ćwiczenie wykorzystuje JDK 1.6.

Wywołanie aplikacji używającej stylu RPC

Uwaga: styl RPC jest uważany za przestarzały i nie wspierany przez JAXWS 2.0, dlatego do wykonania tej części ćwiczeń będziemy używać przestarzałej biblioteki AXIS.

Celem ćwiczenia jest wywołanie usługi udostępnionej przez Koścół Św. Gregoriosa. Podaje ona date Świąt Wielkanocnych w zadanym roku.

Wykonać tą usługę można wykorzystujac pakiet SoupUI (używając tego pakietu można zobaczyć tam komunikaty SOAP). Prosze ściagnąć plik konfigurujący aplikację SoapUi na maszynach dostępnych na laboratoriach soapuisetup.sh

. soapuisetup.sh

Biblioteka AXIS zainstalowana jest w katalogu:

/afs/wszib/usr/t/s/tszepie/pub/prir/axis-1_4

Aby z niej móc korzystać, należy dopisać do CLASSPATH wszystkie pliki JAR znajdujące się w dystrybucji AXIS. Robimy to skryptem axissetup.sh.

. axissetup.sh

Do tworzenia klienta skorzystamy z opisu usługi, dostępnej w pliku WSDL dostępnym pod adresem: http://www.stgregorioschurchdc.org/wsdl/Calendar.wsdl. Wszystkie potrzebne pliki wygenerujemy narzędziem WSDL2Java dostępnym w AXIS:

java org.apache.axis.wsdl.WSDL2Java http://www.stgregorioschurchdc.org/wsdl/Calendar.wsdl

Wygeneruje nam to pliki: Klienta musimy napisać sami. Na początku deklarujemy korzystanie z utworzonych plików:

import org.stgregorioschurchdc.www.Calendar.*;

Następnie w funkcji main()

try {
  //tworzymy referencje do usługi
  Calendar calendar = new CalendarLocator();

  //pobieramy port SOAPowy
  EasterDateSoapPort port = calendar.getEasterDateSoapPort();

  //wywolujemy zdalnie funkcję usługi
  System.out.println(port.easter_date(Short.parseShort(args[0])));

} catch (Exception e) {
  System.err.println("App exception: " + e.getMessage());
  e.printStackTrace();
}

Gotowy Client.java. Kompilujemy utworzony plik:

javac Client.java

Uruchamiamy klienta pytając o Wielkanoc w roku 2012:

java Client 2012

Dostajemy odpowiedź:

2012/04/08

Wywołanie aplikacji używającej stylu Document

Styl Document jest standardem obslugiwanym przez standard JAXWS 2.0 implementowany przez JDK 1.6, przez co tworzenie klienta jest znacznie uproszczone. W trakcie tego ćwiczenia wywołamy jedną z metod dostarczanych przez serwis dostępny pod adresem: http://www.holidaywebservice.com/Holidays/GBSCT/Dates/GBSCTHolidayDates.asmx?WSDL. Umożliwia on pobranie dat świąt narodowych Szkocji. Opis funkcji udostępnianych przez ten status jak i status dostępności serwisu może być monitorowany na tej stronie: http://webservices.seekda.com/providers/holidaywebservice.com/GBSCTHolidayDates. W celu wygenerowania klas niezebędnych do stworzenia klenta serwisu należy wywołać następującą komende:

wsimport -p client -keep http://www.holidaywebservice.com/Holidays/GBSCT/Dates/GBSCTHolidayDates.asmx?WSDL

A następnie stworzyć klase klienta:

package client;

public class Client {

  public static void main(String[] args) {
    GBSCTHolidayDates service = new GBSCTHolidayDates();
    GBSCTHolidayDatesSoap proxy = service.getGBSCTHolidayDatesSoap();
    System.out.println(proxy.getHalloween(2011));
  }
}

Uwaga: klasa klienta musi znajdować sie w katalogu client.

Następnie kompilujęmy stworzoną aplikację:

javac client/*.java

A następnie uruchamiamy aplikację:

java client.Client

Jako rezultat uzyskujemy datę hallowin w roku 2011

2011-10-31T00:00:00

Klient w Perlu

Perl jest językiem skryptowym, używanym do przetwarzania plików tekstowych, również w skryptach CGI. Istnieje wygodny moduł o nazwie SOAP::Lite, służacy do obsługi Usług Sieciowych (Web Services). Progam client.pl w perlu korzystający z tej samej usługi podającej datę wielkanocy będzie miał postać:

use SOAP::Lite;

 print SOAP::Lite->service('http://www.stgregorioschurchdc.org/wsdl/Calendar.wsdl')
  -> easter_date(@ARGV[0]);
 print "\n"

Program ten uruchamiamy perlem (w jednej lini!), podając ścieżkę do biblioteki SOAP::Lite:

perl -I /afs/wszib/usr/t/s/tszepie/pub/prir/SOAP-Lite-0.69/lib/ client.pl 2008


Marek Kasztelnik, Maciej Malawski, Marcin Radecki, Tomasz Szepieniec