WSDL (Web Services Description Language) jest to oparty na XML język pozwalający na opis serwisów Web z uwzględnieniem sposobu dostępu do nich. System Enterprise Architect firmy Sparx Systems pozwala na łatwe utrzymanie modelu zgodnego z WSDL opisującego Web serwisy w repozytorium naszego projektu, który może być później szybko wygenerowany do pliku WSDL i przekazany programistom do implementacji serwisu. W tym i kolejnym wpisie postaram się zaprezentować jak stworzyć model Web serwisu i później na jego podstawie wygenerować plik WSDL, a także w jaki sposób zaimportować model z pliku WSDL jeżeli już posiadamy zdefiniowany serwis za pomocą takiego pliku. W naszym przypadku posłużymy się przykładem serwisu Web dla księgarni, który w odpowiedzi na zapytanie z kodem ISBN książki zwróci w odpowiedzi tytuł książki oraz listę autorów.
Tworzenie plików WSDL w Enterprise Architect
Jak już napisałem we wstępie Enterprise Architect pozwala na zarządzaniem definicją serwisu Web w repozytorium projektu. Definicja serwisu przechowywana jest w pakiecie ze stereotypem «WSDLnamespace». Najprostszym sposobem utworzenia takiego pakietu jest utworzenie diagramu (np. diagramu klas) w pakiecie, którym będziemy przechowywać definicję naszego serwisu, wskazać jako aktywny toolbox WSDL dla diagramu i z niego przeciągnąć na diagram element „Namespace”. W okienku dialogowym należy wskazać odpowiednio nazwę naszego serwisu oraz docelową przestrzeń nazw. Rysunek poniżej prezentuję definicję serwisu z naszego przykładu.
Po zatwierdzeniu tej operacji Enterprise Architect utworzy nam pakiet zawierający podstawową strukturę definicji serwisu Web w WSDL zawierającą pakiety, w którym możemy zdefiniować typy danych przekazywanych w komunikatach, komunikaty, porty oraz specyfikację powiązania formatu komunikatów i szczegółów komunikacji dla serwisu Web. Rysunki poniżej prezentują diagram klas oraz fragment widoku z drzewa projektu z elementami definicji naszego serwisu, który domyślnie tworzy Enterprise Architect.
Gdy mamy już zdefiniowaną ogólną strukturę definicji naszego Web serwisu możemy przejść do definicji jego poszczególnych elementów. Zaczniemy od definicji przesyłanych komunikatów. Nasz serwis będzie otrzymywał zapytanie zawierające kod ISBN książki, a w odpowiedzi otrzyma informacje o książce lub informacje o błędzie.
Aby utworzyć definicję komunikatu otwieramy diagram w pakiecie „Messages” i przeciągamy na niego element „Message” z toolbox. W oknie dialogowym prowadzamy nazwę komunikatu jak na rysunku poniżej.
W ten sposób utworzyliśmy komunikat, który wysyłany jest do naszego serwisu. Zgodnie z wcześniejszymi ustaleniami w komunikacie powinien zostać przesłany kod ISBN w postaci 13 cyfr. Aby dodać parametr do naszego komunikatu (message part) przeciągamy z toolbox element „Message Part” i upuszczamy go na elemencie modelującym komunikat. W otworzonym okienku dialogowym (rysunek poniżej) należy podać nazwę parametru i jego typ. W naszym przypadku nazwa to będzie „ISBN”, a typ „int” (dla uproszczenia na tym etapie pomijamy definiowanie typu z ograniczoną liczbą znaków).
Po utworzeniu komunikatu zapytania możemy przystąpić do tworzenie komunikatu z odpowiedzią jaka zostanie wysłana przez nasz serwis. W odpowiedzi będziemy przesyłać informacje o książce (jej tytuł oraz listę autorów). W tym celu musimy zdefiniować złożony typ danych. Definicję typu danych umieszczamy w pakiecie „«XSDschema» Types”. W tym celu na diagram „Types” w tym pakiecie przeciągamy element „Complex Type” (toolbox „XML Schema”) i nadajemy mu nazwę „InformacjaOKsiazce”, a jako „Model Group” pozostawiamy „sequence” (odpowiednik „xs:sequence” z XML Schema), tak jak na rysunku poniżej.
Następnie możemy rozpocząć definicję składowych naszego typu, czyli tytuł i listę aktorów. W tym celu przeciągamy na wyświetlony na diagramie element „InformacjaOKsiazce” pozycję „Element” z toolbox, a następnie nadajemy mu nazwę oraz określamy minimalną oraz maksymalną liczbą wystąpień na 1, tak jak na rysunku poniżej.
Analogicznie dodajemy element „Autor” przy czym w „MaxOccurs” wpisujemy „unbounded” co pozwoli dodać więcej niż jednego autora książki.
W ten sposób stworzyliśmy definicję typu jaki będzie zwracał nasz komunikat z odpowiedzią. W związku z tym możemy przystąpić do definicji tego komunikatu, o nazwie „PobierzInformacjeOKsiazceOdpowiedz”. Komunikat tworzymy analogicznie jak poprzednio z tą różnicą, że podczas definicji typu dla elementu „Message Part” nie wybieramy go z listy tylko klikamy przycisk „…” obok pola rozwijanego i wskazujemy na element „«XSDcomplexType» InformacjaOKsiazce”, tak jak na rysunku poniżej.
Analogicznie tworzymy komunikat, który będzie wysyłany w odpowiedzi na błąd podczas obsługi zapytania przez nasz serwis. W następny wpisie przedstawię w jaki sposób zdefiniować pozostały opis serwisu Web i jak na podstawie modelu stworzyć plik WSDL.