Katalog książek – cz. 3: Web Service

Transkrypt

Katalog książek – cz. 3: Web Service
Integracja aplikacji
Ćwiczenie 5
Katalog książek – cz. 3: Web Service
Przygotowanie usługi sieciowej (web service)
1) Uruchom Netbeans, otwórz projekt przygotowany w ramach poprzednich zajęć.
W kolejnych krokach przerobimy klasę BookManager na usługę sieciową SOAP oraz
opublikujemy tę usługę z użyciem wbudowanego serwera HTTP.
2) Przygotowanie klasy BookManager do opublikowania jako web service z użyciem
standardu JAX-WS:
o Przed nagłówkiem klasy BookManager umieść adnotację @WebService.
Adnotacja ta informuje biblioteki JAX-WS o tym, że dana klasa ma być użyta jako
usługa sieciowa.
@WebService
public class BookManager {
o Przed każdą z metod do wyszukiwania umieść adnotację @WebMethod.
Adnotacja ta informuje o tym, że dana metoda ma być udostępniana w ramach
usługi sieciowej.
@WebMethod
public Book searchByIsbn(String isbn) {
...
}
@WebMethod
public List<Book> searchByTitle(String title) {
...
}
@WebMethod
public List<Book> searchByAuthor(String author) {
...
}
3) Opublikowanie usługi z użyciem klasy Endpoint i wbudowanego serwera HTTP:
o W klasie Main na końcu metody main() dodamy kod uruchamiający serwer
HTTP z usługą. Zakładając, że mamy utworzoną wcześniej zmienną bm klasy
BookManager, usługę uruchomi następujący kod:
Strona 1
Integracja aplikacji
Ćwiczenie 5
String url = "http://localhost:666/books";
Endpoint.publish(url, bm);
Serwer obsługujący usługę zostanie uruchomiony na porcie 666, usługa będzie
dostępna pod adresem http://localhost:666/books
o Uruchom aplikację, w przeglądarce internetowej wejdź na adres:
http://localhost:666/books?wsdl
o Jeśli wyświetlony został dokument WSDL opisujący usługę, serwer działa
prawidłowo.
Testowanie usługi z użyciem soapUI
1) Uruchom aplikację soapUI. Stwórz nowy projekt – w okienku kreatora podaj adres
dokumentu WSDL.
2) Przetestuj usługę – wyślij kilka żądań wyszukania książek po tytule, po autorze. Znajdź
ręcznie numer ISBN wybranej książki, a potem wyślij żądanie wyszukujące po tym
numerze.
3) Zwróć uwagę na format komunikatów – na przykładzie żądania wyszukania po tytule:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:book="http://books/">
<soapenv:Header/>
<soapenv:Body>
<book:searchByAuthor>
<arg0>Lis</arg0>
</book:searchByAuthor>
</soapenv:Body>
</soapenv:Envelope>
Argument wysyłany do metody searchByAuthor nosi nazwę arg0 – takie nazwy
nadawane są automatycznie przez biblioteki JAX-WS (arg0, arg1 itd…). Jeśli chcemy
zmienić to na własną, więcej mówiącą nazwę, musimy dodać do usługi adnotacje
@WebParam. Zrobimy to w kolejnym kroku.
Strona 2
Integracja aplikacji
Ćwiczenie 5
Podobną sytuację mamy w przypadku odpowiedzi serwera – przykładowa odpowiedź na
żądanie wyszukania wygląda tak:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:searchByTitleResponse xmlns:ns2="http://books/">
<result id="AJAXJA">
<author>Steven Olson</author>
<isbn>978-83-246-1110-2</isbn>
<pages>232</pages>
<publisher>Helion</publisher>
<title>Ajax on Java</title>
<year>2007</year>
</result>
Jeśli chcemy zmienić automatycznie przyjętą nazwę result na book, musimy dodać
w kodzie usługi adnotację @WebResult.
Nadawanie własnych nazw argumentom i wynikom
1) Przejdź do Netbeans, zatrzymaj usługę.
W kodzie klasy BookManager dodaj następujące adnotacje:
o przed każdym argumentem metod wyszukujących adnotację @WebParam
z odpowiednią nazwą parametru, na przykład:
searchByTitle(@WebParam(name = "title") String title) {
w nagłówku każdej z metod, przed określeniem typu zwracanego, adnotację
@WebResult z nazwą book, na przykład:
public @WebResult(name = "book") List<Book> searchByTitle(...) {
2) Uruchom ponownie usługę. Przetestuj ją w soapUI.
Strona 3
Integracja aplikacji
Ćwiczenie 5
Zadanie 1

Dodaj w usłudze metodę do dodawania książek, przyjmującą jako argument obiekt
klasy Book. Wywołanie metody powinno spowodować dodanie książki do listy w klasie
BookManager (dodane książki nie muszą być zapisywane do pliku).

Przed dodaniem książki sprawdź, czy przesłany obiekt zawiera niepuste pola title
i author. Jeśli pola są puste, rzuć wyjątkiem.
Zadanie 2

Dodaj w usłudze metodę do usuwania książek na podstawie podanego ID.

Jeśli usuwanie się powiodło, zwróć wartość boolean true.

Jeśli nie zostanie znaleziona książka o podanym ID, rzuć wyjątkiem.
Zadanie 3

Przetestuj dodawanie i usuwanie książek w soapUI – przygotuj zestaw testów (Test
suite) z następującymi żądaniami:
o wywołanie addBook; jako autora dodawanej książki podaj swoje nazwisko;
podaj też dowolne unikatowe wartości jako tytuł i id;
o wyszukanie dodanej książki po tytule; dodaj asercje sprawdzające, czy książka
została znaleziona i czy zawiera dane zgodne z żądaniem;
o wyszukanie dodanej książki po autorze; dodaj asercje jak wyżej;
o wywołanie addBook z pustym tytułem i pustym autorem; dodaj asercję
sprawdzającą, czy odpowiedź zawiera informacje o błędzie (SOAP Fault);
o usunięcie wcześniej dodanej książki po id; dodaj asercję sprawdzającą wynik
(spodziewamy się true)..
Strona 4
Integracja aplikacji
Ćwiczenie 5
Zadanie dodatkowe

Uruchom jako web service własny kod z poprzedniego zadania dodatkowego (na
własnych danych). Dopilnuj nazewnictwa argumentów i wyników.

W narzędziu soapUI przygotuj przykładowy zestaw testów.

Dodaj mechanizm logowania, analogiczny do użytego w systemie Magento (patrz
laboratorium nr 3). Dla uproszczenia nazwa użytkownika i hasło mogą być zaszyte na
sztywno w kodzie.
Strona 5

Podobne dokumenty