Tworzenie usług Webservice na platformie Java EE oraz usługi sieciowe REST - 3 pytania i odpowiedzi ze szkolenia (maj 2016)

Pytania w tym artykule pojawiły się podczas szkolenia Tworzenie usług Webservice na platformie Java EE oraz usługi sieciowe REST realizowanego w dniach 16-20.05.2016r.


Jak zapewnić walidację treści komunikatów SOAP i odrzucanie nieprawidłowych zapytań (ale z odnotowaniem takiego faktu w logach)?

Osobiście rekomendowałbym wykorzystanie mechanizmu Handlerów oferowanego przez JAX-WS. Handlery to klasy, które możemy stworzyć i zarejestrować w aplikacji, zawierające dodatkową logikę wykonywaną dla każdego komunikatu. W przypadku zapytań - zanim zapytanie trafi do właściwej metody biznesowej. Handler ma dostęp do treści wiadomości i ma prawo ją odrzucić. Walidację względem XML Schema można wykonać za pomocą klasy Validator. Trzeba posiadać definicję XML Schema, ale ona i tak jest częścią WSDL. Jeśli trzeba, można także zaimplementować własny mechanizm walidacji danych XML, np. w oparciu o XPath.

Czy to nie jest tak, że bottom-up jest zawsze wygodniejszy? Po co bawić się w top-down?

JX-WS bottom-up, czyli tworzenie usługi sieciowej (i WSDL) na podstawie klas Javy, jest z pewnością wygodniejsze dla programistów Javy oraz w sytuacjach, gdy aplikacja (w szczególności model danych) już istnieje w Javie. akże wtedy, gdy zdecydowaliśmy się projektować aplikację "od strony Javy". Istnieją jednak sytuacje, kiedy na początku chcemy skupić się na web-serwisowym interfejsie naszej aplikacji (czyli WSDL), kiedy już wcześniej zostały opracowane pewne struktury XML-owe, które będą używane w komunikacji (częsta sytuacja gdy implementujemy istniejący standard lub realizujemy wytyczne narzucone przez prawo) - wówczas lepszym pomysłem może być top-down, czyli generowanie klas na podstawie WSDL (i XML Schema). Generalnie - do wyboru.

Czy usługi REST w Javie (JAX-RS) mogą korzystać z technologii WebSocket?

WebSocket to (pokrótce) rozszerzenie protokołu HTTP umożliwiające utrzymywanie stałego połączenia między klientem a serwerem i synchroniczne przesyłanie komunikatów, także z serwera do klienta. JAX-RS jest oparty o technologię serwletów, a cała koncepcja REST o bezstanowy protokół HTTP. Nie ma bezpośredniego sposobu na wykorzystanie websocketów w JAX-RS, choć oczywiście aplikacja jako całość może łączyć wiele sposobów komunikacji (na różnych URL-ach).