RESTful Web Services na platformie Java EE (JAX-RS)

Podobne dokumenty
Ćwiczenie dotyczące platformy Java EE zostało przygotowane z myślą o środowisku NetBeans w wersji 7.3 (do pobrania z

Java EE: JSF + EJB + JPA

Java EE: JSF + EJB + JPA + CDI + BV

Zaawansowane aplikacje internetowe - laboratorium

Web Services (SOAP) Ćwiczenie 1

Enterprise JavaBeans (EJB)

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

E:\DYDAKTYKA\ZAI\ZWWW\Laboratoria\L07\Java Persistence.doc 2011-lis-24, 17:0 Zaawansowane aplikacje internetowe Laboratorium Java Persistence.

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Aplikacje WWW - laboratorium

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Katalog książek cz. 3: Web Service

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Programowanie Obiektowe GUI

Platformy Technologiczne

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

Zaawansowane aplikacje internetowe - laboratorium

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Laboratorium 1 Wprowadzenie do PHP

Zaawansowane aplikacje WWW - laboratorium

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Aplikacje WWW - laboratorium

Dokumentacja techniczna API systemu SimPay.pl

Zastosowanie komponentów EJB typu Session

Projektowanie aplikacji internetowych laboratorium

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Aplikacje internetowe i rozproszone - laboratorium

Wykład 05 Bazy danych

Aplikacje www laboratorium

6. Formularze tabelaryczne, obiekty nawigacji - rozgałęzienia

Wykład 5: PHP: praca z bazą danych MySQL

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

Wdrożenie modułu płatności eservice. dla systemu Magento

Laboratorium 3. Odkrywanie reguł asocjacyjnych.

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Zaawansowane aplikacje internetowe laboratorium

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Bazodanowe usługi sieciowe w technologii ASP.NET. dr inż. Tomasz Tatoń

Zaawansowane aplikacje internetowe

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

Podstawowe wykorzystanie Hibernate

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

akademia androida Składowanie danych część VI

Oracle Application Express

Aplikacje WWW - laboratorium

Wstęp - Prosta aplikacja internetowa w technologii Java EE 5. Programowanie komponentowe 1

Instrukcja laboratoryjna

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym PrestaShop (plugin dostępny w wersji ecommerce)

Laboratorium 7 Blog: dodawanie i edycja wpisów

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Wprowadzenie do Doctrine ORM

Specyfikacja HTTP API. Wersja 1.6

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Instrukcja instalacji systemu. CardioScan 10, 11 i 12

KONFIGURACJA SERWERA USŁUG INTERNETOWYCH

UONET+ - moduł Sekretariat. Jak wykorzystać wydruki list w formacie XLS do analizy danych uczniów?

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Bazy danych. Polecenia SQL

Dostęp do baz danych w ASP.NET.

Instrukcja użytkownika

Podstawy technologii WWW

BAZY DANYCH. CREATE TABLE dbo.wydzialy (ID INT, Akronim VARCHAR(4) NOT NULL, Wydzial VARCHAR(30) NOT NULL, CONSTRAINT Kluczyk PRIMARY KEY(ID) )

Instrukcja EQU Kantech

Telesprzedaż by CTI Instrukcja

Podręcznik Integracji

System Symfonia e-dokumenty

Autor: Joanna Karwowska

Produkcja by CTI. Proces instalacji, ważne informacje oraz konfiguracja

Zastępstwa Optivum. Jak przenieść dane na nowy komputer?

Instrukcja instalacji systemu. CardioScan 10, 11 i 12

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym PrestaShop (plugin dostępny w wersji ecommerce)

Ćwiczenia 9 - Swing - część 1

Opcje Fiery1.3 pomoc (klient)

Podstawy Pentaho Data Integration

Płace VULCAN. 2. W polu nad drzewem danych ustaw rok, za który chcesz utworzyć deklaracje.

Opcje Fiery1.3 pomoc (serwer)

11. Rozwiązywanie problemów

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Zaawansowane aplikacje internetowe

Aplikacje internetowe - laboratorium

Zarządzanie licencjami dla opcji Fiery na komputerze klienta

8. Listy wartości, dodatkowe informacje dotyczące elementów i przycisków

Java Persistence API. Class powinny być zaznaczone. Kliknij przycisk Finish.

Instalacja i konfiguracja IIS-a na potrzeby dostępu WEBowego/Secure

Wdrożenie do projektu

Transkrypt:

RESTful Web Services na platformie Java EE (JAX-RS) Ćwiczenie dotyczące zostało przygotowane z myślą o środowisku NetBeans w wersji 8.x (do pobrania z http://www.netbeans.org/). Ćwiczenie 1 Celem ćwiczenia jest przygotowanie usługi sieciowej opartej na klasie Java oznaczonej adnotacjami. 1. Uruchom środowisko NetBeans. 2. Utwórz nowy projekt typu Web Application z kategorii Java Web. 3. W kreatorze nowej aplikacji zmień nazwę aplikacji na Complaints, jako serwer wybierz GlassFish, a dla pozostałych opcji pozostaw wartości domyślne. 4. Uruchom serwer bazy danych Java DB korzystając z panelu Services. 5. Z poziomu panelu Services połącz się z bazą danych sample na lokalnym serwerze Java DB (derby).

6. Utwórz w bazie danych tabelę, na której działać będzie tworzona aplikacja, realizując poniższe kroki: a. Wywołaj okno poleceń SQL dla bazy danych sample wybierając z menu kontekstowego dla węzła reprezentującego połączenie opcję Execute Command. b. Korzystając z okna poleceń SQL wykonaj kolejno poniższe polecenia SQL (pierwsze może zakończyć się błędem służy do ewentualnego usunięcia istniejącej już tabeli): DROP TABLE complaints; CREATE TABLE complaints (id INT NOT NULL GENERATED ALWAYS AS IDENTITY CONSTRAINT complaints_pk PRIMARY KEY, complaint_date DATE, complaint_text VARCHAR(60) NOT NULL, author VARCHAR(60) NOT NULL, status VARCHAR(6) NOT NULL DEFAULT 'open', CHECK(status IN ('open', 'closed'))); INSERT INTO complaints (complaint_date, complaint_text, author) VALUES (CURRENT_DATE, 'Please check TV in room 242', 'Jim Brown'); INSERT INTO complaints (complaint_date, complaint_text, author) VALUES (CURRENT_DATE, 'Repair fridge in room 311', 'Arthur McCoy'); INSERT INTO complaints (complaint_date, complaint_text, author) VALUES (CURRENT_DATE, 'Remove the blood stains on the wall in room 242', 'Jim Brown'); INSERT INTO complaints (complaint_date, complaint_text, author, status) VALUES (CURRENT_DATE, 'Fix air conditioning in room 242', 'Johny Bravo', 'closed'); c. Upewnij się odpowiednim zapytaniem, że faktycznie zostały dodane cztery wiersze do tabeli COMPLAINTS.

7. W utworzonym projekcie uruchom kreator Entity Classes from Database z kategorii Persistence. a. Zleć utworzenie klasy encji odpowiadającej tabeli COMPLAINTS z bazy danych dostępnej poprzez źródło jdbc/sample. b. W kolejnym kroku kreatora, dotyczącym tworzonych klas encji, zmień nazwę generowanej klasy na liczbę pojedynczą ( Complaint ) i ustaw pakiet na entities. Pozostałe opcje pozostaw domyślne.

8. Otwórz nowo utworzoną klasę Complaint. Zweryfikuj: a. Pochodzenie i przeznaczenie poszczególnych adnotacji (JPA, JAXB, Bean Validation) b. Które ograniczenia z bazy danych są reprezentowane w encji przez odpowiadające im ograniczenia Bean Validation? Długości łańcuchów znaków? Ograniczenie na wartości kolumny STATUS? 9. Uruchom w projekcie kreator RESTful Web Services from Entity Classes z kategorii Web Services. W kreatorze wybierz klasę encji wygenerowaną w poprzednim kroku ćwiczenia. W ostatnim kroku kreatora pozostaw opcje domyślne.

10. Obejrzyj w strukturze projektu węzeł reprezentujący wygenerowaną usługę REST zwracając uwagę na dostępne operacje. Przejrzyj kod wygenerowanej klasy implementującej usługę zwracając uwagę na adnotacje JAX-RS. 11. Uruchom aplikację. 12. Przetestuj usługę wybierając z menu kontekstowego dla niej opcję Test Resource Uri. 13. Zmodyfikuj adres w przeglądarce dodając do niego człon identyfikujący konkretną skargę np. /1. 14. Otwórz plik service.applicationconfig i zbadaj jego zawartość. Jakie dwie funkcje spełnia dla Twojej aplikacji? 15. Adres URL zasobu jest długi i skomplikowany. Wykonaj zmiany w odpowiednich adnotacjach, by zasób Complaints był dostępny pod adresem http://localhost:8080/ Complaints/resources/complaints. a. zmień przedrostek całej usługi b. zmień adres konkretnego zasobu.

16. Dodaj możliwość sprawdzenia statusu skargi poprzez adres URI. a. Otwórz klasę fasady ComplaintFacadeREST. b. Dodaj metodę checkstatus o następującej treści: public String checkstatus(integer id) { return super.find(id).getstatus(); } c. Metoda ta musi być dostępna przez wywołanie GET. Dodaj odpowiednią adnotację. d. Ustaw ścieżkę, pod którą dostępna będzie ta metoda, na {id}/status. Ponownie dodaj stosowną adnotację. e. Ostatnią adnotacją dla metody zapewnij by status udostępniony był czystym tekstem. f. Stwórz powiązanie między parametrem id w nagłówku metody a polem {id} w jej adresie. Wykorzystaj do tego adnotację @PathParam. g. Uruchom aplikację i przetestuj odczyt statusu dla kilku skarg. 17. Utwórz aplikację do testowania usługi z wykorzystaniem testera oferowanego przez NetBeans. W tym celu stwórz nowy projekt typu Web Application i nadaj mu nazwę ComplaintsTest. 18. Z menu kontekstowego dla projektu Complaints (nie ComplaintsTest!) wybierz opcję Test RESTful Web Services.

19. W kreatorze wybierz opcję utworzenia testu w istniejącym projekcie. Następnie kliknij przycisk Browse i wybierz nowo utworzony projekt. Kliknij OK. 20. By uruchomić stronę do przeprowadzania testów, z menu kontekstowego pliku testresbeans.html wybierz Run File.

21. W oknie przeglądarki powinna otworzyć się strona do testowania usługi REST. Najpierw sprawdź źródło danych, na podstawie którego została automatycznie wygenerowana. W tym celu kliknij na pole WADL w lewym górnym rogu strony. Komentarz: WADL to Web Application Description Language. Pełni podobną rolę do WSDL stosowanego przy usługach SOAP. Pozwala na automatyczne wykrywanie usług sieciowych opartych o HTTP. Dzięki takiemu opisowi można automatycznie wygenerować klienta dla aplikacji REST. 22. Jakie metody HTTP, wg WADL, dostępne są dla utworzonego kreatorem zasobu complaints/{id} a jakie dla skonfigurowanego przez nas complaints/{id}/status? 23. Przetestuj usługę za pomocą testera. Spróbuj: a. wyświetlić wszystkie skargi w postaci XML i JSON (patrz UWAGA poniżej!), b. wyświetlić skargę o identyfikatorze 3, c. wyświetlić liczbę skarg, d. wyświetlić skargi od 2 do 3. Jakie parametry trzeba podać, by faktycznie pokazały się 2 wpisy? e. wyświetlić status skargi 3, a następnie 4. UWAGA!!! Ze względu na bug serwera GlassFish 4.1.1 próba pobrania danych w formacie JSON może skończyć się błędem. Opis ręcznego rozwiązania problemu można znaleźć np. tu: http://stackoverflow.com/questions/33722764/glassfish-error-when-producing-json. Gotowy plik JAR do podmiany w podkatalogu modules instalacji GlassFisha można pobrać stąd: http://www.cs.put.poznan.pl/mwojciechowski/pub/org.eclipse.persistence.moxy.jar. Po podmianie pliku JAR należy zatrzymać i ponownie uruchomić serwer GlassFish (w NetBeans z poziomu panelu Services).

24. Przetestuj możliwość zmiany zawartości bazy danych poprzez usługę REST: a. W węźle complaints wybierz metodę POST z zawartością XML i wklej jako treść żądania poniższy XML: <?xml version="1.0" encoding="utf-8"?> <complaint> <author>marvin Doherty</author> <complaintdate>2016-05- 12T00:00:00+02:00</complaintDate> <complainttext>please fix a leaking tap in room 234</complaintText> <status>open</status> </complaint> b. Zwróć uwagę na kod statusu odpowiedzi HTTP. Co on oznacza? c. Pobierz wszystkie dostępne skargi i zapamiętaj jaki identyfikator został nadany dodanej przed chwilą skardze. d. Spróbuj zaktualizować dodaną ostatnio skargę, zmieniając w jej treści numer pokoju na 432 i status na closed. W tym celu wyślij żądanie metodą PUT wykorzystując sprawdzony przed chwilą identyfikator tej skargi, podając jako treść żądania odpowiedni XML. Uwaga: Jeżeli w treści XML-a nie podasz węzła <id>, utworzony zostanie nowy wpis! 25. Dodaj obsługę filtrowania skarg według statusu: a. W klasie ComplaintFacadeREST do metody findall dodaj parametr typu String o nazwie status. b. Adnotacją @QueryParam powiąż go z nazwą parametru query string status. Uwaga: Wcześniej wykorzystywaliśmy parametry ścieżkowe. Parametry ścieżkowe są odpowiednie do identyfikacji zasobu. Do filtracji lub sortowania zalecane jest używanie parametrów zawartych w łańcuchu query string. c. Zwróć uwagę, że dla parametrów typu query nie trzeba zmieniać ścieżki związanej z metodą klasy d. Po dodaniu parametru do metody, przestała ona nadpisywać metodę findall z klasy bazowej usuń więc adnotację @Override

26. Dodaj do metody findall kod, który: a. zwróci dotychczasowy rezultat, jeżeli parametr status jest pusty (null). b. w przeciwnym wypadku zwróci wynik wywołania zapytania nazwanego (NamedQuery) Complaint.findByStatus przekazując do niego wartość parametru status. if (status!= null &&!"".equals(status)) else return em.createnamedquery("complaint.findbystatus").setparameter("status", status).getresultlist();... 27. Uruchom usługę i przetestuj testerem działanie filtrowania wg statusu dla zasobu complaints. 28. Przetestuj filtrowanie skarg wg statusu bezpośrednio wprowadzając odpowiedni adres w pasku adresu przeglądarki (bez pomocy testera). Ćwiczenie 2 (do samodzielnego wykonania) Celem ćwiczenia jest przygotowanie klienta w formie strony HTML wykorzystującej bibliotekę jquery dla usługi REST utworzonej w poprzednim ćwiczeniu. 1. Przejdź do edycji strony index.html w projekcie Complaints. 2. Dołącz do strony bibliotekę jquery w wersji 1.x. 3. Umieść na stronie formularz z polem tekstowym do wpisania identyfikatora zlecenia i przyciskiem do wywołania usługi REST. 4. Oprogramuj pobranie żądaniem Ajax w formacie JSON skargi o podanym w polu tekstowym identyfikatorze po kliknięciu przycisku. Dane o autorze i treść skargi powinny zostać wyświetlone poniżej formularza. Ćwiczenie 3 Celem ćwiczenia jest przygotowanie klienta w formie konsolowej aplikacji Java dla usługi REST utworzonej w pierwszym ćwiczeniu. 1. Utwórz w środowisku NetBeans nowy projekt typu Java Application z kategorii Java. Nazwij go ComplaintsClient. Poproś o utworzenie główniej klasy w projekcie. 2. Dodaj do projektu (poprzez edycję jego właściwości) biblioteki Java EE 7 API Library oraz Jersey.

3. Zastąp treść metody main() poniższym kodem: Client client = ClientBuilder.newClient(); String count = client.target("http://localhost:8080/complaints/" + "resources/complaints/count").request(mediatype.text_plain).get(string.class); System.out.println("Count: " + count); client.close(); Zaimportuj wykorzystywane klasy/interfejsy z pakietów javax.ws.rs.client i javax.ws.rs.core. 4. Przetestuj działanie klienta. 5. Samodzielnie (możesz wzorować się na przykładach z Java EE 7 Tutorial) dodaj w metodzie main() klienta następujące operacje i przetestuj ich działanie dla formatów wymiany danych JSON i XML. a. Pobierz i wyświetl na konsoli wszystkie skargi b. Pobierz i wyświetl na konsoli jedną z otwartych skarg (przesyłając jej identyfikator do usługi) c. Zmodyfikuj skargę pobraną w poprzednim punkcie zmieniając jej status na zamknięty (poprzez podmianę całego zasobu) d. Pobierz i wyświetl na konsoli wszystkie otwarte skargi.