Zaawansowane aplikacje internetowe laboratorium Web Services (część 2). Celem ćwiczenia jest przygotowanie prostej aplikacji prezentującej technologię usług sieciowych (ang. Web Services). Przygotowana klasa języka Java zostanie opublikowana w postaci usługi sieciowej i udostępniona na zewnątrz przez osadzenie w serwerze aplikacji. Dodatkowo, przygotowany zostanie klient usługi testujący jej poprawność. Do wykonania ćwiczenia potrzebne jest zintegrowane środowisko JDeveloper Studio 11.1.1.3.0 (do pobrania z http://www.oracle.com/technetwork/developer-tools/jdev/downloads/soft11-098086.html). 1. Uruchom narzędzie JDeveloper. 2. Jeśli nie ukończyła(e)ś laboratorium Web Services (część 1) i nie posiadasz jeszcze aplikacji, to wykonaj kroki 2, 3 i 4 z laboratorium Web Services (część 1). 3. Kliknij prawym przyciskiem myszy na ikonie aplikacji Laboratoria i z menu kontekstowego wybierz New Project. Rozwiń gałąź kategorii General i zaznacz kategorię Projects. W prawym oknie zaznacz element Generic Project. Kliknij przycisk OK.
4. W kolejnym oknie, w polu Project Name wpisz WebServices2. Kliknij przycisk Finish.
5. Kliknij prawym przyciskiem myszy na ikonie projektu WebServices2. Z menu kontekstowego wybierz opcję New W oknie kategorii zaznacz gałąź General. W kategorii General wybierz kategorię Java. Z listy dostępnych elementów w oknie po prawej stronie wybierz Java Class. Kliknij przycisk OK.
6. Pierwszym krokiem w tworzeniu usługi sieciowej będzie zdefiniowanie własnej klasy reprezentującej wyjątek polegający na niepoprawnym wywołaniu usługi, np. poprzez podanie jako parametrów liczb ujemnych albo liczb nie będących liczbami całkowitymi. Wpisz nazwę klasy: WrongArgumentsException w polu Name. Wpisz nazwę pakietu: webservices2 w polu Package, nazwę nadklasy: java.lang.exception w polu Extends. Resztę pól w kreatorze pozostaw bez zmian. Kliknij przycisk OK.
7. Plik WrongArgumentsException.java został automatycznie załadowany do edytora. Uzupełnij plik poniższym kodem: package webservices2; public class WrongArgumentsException extends Exception { public WrongArgumentsException(Throwable throwable) { super(throwable); public WrongArgumentsException(String string, Throwable throwable) { super(string, throwable); public WrongArgumentsException(String message) { super(message); public WrongArgumentsException() { super();
8. Programy stanowiące usługi sieciowe powinny być szczególnie dobrze dokumentowane ze względu na to, że ich głównymi użytkownikami są użytkownicy zdalni. Stąd, na projektant(k)ach usług sieciowych ciąży obowiązek starannego opisywania API. W przypadku języka Java najbardziej odpowiednim narzędziem jest Javadoc. Uzupełnij kod pliku WrongArgumentsException.java o komentarze Javadoc. Przykładowa wersja finalna pliku może wyglądać tak. package webservices2; /** * The class <code>wrongargumentsexception</code> is a form * of <code>throwable</code> and indicates the condition when input * parameters for the Web Service are incorrect. * * @author Mikolaj Morzy * @version 0.1 */ public class WrongArgumentsException extends Exception { /** * Constructs a WrongArgumentsException with the specified detail * message. * * @param message the message describing this particular exception. */ public WrongArgumentsException(String message) { super(message); Zapisz zmiany w pliku WrongArgumentsException.java przy pomocy kombinacji klawiszy Ctrrl+S.
9. Kliknij prawym przyciskiem myszy na ikonie projektu WebServices2 i z menu kontekstowego wybierz New, zaznacz kategorię General i wybierz element Java Class. Kliknij przycisk OK. Wpisz nazwę klasy: EuclideanAlgorithm w polu Name. Wpisz nazwę pakietu: webservices2 w polu Package, nazwę nadklasy: java.lang.object w polu Extends. Resztę pól w kreatorze pozostaw bez zmian. Kliknij przycisk OK.
10. Do znajdowania największego wspólnego podzielnika dwóch liczb wykorzystamy algorytm Euklidesa (http://en.wikipedia.org/wiki/euclids_algorithm). Zmień zawartość EuclideanAlgorithm.java w następujący sposób: (nie zapomnij o udokumentowaniu poszczególnych elementów).
package webservices2; /** * The <code>euclideanalgorithm</code> class is an implementation * of the well-known algorithm attributed traditionally to Euclid. * The algorithm takes as input two positive integers and computes * the greatest common divisor of the two. The first appearance of * the algorithm dates back to 300 BC in Euclid's <i>elements</i>. * * @author Mikolaj Morzy * @version 0.1 */ public class EuclideanAlgorithm { /** * Computes the greatest common divisor of the two * input positive integers * * @param a The first number * @param b The second number * @return The greatest common divisor of the input parameters * @throws WrongArgumentsException If one of the parameters * is not positive, or when input parameters are not integers */ public int GreatestCommonDivisor(String a, String b) throws WrongArgumentsException { int i, j; try { i = Integer.parseInt(a); j = Integer.parseInt(b); catch (NumberFormatException e) { throw new WrongArgumentsException("Parametry muszą być liczbami całkowitymi!"); if ((i < 0) (j < 0)) throw new WrongArgumentsException("Parametry muszą być liczbami dodatnimi!"); while (i!= j) if (i > j) i -= j; else j -= i; return i; public EuclideanAlgorithm() { super();
Zapisz zmiany w pliku EuclideanAlgorithm.java przy pomocy kombinacji klawiszy Ctrrl+S. 11. W nawigatorze obiektów rozwiń gałąź reprezentującą projekt WebServices2, a następnie rozwiń gałąź Application Sources. Zaznacz węzeł reprezentujący pakiet webservices2. Z menu głównego wybierz Build->Javadoc webservices2. Po zakończeniu generowania dokumentacji w oknie dziennika (u dołu ekranu) kliknij na odnośnik. Ekran komputera powinien wyglądać teraz tak:
12. W kolejnym kroku udostępnimy stworzoną klasę EuclideanAlgorithm.java (wraz z pomocniczą klasą WrongArgumentsException.java) w postaci usługi sieciowej. Kliknij prawym przyciskiem myszy na ikonie pliku EuclideanAlgorithm.java znajdującym się w folderze webservice2, w oknie Application Nawigator i z menu kontekstowego wybierz opcję Create Web Service.
W kolejnym oknie wybierz wersję J2EE 1.4 JAX-RPC, with suport for 10.3 WLS i kliknij przycisk Next. 13. W kolejnym oknie w polu Web Service Name wpisz EuclideanAlgorithmService, W polu Port Name wpisz EuclideanAlgorithmPort. Resztę kroków kreatora pomijamy, przyjmą one wartości domyślne. Kliknij przycisk Finish..
14. Po zakończeniu kreatora usługi sieciowej, pojawił się nowy plik EuclideanAlgorithmService.wsdl (katalog wsdl w katalogu Web Content) w drzewie projektu: 15. Kliknij prawym przyciskiem myszy na ikonie EuclideanAlgorithmService znajdującego się w drzewie projektu w katalogu webservices2 i z menu kontekstowego wybierz opcję Run. Poczekaj na konfigurację i uruchomienie serwera IntegratedWebLogicServer. Dostajemy informację że usługa działa ( has been started on.. );
16. Kliknij na wygenerowanym przez serwer adresie usługi wsdl, Target URL: http://localhost:7101/laboratoria-webservices2-context-root/euclideanalgorithmport Pojawi się nowe okno: Skopiuj z pola URL (na samej górze) adres usługi, do swojej przeglądarki internetowej i naciśnij Enter: W linku WSDL page mamy pełną informację o uruchomionej usłudze w postaci drzewa XML. Wybierz link Test page. Poczekaj na konfigurację usługi podczas pierwszego uruchomienia:
17. Po chwili w oknie przeglądarki mamy już dostęp do naszej usługi WSDL: Podaj dwie liczby i spróbuj wygenerować informację o ich Największym Wspólnym Dzielniku. Kliknij przycisk GreatestCommonDivisor znajdujący się po prawej stronie. 18. W nowym oknie otrzymamy szczegółowe informacje w postaci dwóch dokumentów SOAP: W zakładce Service Request znajdują się informacje o dwóch wpisanych przez nas liczbach, natomiast w Service Response otrzymujemy największy wspólny dzielnik wpisanych liczb. Aby ponownie wyliczyć największy wspólny dzielnik, użyj przycisku Re-Invoke znajdującego się po prawej stronie lub przycisku Show Operations znajdującego się po stronie lewej na górze. 19. Przetestuj usługę wpisując różne liczby, w szczególności liczby ujemne czy liczby nie będące liczbami całkowitymi.