JavaEE Lab: Simple SOAP Web Service
W tym ćwiczeniu stworzymy prostą usługę sieciową.
Kod usługi sieciowej
Napisanie usługi sieciowej jest całkiem proste, jeśli zamierzamy stworzyć strukturę usług internetowych zgodną z JSR-181. Wszystkie serwery Java EE 5 (i wyżej) obsługują tworzenie WS przy użyciu adnotacji Java. Dzięki temu możemy wskazać, że klasa POJO (Plain Old Java Object) jest usługą sieciową.
Rozpoczynamy nasze ćwiczenie tworząc za pomocą Net Beans szkielet aplikacji webowej o nazwie WebServices:
W gałęzi Source Packages tworzymy pakiet: com.example.ws, zaś w nim klasę POJO: Hello
Modyfikujemy kod klasy tak, aby wyglądał w sposób następujący:
import javax.jws.*;
@WebService
public class Hello {
@WebMethod
public String hello(String name) {
return „Hello, „ + name;
}
}
Kompilujemy tak zmodyfikowaną aplikację i wdrażamy ją na serwer aplikacyjny.
Na serwerze Glassfish przetestować aplikację możemy korzystając z linka:
http://127.0.0.1:8080/WebServices/HelloService?Tester
WSDL znajdziemy pod adresem:
http://127.0.0.1:8080/WebServices/HelloService?wsdl
Zwróć uwagę na zastosowane adnotacje:
@WebService mówi JavaEE i serwerowi aplikacyjnemu, że klasa/obiekt jest to usługa sieciowa (domyślna nazwa to HelloService)
@WebMethod deklaruje, że poniższa metoda jest operacją usługi internetowej.
!!! Domyślnie, jeśli nie masz tej adnotacji, WSZYSTKIE METODY PUBLICZNE są ujawnione jako operacje.
Lab 2: Piszemy bardziej złożoną usługę internetową
W tym ćwiczeniu będziemy eksperymentować z różnymi typami danych zwracanymi z usługi sieciowej.
Inne typy danych
JAX-WS definiuje następujące proste typy danych Java do odpowiednika w schemacie XML:
Dodatkowo tablice (Arrays) i obiekty (JavaBeans) są mapowane odpowiednio na xsd:complexType, składające się z kombinacji xsd:sequence i xsd:element.
Zobaczymy, jaki efekt w WebService ma zwrócenie prostej tablicy obiektów i bardziej złożonego typu, takiego jak JavaBean.
Tworzenie JavaBean
Utwórz javabean o nazwie HelloBean. Powinno on mieć właściwości String name & int age.
Wskazówka:
- utwórz klasę w pakiecie com.example.ws o nazwie HelloBean,
- dodaj atrybut: private String name;
- private int age;
- wygeneruj gettery i settery
Tworzenie nowego Web Service
Nową usługę sieciową nazwiemy tym razem HelloComplex. Możemy ją stworzyć poprzez skopiowanie i modyfikację klasy Hello.java:
Po skompilowaniu nowej wersji aplikacji wdrażamy ją na serwer aplikacyjny i testujemy.
Zwróć uwagę na:
- Nową formę WSDLa
- Obejrzyj wygenerowany automatycznie plik XSD pod adresem: http://localhost:8080/WebServices/HelloComplexService?xsd=1
Lab 3: Tworzymy klienta usługi sieciowej
W ćwiczeniu stworzymy klienta ostatnio wdrożonego WebService. W tym celu przygotujemy nową aplikację webowa o nazwie WebServicesClient:
Po utworzeniu aplikacji generujemy klienta WebService (File -> New, w kategoriach wskazujemy Web Services, rodzaj pliku: Web Service Client)
Na kolejnym ekranie kreatora wskazujemy plik WSDL na którym chcemy bazować. W tym miejscu powinniśmy wskazać WSDL usługi, którą wdrożyliśmy na serwer w poprzednim ćwiczeniu.
W pole Package wpisujemy: com.example.ws.client
Rozwijamy drzewo naszej aplikacji w zakładce Projects i nawigujemy do elementu Generated Sources, który również rozwijajmy. Wyświetlamy zawartość klas HelloComplexService i HelloComplex.
Testujemy klienta WebService
Docelowym etapem naszego ćwiczenia jest przetestowanie klienta.
W tym celu tworzymy Servlet, który pozwoli nam przetestować wygenerowany kod i jednocześnie wyświetlić na stronie informacje pobierane ze zdalnej usługi.
Tworzymy klasę ClientServlet w pakiecie com.example.ws.client:
Klasę opatrujemy adnotację:
@WebServlet(urlPatterns = "/client/*")
Pamiętać musimy również, że każdy Servlet rozszerza klasę bazową HttpServlet.
Implementujemy również metodę doGet. Można wykorzystać tutaj wsparcie IDE. W body klasy ClientServlet klikamy prawy przycisk myszy i wybieramy opcję Insert Code, a następnie Override Method…:
W wyświetlonym oknie wskazujemy metodę doGet. Kod szablonu metody pojawi się w ciele klasy:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
//To change body of generated methods, choose Tools | Templates.
…….