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ę. Adnotacja ta informuje o tym, że dana metoda ma być udostępniana w ramach usługi sieciowej. public Book searchbyisbn(string isbn) { public List<Book> searchbytitle(string title) { 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
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
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
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
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