{"id":8043,"date":"2024-02-06T12:30:38","date_gmt":"2024-02-06T11:30:38","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=8043"},"modified":"2024-02-06T12:39:55","modified_gmt":"2024-02-06T11:39:55","slug":"interfejs-do-programowania-uslug-sieciowych","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/","title":{"rendered":"Interfejs do programowania us\u0142ug sieciowych"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Opis_zagadnienia\" >Opis zagadnienia<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Definicje_pojec\" >Definicje poj\u0119\u0107<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Opis\" >Opis<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Warunki_wstepne\" >Warunki wst\u0119pne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Rozwoj_programowalnej_uslugi_sieciowej\" >Rozw\u00f3j programowalnej us\u0142ugi sieciowej<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Projektowanie_interfejsu_uslug_sieciowych\" >Projektowanie interfejsu us\u0142ug sieciowych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Tworzenie_obiektow_deweloperskich_typu_Klasa_Java_i_Aplikacja\" >Tworzenie obiekt\u00f3w deweloperskich typu Klasa Java i Aplikacja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Identyfikator_URI_zadania\" >Identyfikator URI \u017c\u0105dania<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Identyfikator_URI_zadania_uslugi_sieciowej\" >Identyfikator URI \u017c\u0105dania us\u0142ugi sieciowej<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Ogolne_parametry_zapytania_identyfikatora_URI_zadania\" >Og\u00f3lne parametry zapytania identyfikatora URI \u017c\u0105dania<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Rozwoj_uslugi_SOAP\" >Rozw\u00f3j us\u0142ugi SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Przyklad_uslugi_SOAP\" >Przyk\u0142ad us\u0142ugi SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Wersja_SOAP\" >Wersja SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Stanowe_uslugi_SOAP\" >Stanowe us\u0142ugi SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Rozwoj_uslugi_REST\" >Rozw\u00f3j us\u0142ugi REST<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Przyklad_uslugi_REST\" >Przyk\u0142ad us\u0142ugi REST<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Pobieranie_pliku_WSDLWADL\" >Pobieranie pliku WSDL\/WADL<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Uwierzytelnienie_i_autoryzacja\" >Uwierzytelnienie i autoryzacja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Wsparcie_w_zakresie_redukowania_liczby_bledow_debugowania\" >Wsparcie w zakresie redukowania liczby b\u0142\u0119d\u00f3w (debugowania)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Przyklady_uslug_sieciowych_klientow\" >Przyk\u0142ady us\u0142ug sieciowych klient\u00f3w<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Przykladowy_klient_uslugi_SOAP\" >Przyk\u0142adowy klient us\u0142ugi SOAP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Przykladowy_klient_uslugi_REST\" >Przyk\u0142adowy klient us\u0142ugi REST<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-do-programowania-uslug-sieciowych\/#Testowanie_uslug_sieciowych_za_pomoca_narzedzia_Soap_UI\" >Testowanie us\u0142ug sieciowych za pomoc\u0105 narz\u0119dzia Soap UI<\/a><\/li><\/ul><\/nav><\/div>\n<h3 id=\"opis-zagadnienia\" ><span class=\"ez-toc-section\" id=\"Opis_zagadnienia\"><\/span>Opis zagadnienia<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dost\u0119pne s\u0105 ju\u017c cztery nieprogramowalne us\u0142ugi sieciowe, kt\u00f3re do zdalnych wywo\u0142a\u0144 wykorzystuj\u0105 protok\u00f3\u0142 SOAP. S\u0105 to eksport danych, import danych i zdalne wyszukiwanie jako wyspecjalizowane us\u0142ugi sieciowe. Ponadto ka\u017cda aplikacja dzia\u0142aj\u0105ca w tle mo\u017ce zosta\u0107 wywo\u0142ana jako bezstanowa us\u0142uga sieciowa poprzez <em>CallApplication<\/em>. Ten interfejs us\u0142ug sieciowych wykorzystuje og\u00f3lnie dost\u0119pn\u0105 bibliotek\u0119 us\u0142ug sieciowych <em>Apache Axis<\/em>.<\/p>\n<p>Dodatkowo dost\u0119pny jest jeszcze interfejs do programowalnych us\u0142ug sieciowych. Umo\u017cliwia on implementacj\u0119 w\u0142asnych us\u0142ug sieciowych jako us\u0142ugi SOAP lub REST, w zale\u017cno\u015bci od potrzeb. Ten interfejs us\u0142ug sieciowych wykorzystuje og\u00f3lnie dost\u0119pn\u0105 bibliotek\u0119 us\u0142ug sieciowych <em>Apache CXF<\/em>. Wi\u0119cej informacji na temat biblioteki CXF znajduj\u0105 si\u0119 na stronie: http:\/\/cxf.apache.org\/ (\u017ar\u00f3d\u0142o z 31\/01\/2011).<\/p>\n<p>Paczka instalacyjna zawiera przyk\u0142adowe us\u0142ugi SOAP i REST, a tak\u017ce przyk\u0142adowego klienta SOAP zaimplementowanego w j\u0119zyku Java.<\/p>\n<p>Niniejsza dokumentacja opisuje kroki wymagane do stworzenia indywidualnie zaprogramowanych us\u0142ug sieciowych, a tak\u017ce przyk\u0142adowych us\u0142ug sieciowych i klient\u00f3w. Pokr\u00f3tce wyja\u015bnia r\u00f3wnie\u017c narz\u0119dzie <em>Soap UI<\/em> do testowania us\u0142ug SOAP i REST.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Deweloperzy aplikacji<\/li>\n<li>Konsultanci techniczni<\/li>\n<\/ul>\n<h3 id=\"definicje-pojec\" ><span class=\"ez-toc-section\" id=\"Definicje_pojec\"><\/span>Definicje poj\u0119\u0107<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><em>Hipermedia<\/em> &#8211; tekstowe po\u0142\u0105czenie hipertekstu i danych multimedialnych. Hipermedia opiera si\u0119 na koncepcji link\u00f3w (hiper\u0142\u0105czy), kt\u00f3re s\u0105 przede wszystkim znane z HTML i umo\u017cliwiaj\u0105 u\u017cytkownikowi poruszanie si\u0119 po sieci lub dost\u0119p do osadzonych da-nych, takich jak dokumenty PDF.<\/p>\n<p><em>JAXB<\/em> &#8211; skr\u00f3t od Jakarta XML Binding. Interfejs Java, kt\u00f3ry opisuje, w jaki spos\u00f3b dane z instancji schematu XML s\u0105 automatycznie mapowane do klas Java i w jaki spos\u00f3b te klasy Java s\u0105 generowane ze schematu XML.<\/p>\n<p><em>JAX-RS<\/em> &#8211; skr\u00f3t od Jakarta RESTful Web Services. Specyfikacja interfejsu Java, kt\u00f3ra umo\u017cliwia i standaryzuje wykorzystanie w aplikacji stylu architektury REST w kontek\u015bcie us\u0142ug sieciowych.<\/p>\n<p><em>JAX-WS<\/em> &#8211; skr\u00f3t of Jakarta XML Web Services. Specyfikacja interfejsu Java do tworzenia us\u0142ug sieciowych.<br \/>\n<em>Reprezentacja<\/em> to dowolna u\u017cyteczna informacj\u0119 o stanie zasobu. Przedstawia ona zas\u00f3b w okre\u015blonym formacie. Reprezentacja zasobu mo\u017ce odnosi\u0107 si\u0119 do innych zasob\u00f3w. Mog\u0105 by\u0107 u\u017cywane nast\u0119puj\u0105ce reprezentacje: XML, HTML, CSV, formaty binarne, tekst bez zdefiniowanej struktury (text\/plain).<\/p>\n<p><em>\u017b\u0105danie &#8211; d<\/em>ane wej\u015bciowe lub interakcje u\u017cytkownika s\u0105 przesy\u0142ane do serwera przez komputer u\u017cytkownika, tzw. klient, za po\u015brednictwem sieci. Dane otrzymane przez serwer s\u0105 okre\u015blane jako \u017c\u0105danie. Po przetworzeniu danych serwer, w odpowiedzi do klienta, wysy\u0142a potwierdzenie lub nowe dane. Komunikacja mi\u0119-dzy klientem a serwerem zawsze sk\u0142ada si\u0119 z \u017c\u0105dania i odpowiedzi.<\/p>\n<p><em>Odpowied\u017a<\/em> &#8211; dane wej\u015bciowe lub interakcje u\u017cytkownika s\u0105 przesy\u0142ane do serwera przez komputer u\u017cytkownika, tzw. klient, za po\u015brednictwem sieci. Serwer przetwarza dane i przesy\u0142a do klienta odpowied\u017a w postaci potwierdzenia lub nowych da-nych. Komunikacja mi\u0119dzy klientem a serwerem zawsze sk\u0142ada si\u0119 z \u017c\u0105dania i odpowiedzi.<\/p>\n<p><em>REST<\/em> &#8211; skr\u00f3t od Representational State Transfer. Styl architektury do wymiany wiadomo\u015bci w rozproszonych hipermedialnych systemach informacyjnych opartych na HTTP. Nie ma on charakteru protoko\u0142u i nie jest obecnie standaryzowany. W przeciwie\u0144stwie do SOAP, nie jest wymagana znajomo\u015b\u0107 konwencji protoko\u0142\u00f3w, aby klient i serwer mogli si\u0119 komunikowa\u0107. Szczeg\u00f3lnie wa\u017cne s\u0105 nast\u0119puj\u0105ce podstawowe zasady:<\/p>\n<ul>\n<li>Adresowalno\u015b\u0107 zasob\u00f3w<\/li>\n<li>Wykorzystanie hipermedi\u00f3w opartych na HTML lub XML<\/li>\n<li>Zastosowanie standardowych operacji HTTP<\/li>\n<li>Bezstanowa komunikacja, kt\u00f3ra nie odwo\u0142uje si\u0119 do stanu serwera! REST zak\u0142ada, \u017ce stan ten jest utrzymywany przez klienta lub konwertowany przez serwer na status zasobu. Niepo\u017c\u0105dany jest natomiast przechowywany po stronie serwera przej\u015bciowy, specyficzny dla klienta stan wykraczaj\u0105cy poza okres trwania \u017c\u0105dania.<\/li>\n<\/ul>\n<p><em>Zgodny z REST protok\u00f3\u0142 HTTP &#8211; z<\/em>astosowanie operacji HTTP w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<ul>\n<li>GET: Pobieranie danych z serwera<\/li>\n<li>POST: Zapisywanie nowych danych na serwerze<\/li>\n<li>PUT: Aktualizowanie istniej\u0105cych danych<\/li>\n<li>DELETE: Usuwanie danych<\/li>\n<li>HEAD: Pobieranie metadanych zasobu<\/li>\n<li>OPTIONS: Sprawdzanie, kt\u00f3re operacje s\u0105 dost\u0119pne dla zasobu<\/li>\n<\/ul>\n<p><em>Us\u0142uga REST &#8211; u<\/em>s\u0142uga sieciowa wykorzystuj\u0105ca styl architektury REST.<\/p>\n<p><em>Zas\u00f3b (sieciowy) &#8211; t<\/em>ermin zas\u00f3b sieciowy (zwany r\u00f3wnie\u017c zasobem) u\u017cywany jest w odniesieniu do \u017ar\u00f3d\u0142a w dowolnym miejscu w sieci, kt\u00f3re mo\u017cna jednoznacznie zidentyfikowa\u0107 za pomoc\u0105 identyfikatora URI (patrz r\u00f3wnie\u017c standard RFC 3986). Przyk\u0142adowymi zasobami sieciowymi s\u0105: pliki, wykresy, us\u0142ugi internetowe i serwlety, a tak\u017ce kolekcje innych zasob\u00f3w, kt\u00f3re mog\u0105 by\u0107 adresowane za pomoc\u0105 identyfikator\u00f3w URI. Zas\u00f3b mo\u017ce posiada\u0107 kilka reprezentacji.<\/p>\n<p><em>SOAP\u00a0<\/em> &#8211; skr\u00f3t od Simple Object Access Protocol. Jest to oparty na XML protok\u00f3\u0142 do wymiany wiadomo\u015bci w systemach rozproszonych. S\u0142u\u017cy on do komunikacji mi\u0119dzy klientami us\u0142ug sieciowych a serwerami.<\/p>\n<p><em>Us\u0142uga SOAP &#8211; <\/em>us\u0142uga sieciowa wykorzystuj\u0105ca protok\u00f3\u0142 SOAP do zdalnych wywo\u0142a\u0144.<\/p>\n<p><em>WADL<\/em> &#8211; skr\u00f3t od Web Application Description Language. J\u0119zyk opisu us\u0142ug sieciowych zgodnych ze standardem REST.<\/p>\n<p><em>WSDL &#8211; <\/em>skr\u00f3t od Web Services Description Language. J\u0119zyk opisu interfejsu us\u0142ugi sieciowej.<\/p>\n<h3 id=\"opis\" ><span class=\"ez-toc-section\" id=\"Opis\"><\/span>Opis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Interfejs programowalnych us\u0142ug sieciowych umo\u017cliwia stworzenie w\u0142asnej us\u0142ugi sieciowej jako us\u0142ugi SOAP lub REST. Decyzja, czy u\u017cy\u0107 us\u0142ug\u0119 SOAP czy REST, zale\u017cy od konkretnych wymaga\u0144.<\/p>\n<h4 id=\"warunki-wstepne\" ><span class=\"ez-toc-section\" id=\"Warunki_wstepne\"><\/span>Warunki wst\u0119pne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>SAS, na kt\u00f3rym wykonywana jest programowalna us\u0142uga sieciowa, musi zosta\u0107 uruchomiony razem z serwerem sieciowym. Spowoduje to r\u00f3wnie\u017c uruchomienie serwera us\u0142ug sieciowych. Jest to standardowy scenariusz w systemie. Serwer us\u0142ug sieciowych nie mo\u017ce by\u0107 uruchamiany oddzielnie od serwera sieciowego.<\/p>\n<h4 id=\"rozwoj-programowalnej-uslugi-sieciowej\" ><span class=\"ez-toc-section\" id=\"Rozwoj_programowalnej_uslugi_sieciowej\"><\/span>Rozw\u00f3j programowalnej us\u0142ugi sieciowej<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Rozw\u00f3j programowalnej us\u0142ugi sieciowej sk\u0142ada si\u0119 z kilku etap\u00f3w: od utworzenia obiektu deweloperskiego Aplikacja do implementacji wewn\u0119trznej klasy Java, w kt\u00f3rej realizowane s\u0105 funkcje us\u0142ugi sieciowej.<\/p>\n<h5 id=\"projektowanie-interfejsu-uslug-sieciowych\" ><span class=\"ez-toc-section\" id=\"Projektowanie_interfejsu_uslug_sieciowych\"><\/span>Projektowanie interfejsu us\u0142ug sieciowych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Interfejs us\u0142ugi sieciowej, kt\u00f3ra ma zosta\u0107 zaprogramowana, musi by\u0107 zaprojektowany zgodnie z wymaganiami technicznymi i biznesowymi. Nale\u017cy zauwa\u017cy\u0107, \u017ce infrastruktura dost\u0119pna do realizacji us\u0142ugi sieciowej w systemie nie nadaje si\u0119 do przesy\u0142ania du\u017cych ilo\u015bci danych. Otrzymane lub wys\u0142ane dane musz\u0105 by\u0107 ca\u0142kowicie przetworzone w pami\u0119ci g\u0142\u00f3wnej serwera aplikacji. Mo\u017ce to stanowi\u0107 du\u017ce obci\u0105\u017cenie serwera i spowodowa\u0107 znaczne spadki wydajno\u015bci.<br \/>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Poniewa\u017c interfejs dla programowalnych us\u0142ug sieciowych realizowany jest za pomoc\u0105 Apache CXF, do cel\u00f3w debugowania mo\u017cna wykorzysta\u0107 informacje dost\u0119pne na nast\u0119puj\u0105cej stronie internetowej:<br \/>\nhttp:\/\/cxf.apache.org\/docs\/debugging-and-logging.html<\/div><\/section><\/p>\n<p>Je\u015bli komunikaty generowane s\u0105 w kolejce komunikat\u00f3w w czasie trwania \u017c\u0105dania klienta w ramach implementacji us\u0142ugi sieciowej, nie s\u0105 one automatycznie zwracane do klienta. Implementacja us\u0142ugi sieciowej ma za zadanie zwr\u00f3ci\u0107 te komunikaty do klienta w razie potrzeby.<\/p>\n<h5 id=\"tworzenie-obiektow-deweloperskich-typu-klasa-java-i-aplikacja\" ><span class=\"ez-toc-section\" id=\"Tworzenie_obiektow_deweloperskich_typu_Klasa_Java_i_Aplikacja\"><\/span>Tworzenie obiekt\u00f3w deweloperskich typu Klasa Java i Aplikacja<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Utw\u00f3rz obiekt deweloperski typu Klasa Java i Aplikacja. Zalecane jest nazwanie klasy Java i aplikacji identycznie oraz u\u017cycie przyrostka service.<br \/>\nPrzestrze\u0144 nazw (namespace) powinna zaczyna\u0107 si\u0119 jak odpowiadaj\u0105ce mu przestrze\u0144 nazw .log i ko\u0144czy\u0107 si\u0119 na .soap lub .rest zamiast .log.<br \/>\nKlasa Java musi wywodzi\u0107 si\u0119 z klasy abstrakcyjnej CisWebServiceApplication. Ta nadrz\u0119dna klasa definiuje metod\u0119 init(). Dalsza implementacja zale\u017cy od tego, czy tworzona jest us\u0142uga SOAP czy REST.<br \/>\nNast\u0119pnie nale\u017cy utworzy\u0107 obiekt deweloperski <em>Aplikacja<\/em>. Us\u0142ug\u0119 sieciow\u0105 identyfikuje w pe\u0142ni kwalifikowana nazwa aplikacji.<br \/>\nAplikacja musi by\u0107 typu Us\u0142uga RPC. Jako specjalne zastosowanie nale\u017cy wybra\u0107 Us\u0142uga SOAP lub Us\u0142uga REST.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli klasa Java, w kt\u00f3rej zdefiniowana i zaimplementowana jest us\u0142uga SOAP, przypisana jest do aplikacji z wybranym specjalnym zastosowaniem Us\u0142uga REST lub odwrotnie, zostanie to wykryte tylko wtedy, gdy us\u0142uga zostanie wywo\u0142ywana i wygenerowany zostanie komunikat b\u0142\u0119du.<\/div><\/section>\n<h5 id=\"identyfikator-uri-zadania\" ><span class=\"ez-toc-section\" id=\"Identyfikator_URI_zadania\"><\/span>Identyfikator URI \u017c\u0105dania<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<h6 id=\"identyfikator-uri-zadania-uslugi-sieciowej\" ><span class=\"ez-toc-section\" id=\"Identyfikator_URI_zadania_uslugi_sieciowej\"><\/span>Identyfikator URI \u017c\u0105dania us\u0142ugi sieciowej<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Aby wywo\u0142a\u0107 us\u0142ugi sieciowe, nale\u017cy wywo\u0142a\u0107 oddzielny identyfikator URI specyficzny dla danej us\u0142ugi sieciowej. Identyfikator URI ma nast\u0119puj\u0105c\u0105 struktur\u0119:<\/p>\n<ul>\n<li>Dla us\u0142ugi SOAP<br \/>\nhttps:\/\/&lt;base url&gt;\/services\/soap\/&lt;w pe\u0142ni kwalifikowana nazwa aplikacji&gt;?oltp=&lt;nazwa bazy danych&gt;<br \/>\nElement services\/soap URI \u017c\u0105dania sygnalizuje serwerowi us\u0142ug sieciowych, \u017ce jest to us\u0142uga SOAP.<\/li>\n<li>Dla us\u0142ugi REST<br \/>\nhttps:\/\/&lt;base url&gt;\/services\/rest\/&lt;w pe\u0142ni kwalifikowana nazwa aplikacji&gt;\/&lt;zas\u00f3b&gt;\/&lt;mo\u017cliwe parametry&gt;\/?oltp=&lt;nazwa bazy danych&gt;<br \/>\nElement services\/rest identyfikatora URI \u017c\u0105dania sygnalizuje serwerowi us\u0142ug sieciowych, \u017ce jest to us\u0142uga REST. Element &lt;zas\u00f3b&gt; uruchamia \u017c\u0105dan\u0105 funkcjonalno\u015b\u0107, kt\u00f3ra wywo\u0142ywana jest z wymaganymi parametrami.<\/li>\n<\/ul>\n<h6 id=\"ogolne-parametry-zapytania-identyfikatora-uri-zadania\" ><span class=\"ez-toc-section\" id=\"Ogolne_parametry_zapytania_identyfikatora_URI_zadania\"><\/span>Og\u00f3lne parametry zapytania identyfikatora URI \u017c\u0105dania<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Mo\u017cna u\u017cy\u0107 nast\u0119puj\u0105ce og\u00f3lne parametry zapytania:<\/p>\n<table style=\"border-style: outset; width: 68.5037%; border-color: #000000; background-color: #ffffff; height: 304px;\" width=\"540\">\n<thead>\n<tr style=\"height: 26px;\">\n<td style=\"width: 100px; height: 26px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\"><strong>Parametr zapytania<\/strong><\/td>\n<td style=\"width: 100px; height: 26px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 47px;\">\n<td style=\"width: 100px; height: 47px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">displayLanguage<\/td>\n<td style=\"width: 100px; height: 47px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">Okre\u015bla \u017c\u0105dany j\u0119zyk wy\u015bwietlania.<\/td>\n<\/tr>\n<tr style=\"height: 30px;\">\n<td style=\"width: 100px; height: 30px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">contentLanguage<\/td>\n<td style=\"width: 100px; height: 30px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">Okre\u015bla \u017c\u0105dany j\u0119zyk zawarto\u015bci.<\/td>\n<\/tr>\n<tr style=\"height: 29px;\">\n<td style=\"width: 100px; height: 29px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">oltp<\/td>\n<td style=\"width: 100px; height: 29px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">Nazwa baza danych OLTP.<\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 100px; height: 28px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">context<\/td>\n<td style=\"width: 100px; height: 28px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">Kod wymaganej organizacji.<\/td>\n<\/tr>\n<tr style=\"height: 72px;\">\n<td style=\"width: 100px; height: 72px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">wsdl<\/td>\n<td style=\"width: 100px; height: 72px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">Sygnalizuje serwerowi us\u0142ug sieciowych, aby dostarczy\u0142 plik WSDL dla us\u0142ugi SOAP. <em>Wsdl<\/em> musi by\u0107 okre\u015blony jako pierwszy parametr zapytania.<\/td>\n<\/tr>\n<tr style=\"height: 72px;\">\n<td style=\"width: 100px; height: 72px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">_wadl<\/td>\n<td style=\"width: 100px; height: 72px; border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\">Sygnalizuje serwerowi us\u0142ug sieciowych, aby dostarczy\u0142 plik WADL dla us\u0142ugi REST.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>W przypadku u\u017cycia kilku parametr\u00f3w zapytania nale\u017cy je oddzieli\u0107 znakiem <em>&amp;<\/em> lub \u015brednikiem (;).<\/p>\n<h5 id=\"rozwoj-uslugi-soap\" ><span class=\"ez-toc-section\" id=\"Rozwoj_uslugi_SOAP\"><\/span>Rozw\u00f3j us\u0142ugi SOAP<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Stworzona klasa Java musi zawiera\u0107 klas\u0119 wewn\u0119trzn\u0105 oznaczon\u0105 za pomoc\u0105 JAX-WS:<br \/>\n@WebService<br \/>\nOznaczenie to nie wymaga \u017cadnej warto\u015bci. Klasa wewn\u0119trzna s\u0142u\u017cy do definiowania i implementacji us\u0142ugi SOAP. Nazwa klasy wewn\u0119trznej definiuje nazw\u0119 us\u0142ugi w pliku WSDL. Zalecane jest, aby klasa wewn\u0119trzna nie ko\u0144czy\u0142a si\u0119 na service.<br \/>\nWszystkie metody publiczne zaimplementowane w tej klasie wewn\u0119trznej s\u0105 dost\u0119pne dla klienta SOAP jako funkcjonalne komponenty us\u0142ugi SOAP.<br \/>\nWi\u0119cej informacji na temat JAX-WS, w szczeg\u00f3lno\u015bci na temat korzystania z oznaczenia znajduje si\u0119 na stronie http:\/\/cxf.apache.org\/docs\/developing-a-service.html.<\/p>\n<h5 id=\"przyklad-uslugi-soap\" ><span class=\"ez-toc-section\" id=\"Przyklad_uslugi_SOAP\"><\/span>Przyk\u0142ad us\u0142ugi SOAP<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\"><\/p>\n<p>Paczka instalacyjna zawiera nast\u0119puj\u0105c\u0105 aplikacj\u0119 oraz klas\u0119 Java o takiej samej nazwie:<br \/>\ncom.cisag.app.system.webservices.service.soap.SOAPExampleService<\/p>\n<p>Metoda init() zawiera inicjalizacj\u0119 wewn\u0119trznego obiektu i mened\u017cera transakcji. Klasa wewn\u0119trzna SOAPExample zawiera definicj\u0119 i implementacj\u0119 us\u0142ugi SOAP. Klasa ta oznaczona jest za pomoc\u0105 @WebService.<\/p>\n<p>Poni\u017csza metoda umo\u017cliwia konkatenacj\u0119 s\u0142owa powitalnego Hello z parametrem name i jego zwr\u00f3cenie:<br \/>\nstring sayHello(string name)<\/p>\n<p>Poni\u017cszej metody mo\u017cna u\u017cy\u0107 do sprawdzenia, czy istnieje zlecenie sprzeda\u017cy o zdefiniowanym rodzaju i numerze.<br \/>\nboolean existSalesOrder(string type, string number)<\/p>\n<p>Poni\u017csza metoda zwraca obiekt bean SalesOrderResult na podstawie zdefiniowanego typu i numeru. Zawiera ona informacje o statusie zam\u00f3wienia sprzeda\u017cy i nazwisko odpowiedzialnego pracownika. Nale\u017cy pami\u0119ta\u0107, \u017ce obiekt bean musi zosta\u0107 zaprogramowany jako statyczna klasa Java.<br \/>\npublic SalesOrderResult getSalesOrderByBusinessKey(string type, string number)<\/p>\n<p><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Za pomoc\u0105 oznaczenia @WebParam(&lt;\u201dnazwa parametru\u201d&gt;) mo\u017cna bardziej szczeg\u00f3\u0142owo opisa\u0107 parametry wej\u015bciowe metod. Plik WSDL i wygenerowane klasy nie zawieraj\u0105 w\u00f3wczas nazw takich jak argX, ale okre\u015blone nazwy parametr\u00f3w.<\/div><\/section><\/p>\n<h5 id=\"wersja-soap\" ><span class=\"ez-toc-section\" id=\"Wersja_SOAP\"><\/span>Wersja SOAP<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p><\/div><\/section>\n<p>Programowalne us\u0142ugi SOAP u\u017cywaj\u0105 domy\u015blnie wersji SOAP 1.2 w pliku WSDL. Odpowiedzi SOAP wysy\u0142ane s\u0105 w wersji SOAP, kt\u00f3rej klient u\u017cy\u0142 do \u017c\u0105dania SOAP (SOAP 1.1 lub SOAP 1.2).<br \/>\nW us\u0142udze SOAP mo\u017cna okre\u015bli\u0107, \u017ce us\u0142uga powinna obs\u0142ugiwa\u0107 tylko wersj\u0119 1.1 SOAP. W takim przypadku, w pliku WSDL zostanie u\u017cyty SOAP 1.1. Dodatkowo nale\u017cy okre\u015bli\u0107 nast\u0119puj\u0105ce oznaczenie dla klasy wewn\u0119trznej:<br \/>\n@javax.xml.ws.BindingType(value = ja-vax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING)<br \/>\nNale\u017cy zauwa\u017cy\u0107, \u017ce nieprogramowalne us\u0142ugi sieciowe, kt\u00f3re zosta\u0142y opisane w artykule Interfejs us\u0142ug sieciowych u\u017cywaj\u0105 SOAP 1.1.<\/p>\n<h5 id=\"stanowe-uslugi-soap\" ><span class=\"ez-toc-section\" id=\"Stanowe_uslugi_SOAP\"><\/span>Stanowe us\u0142ugi SOAP<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Us\u0142ugi SOAP mog\u0105 by\u0107 r\u00f3wnie\u017c wywo\u0142ywane jako us\u0142ugi stanowe. Dla ka\u017cdej us\u0142ugi, kt\u00f3ra jest wywo\u0142ywana w sesji, tworzona jest instancja aplikacji z powi\u0105zanym obiektem us\u0142ugi. Kolejne wywo\u0142ania tej samej us\u0142ugi w ramach tej samej sesji s\u0105 wywo\u0142ywane na ju\u017c utworzonym obiekcie us\u0142ugi.<br \/>\nUs\u0142uga mo\u017ce zatem zapisywa\u0107 stan mi\u0119dzy r\u00f3\u017cnymi wywo\u0142aniami za pomoc\u0105 atrybut\u00f3w w instancji aplikacji lub obiektu us\u0142ugi.<br \/>\nNale\u017cy pami\u0119ta\u0107, \u017ce sesje s\u0105 ko\u0144czone automatycznie, je\u015bli nie s\u0105 u\u017cywane po up\u0142ywie czasu oczekiwania. Aby sesja pozosta\u0142a otwarta, musi zosta\u0107 wykonane co najmniej jedno wywo\u0142anie dowolnej us\u0142ugi sieciowej dla tej samej sesji w czasie oczekiwania. W tym celu, system udost\u0119pnia bezparametrow\u0105 metod\u0119 ping dla us\u0142ug SOAP:<br \/>\ncom.cisag.sys.tools.webservices.log.Session<\/p>\n<h5 id=\"rozwoj-uslugi-rest\" ><span class=\"ez-toc-section\" id=\"Rozwoj_uslugi_REST\"><\/span>Rozw\u00f3j us\u0142ugi REST<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Stworzona klasa Java musi zawiera\u0107 klas\u0119 wewn\u0119trzn\u0105 oznaczon\u0105 za pomoc\u0105 JAX-RS:<br \/>\n@Path(\u201cw pe\u0142ni kwalifikowana nazwa aplikacji REST\u201d)<br \/>\nOznaczenie to wymaga jako warto\u015bci w pe\u0142ni kwalifikowanej nazwy utworzonej aplikacji, dla kt\u00f3rej okre\u015blono<em> Us\u0142uga REST<\/em> jako typ oraz <em>Us\u0142uga REST<\/em> jako specjalne zastosowanie. Nazwa ta reprezentuje zas\u00f3b g\u0142\u00f3wny, kt\u00f3ry jest wymaganym sk\u0142adnikiem identyfikatora URI \u017c\u0105dania us\u0142ugi REST. Ponadto klasa wewn\u0119trzna musi posiada\u0107 publiczny konstruktor.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli oznaczenie nie zawiera nazwy aplikacji, wywo\u0142anie us\u0142ugi nie jest mo\u017cliwe.<\/div><\/section>\n<p>Funkcjonalno\u015bci us\u0142ugi REST dost\u0119pne dla klienta REST s\u0105 reprezentowane przez metody publiczne (metody resource), kt\u00f3re s\u0105 wyr\u00f3\u017cnione oznaczeniami JAX-RS:<\/p>\n<ul>\n<li>Request method designator (@GET or @PUT or @POST or @DELETE)<\/li>\n<li>@Path (\u201cnazwa zasobu oraz wszelkie inne parametery\u201d)<br \/>\nWarto\u015bci przypisane do oznaczenia @Path stanowi\u0105 dalsze sk\u0142adniki identyfikatora URI \u017c\u0105dania, kt\u00f3re s\u0105 wzgl\u0119dne w stosunku do g\u0142\u00f3wnego zasobu. Warto\u015bci mog\u0105 zawiera\u0107 symbole zast\u0119pcze w nawiasach klamrowych.<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Nazwy symboli zast\u0119pczych reprezentuj\u0105cych parametry identyfikatora URI \u017c\u0105dania musz\u0105, zgodnie z konwencj\u0105, zaczyna\u0107 si\u0119 wielk\u0105 liter\u0105.<\/div><\/section>\n<p>Podczas programowania metod Resource nale\u017cy zwr\u00f3ci\u0107 uwag\u0119 na nast\u0119puj\u0105ce kwestie w odniesieniu do operacji HTTP:<\/p>\n<ul>\n<li>GET wysy\u0142a zapytanie o reprezentacj\u0119 zasobu. \u017b\u0105dania nie powinny zawiera\u0107 efekt\u00f3w ubocznych.<\/li>\n<li>POST s\u0142u\u017cy do dodania czego\u015b do zasobu. POST zawiera efekty uboczne.<\/li>\n<li>PUT za pomoc\u0105 PUT mo\u017cna tworzy\u0107 nowe zasoby lub zast\u0119powa\u0107 zawarto\u015b\u0107 istniej\u0105cych zasob\u00f3w.<\/li>\n<li>DELETE s\u0142u\u017cy do usuwania zasob\u00f3w.<\/li>\n<\/ul>\n<p>Nale\u017cy r\u00f3wnie\u017c zwr\u00f3ci\u0107 uwag\u0119 na nast\u0119puj\u0105cy opis JAX-RS:<br \/>\nJava\u2122 API for RESTful Web Services<br \/>\nhttp:\/\/jsr311.java.net\/nonav\/releases\/1.1\/spec\/spec.html<\/p>\n<p>Wi\u0119cej przydatnych informacji na temat oznacze\u0144, kt\u00f3re mog\u0105 by\u0107 u\u017cywane w realizacji us\u0142ugi REST mo\u017cna znale\u017a\u0107 na stronie http:\/\/cxf.apache.org\/docs\/jax-rs-basics.html2. Niekt\u00f3re z oznacze\u0144 zosta\u0142y wyja\u015bnione w przyk\u0142adzie w niniejszym artykule.<br \/>\nW komentarzach do metod resource mo\u017cna znale\u017a\u0107 informacje jak wywo\u0142a\u0107 funkcjonalno\u015b\u0107 us\u0142ugi REST. Wszystkie funkcjonalno\u015bci oznaczone operacj\u0105 HTTP GET mo\u017cna wywo\u0142a\u0107 bezpo\u015brednio w przegl\u0105darce Internet Explorer. Narz\u0119dzie <em>Soap UI<\/em> mo\u017ce by\u0107 u\u017cywane do innych operacji HTTP.<\/p>\n<h5 id=\"przyklad-uslugi-rest\" ><span class=\"ez-toc-section\" id=\"Przyklad_uslugi_REST\"><\/span>Przyk\u0142ad us\u0142ugi REST<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Paczka instalacyjna zawiera nast\u0119puj\u0105c\u0105 aplikacj\u0119 oraz klas\u0119 Java o takiej samej nazwie:<br \/>\ncom.cisag.app.system.webservices.service.rest.RESTExampleService<\/p>\n<p>Metoda init() zawiera inicjalizacj\u0119 obiektu i mened\u017cera transakcji. Klasa wewn\u0119trzna RESTExample zawiera definicj\u0119 i implementacj\u0119 us\u0142ugi REST. Klasa ta oznaczona jest za pomoc\u0105:<br \/>\n@Path(\u201ccom.cisag.app.system.webservices.service.rest.RESTExampleService\u201d)<br \/>\nPoni\u017csza metoda resource umo\u017cliwia konkatenacj\u0119 s\u0142owa powitalnego Hello z parametrem name i zwr\u00f3cenie go domy\u015blnie jako plain\/text:<br \/>\n@GET<br \/>\n@Path(\u201csayHello\/{name}\u201d)<br \/>\npublic string sayHello(@PathParam(\u201cname\u201d) string name)<br \/>\nOznaczenie @GET wskazuje, \u017ce do \u017c\u0105dania nale\u017cy u\u017cy\u0107 metody HTTP GET. Ozna-czenie @Path zawiera warto\u015b\u0107 &#8222;sayhello\/{name}&#8221;, gdzie &#8222;sayhello&#8221; jest identyfikatorem funkcjonalno\u015bci, a {name} to wymagany symbol zast\u0119pczy, kt\u00f3ry jest powi\u0105zany z parametrem \u201cname\u201d metody resource poprzez dodatkowe oznaczenie @PathParam(\u201cname\u201d).<br \/>\nPoni\u017cszej metody resource mo\u017cna u\u017cy\u0107 do sprawdzenia, czy istnieje zam\u00f3wie-nie sprzeda\u017cy o zdefiniowanym typie i numerze.<br \/>\n@GET<br \/>\n@Path(\u201csalesOrderAvailable\/{type}\/{number}\u201d)<br \/>\npublic string existSalesOrder(@PathParam(\u201ctype\u201d) string type, @PathParam(\u201cnumber\u201d) string number)<br \/>\nPoni\u017csza metoda resource zwraca obiekt bean SalesOrderBean na podstawie zdefiniowanego typu i numeru. Zawiera on informacje o typie, numerze i statu-sie zam\u00f3wienia sprzeda\u017cy oraz nazwisko odpowiedzialnego pracownika.<br \/>\n@GET<br \/>\n@Path(\u201cgetSalesOrder\/{type}\/{number}\u201d)<br \/>\n@Produces(MediaType.APPLICATION_XML)<br \/>\npublic SalesOrderBean getSalesOrderByBusinessKey(@PathParam(\u201ctype\u201d) string type, @PathParam(\u201cnumber\u201d) string number)<\/p>\n<p>Oznaczenie @Produces opisuje reprezentacj\u0119 w postaci XML. Nale\u017cy pami\u0119ta\u0107, \u017ce obiekt bean obs\u0142uguj\u0105cy JAXB jest oznaczany za pomoc\u0105 @XmlRootElement(name = \u201cSalesOrderBean\u201d).<\/p>\n<p>Poni\u017csza metoda resource tworzy w pami\u0119ci g\u0142\u00f3wnej now\u0105 instancj\u0119 obiektu bean SalesOrderBean o okre\u015blonym typie, numerze i statusie, i zwraca repre-zentacj\u0119 jako HTML.<br \/>\n@POST<br \/>\n@Path(\u201cnewSalesOrderBean\/{type}\/{number}\/{orderStatus}\u201d)<br \/>\n@Produces(MediaType.TEXT_HTML)<br \/>\npublic SalesOrderBean newSalesOrder(@PathParam(\u201ctype\u201d) string type, @PathParam(\u201cnumber\u201d) string number, @PathParam(\u201cOrderStatus\u201d) short orderStatus)<br \/>\nInstancja nie jest zapami\u0119tywana. W przeciwie\u0144stwie do innych metod resour-ce, ta metoda jest oznaczona za pomoc\u0105 @POST.<br \/>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Opr\u00f3cz oznaczenia @PathParam dost\u0119pne jest r\u00f3wnie\u017c oznaczenie @QueryParam, kt\u00f3re s\u0142u\u017cy do uzyskiwania dost\u0119pu do parametr\u00f3w identyfikatora URI \u017c\u0105dania. W ten spos\u00f3b us\u0142uga mo\u017ce zdefiniowa\u0107 w\u0142asne parametry zapytania, kt\u00f3re klient mo\u017ce przes\u0142a\u0107 jako ci\u0105g zapytania. Jako pierwszego znaku nazwy parametru zapytania nale\u017cy u\u017cy\u0107 wielkiej litery. Nazwy parametr\u00f3w zapyta\u0144 rozpoczynaj\u0105-ce si\u0119 ma\u0142ymi literami s\u0105 zarezerwowane dla silnika systemu.<\/div><\/section><\/div><\/section>\n<h4 id=\"pobieranie-pliku-wsdl-wadl\" ><span class=\"ez-toc-section\" id=\"Pobieranie_pliku_WSDLWADL\"><\/span>Pobieranie pliku WSDL\/WADL<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Plik WSDL lub WADL jest wymagany do stworzenia klienta us\u0142ug internetowych. Struktura odpowiedniego identyfikatora URI \u017c\u0105dania jest nast\u0119puj\u0105ca:<\/p>\n<ul>\n<li>Dla us\u0142ugi SOAP<br \/>\nhttps:\/\/&lt;base uri&gt;\/services\/soap\/&lt;w pe\u0142ni kwalifikowana nazwa aplikacji&gt;?wsdl<br \/>\nSk\u0142adnik identyfikatora URI \u017c\u0105dania \u201ewsdl\u201d sygnalizuje serwerowi us\u0142ug internetowych, \u017ce plik WSDL musi zosta\u0107 przygotowany i udost\u0119pniony. Po wpisaniu identyfikatora URI \u017c\u0105dania w pasku adresu przegl\u0105darki\u00a0 pojawi si\u0119 okno dialogowe uwierzytelniania. Po pomy\u015blnym uwierzytelnieniu wy\u015bwietlony zostanie plik WSDL. Mo\u017cna go zapisa\u0107 za pomoc\u0105 opcji Zapisz jako przegl\u0105darki Internet Explorer.<\/li>\n<li>Dla us\u0142ugi REST<br \/>\nhttps:\/\/&lt;base uri&gt;\/services\/soap\/&lt;w pe\u0142ni kwalifikowana nazwa aplikacji&gt;?_wadl<br \/>\nSk\u0142adnik identyfikatora URI \u017c\u0105dania \u201ewadl\u201d sygnalizuje serwerowi us\u0142ug internetowych, \u017ce plik WADL musi zosta\u0107 przygotowany i udost\u0119pniony. Po wpisaniu identyfikatora URI \u017c\u0105dania w pasku adresu przegl\u0105darki\u00a0 pojawi si\u0119 okno dialogowe uwierzytelniania. Po pomy\u015blnym uwierzytelnieniu pojawi si\u0119 okno dialogowe pobierania pliku, umo\u017cliwiaj\u0105ce zapisanie pliku WADL. Nale\u017cy pami\u0119ta\u0107, \u017ce plik WADL mo\u017ce by\u0107 niekompletny, na przyk\u0142ad mo\u017ce brakowa\u0107 parametr\u00f3w. Zale\u017cy to od programowania danej us\u0142ugi REST.<\/li>\n<\/ul>\n<h4 id=\"uwierzytelnienie-i-autoryzacja\" ><span class=\"ez-toc-section\" id=\"Uwierzytelnienie_i_autoryzacja\"><\/span>Uwierzytelnienie i autoryzacja<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aby m\u00f3c wywo\u0142a\u0107 us\u0142ug\u0119 sieciow\u0105, klient musi uwierzytelni\u0107 si\u0119 na serwerze sieciowym. Uwierzytelnianie odbywa si\u0119 za pomoc\u0105 uwierzytelniania skr\u00f3tu lub certyfikatu klienta. W opisie przyk\u0142adowego klienta w rozdziale: <em><a href=\"#przyk\">Przyk\u0142adowy klient us\u0142ugi SOAP<\/a><\/em>. Uwierzytelnienie odbywa si\u0119 za pomoc\u0105 certyfikatu klienta.<br \/>\nProgramowalne us\u0142ugi sieciowe s\u0105 aplikacjami. Dlatego u\u017cytkownik musi posiada\u0107 uprawnienia do otwarcia aplikacji, aby m\u00f3c wywo\u0142a\u0107 us\u0142ug\u0119 sieciow\u0105.<\/p>\n<h4 id=\"wsparcie-w-zakresie-redukowania-liczby-bledow-debugowania\" ><span class=\"ez-toc-section\" id=\"Wsparcie_w_zakresie_redukowania_liczby_bledow_debugowania\"><\/span>Wsparcie w zakresie redukowania liczby b\u0142\u0119d\u00f3w (debugowania)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Serwer us\u0142ug sieciowych systemu ERP umo\u017cliwia wy\u015bwietlanie informacji o \u017c\u0105daniach od klient\u00f3w. Dotyczy to zar\u00f3wno nieprogramowalnych i programowalnych us\u0142ug sieciowych.<br \/>\nAby to zrobi\u0107 nale\u017cy aktywowa\u0107 debugowanie klasy Java com.cisag.sys.kernel.webservices.CisWebServicesResource w SAS, kt\u00f3ra jest wywo\u0142ywana przez klient\u00f3w.<br \/>\nW zale\u017cno\u015bci od poziomu debugowania, w pow\u0142oce narz\u0119dzia wy\u015bwietlane s\u0105 nast\u0119puj\u0105ce informacje:<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"142\"><strong>Poziom debugowania<\/strong><\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"397\"><strong>Dane wyj\u015bciowe<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"142\">INFO<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"397\">Przy ka\u017cdym wywo\u0142aniu us\u0142ugi sieciowej informacje wy\u015bwietlane s\u0105 na pocz\u0105tku i na ko\u0144cu przetwarzania w SAS.<\/p>\n<p>Dane wyj\u015bciowe zawieraj\u0105: numer sesji, metod\u0119 HTTP, identyfikator URI \u017c\u0105dania, czas przetwarzania.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"142\">FINEST<\/td>\n<td style=\"border-style: outset; border-color: #000000; background-color: #ffffff; text-align: left; vertical-align: top;\" width=\"397\">Opr\u00f3cz danych wyj\u015bciowych poziomu debugowania INFO, poziom FINEST dostarcza zawarto\u015b\u0107 (tre\u015b\u0107 HTTP) \u017c\u0105dania klienta i odpowied\u017a us\u0142ugi sieciowej.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Wy\u015bwietlanie danych wyj\u015bciowych mo\u017cna w\u0142\u0105czy\u0107 i wy\u0142\u0105czy\u0107 dla uruchomionego SAS za pomoc\u0105 polecenia toolshell dbgcls (debug class).<\/p>\n<h4 id=\"przyklady-uslug-sieciowych-klientow\" ><span class=\"ez-toc-section\" id=\"Przyklady_uslug_sieciowych_klientow\"><\/span>Przyk\u0142ady us\u0142ug sieciowych klient\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<h5 id=\"przykladowy-klient-uslugi-soap\" ><span class=\"ez-toc-section\" id=\"Przykladowy_klient_uslugi_SOAP\"><\/span><a id=\"przyk\"><\/a>Przyk\u0142adowy klient us\u0142ugi SOAP<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Paczka instalacyjna zawiera nast\u0119puj\u0105cy przyk\u0142ad klienta us\u0142ugi SOAP. Klient sprawdza czy istnieje zam\u00f3wienie sprzeda\u017cy.<\/p>\n<p>Poni\u017csza klasa zawiera aktualn\u0105 implementacj\u0119 klienta:<br \/>\ncom.cisag.app.system.webservices.service.soap.client.SOAPExampleClient<br \/>\nDodatkowo, do programowania klienta potrzebne s\u0105 nast\u0119puj\u0105ce klasy:<\/p>\n<ul>\n<li>com.cisag.app.system.webservices.service.soap.client.ExistSalesOrder<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.ExistSalesOrderResponse<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.GetSalesOrderByBusinessKey<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.GetSalesOrderByBusinessKeyResponse<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.ObjectFactory<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.SalesOrderResult<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.SayHello<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.SayHelloResponse<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.SOAPExample<\/li>\n<li>com.cisag.app.system.webservices.service.soap.client.SOAPExampleService<\/li>\n<\/ul>\n<p>Klasy te tworzone s\u0105 z pliku WSDL za pomoc\u0105 narz\u0119dzia wsimport. Narz\u0119dzie wsimport jest cz\u0119\u015bci\u0105 JDK od wersji Java 6.<br \/>\nPlik WSDL tworzony jest za pomoc\u0105 \u017c\u0105dania:<br \/>\nhttps:\/\/&lt;base uri&gt;\/services\/soap\/com.cisag.app.system.webservices.service.soap.SOAPExampleService?wsdl<\/p>\n<p>Zamiast symbolu zast\u0119pczego &lt;base uri&gt; podawany jest rzeczywisty adres.<\/p>\n<p>Narz\u0119dzie wsimport jest nast\u0119pnie wywo\u0142ywane w nast\u0119puj\u0105cy spos\u00f3b poni\u017cej &lt;Katalog JDK&gt;\/bin:<br \/>\nwsimport -p com.cisag.app.system.webservices.service.soap.client -d &lt;\u015bcie\u017cka dla plik\u00f3w .class&gt; -s &lt;\u015bcie\u017cka dla plik\u00f3w \u017ar\u00f3d\u0142owych&gt; &lt;\u015bcie\u017cka z nazw\u0105 pliku WSDL&gt; -Xnocompile -extension<br \/>\nZamiast symbolu zast\u0119pczego \u201epath\u201d podawane s\u0105 rzeczywiste \u015bcie\u017cki.<\/p>\n<p>Po utworzeniu, poni\u017csza klasa zawiera \u015bcie\u017ck\u0119 do pliku WSDL:<br \/>\ncom.cisag.app.system.webservices.service.soap.client.SOAPExampleService<br \/>\n\u015acie\u017cka ta jest zast\u0119powana nast\u0119puj\u0105cym identyfikatorem URI:<br \/>\n&lt;base uri&gt;\/services\/soap\/com.cisag.app.system.webservices.service.soap.SOAPExampleService?wsdl&amp;oltp=&lt;oltpname&gt;<br \/>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Symbole zast\u0119pcze &lt;base uri&gt; i &lt;oltpname&gt; nale\u017cy zast\u0105pi\u0107 konkretnymi warto\u015bciami bazowego identyfikatora URI oraz nazw\u0105 bazy danych OLTP.<\/div><\/section><br \/>\nPoni\u017csza klasa zawiera metod\u0119 main, w kt\u00f3rej odbywa si\u0119 sprawdzanie parame-tr\u00f3w:<br \/>\ncom.cisag.app.system.webservices.service.soap.client.SOAPExampleClient<br \/>\nW ramach tej metody wykonywane jest:<\/p>\n<ul>\n<li>Utworzenie instancji SOAPExampleService<\/li>\n<li>Utworzenie obiektu us\u0142ugi<\/li>\n<li>Uwierzytelnienie<\/li>\n<li>Wywo\u0142anie metody us\u0142ugi SOAP existSalesOrder(salesOrderType, sale-sNumber)<\/li>\n<\/ul>\n<p>Poza systemem klient musi zosta\u0107 wywo\u0142any w nast\u0119puj\u0105cy spos\u00f3b:<br \/>\ncom.cisag.app.system.webservices.service.soap.client.SOAPExampleClient SOAPServiceAddress userCertificateFileName userCertificateFi-lePassword serverCertificateFileName salesOrderType salesNumber<br \/>\nZamiast SOAPServiceAddress nale\u017cy wpisa\u0107 pe\u0142ny adres us\u0142ugi SOAP zawieraj\u0105-cy nazw\u0119 bazy danych OLTP, np.: https:\/\/qas.kauftreu.com\/services\/soap\/com.kauftreu.app.system.webservices.service.soap.SOAPExampleService?oltp=QAS51000<br \/>\nDla salesOrderType i salesNumber nale\u017cy okre\u015bli\u0107 odpowiednio typ zam\u00f3wienia sprzeda\u017cy oraz jego numer.<br \/>\nZamiast userCertificateFileName i serverCertificateFileName nale\u017cy wprowadzi\u0107 pe\u0142n\u0105 \u015bcie\u017ck\u0119 i nazw\u0119 pliku JKS.<br \/>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Przyk\u0142adowy klient SOAP nie mo\u017ce by\u0107 uruchamiany w systemie. Odpowiednie klasy musz\u0105 zosta\u0107 skopiowane i skompilowane (np. w oddzielnym projekcie Eclipse). Ponadto w \u015bcie\u017cce klasy nie mo\u017ce by\u0107 u\u017cywana biblioteka CXF. Przy pr\u00f3bie uruchomienia klienta w systemie pojawi si\u0119 nast\u0119puj\u0105cy wyj\u0105tek:<br \/>\nException in thread &#8222;main&#8221; com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLException: Unrecognized SSL mes-sage, plaintext connection? at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:121) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:142)at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)at<\/div><\/section> com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)<br \/>\nPrzyk\u0142adowy klient SOAP jest zaprogramowany tak, aby wszystkie \u017c\u0105dania by\u0142y przypisywane do tych samych sesji.<\/div><\/section>\n<h5 id=\"przykladowy-klient-uslugi-rest\" ><span class=\"ez-toc-section\" id=\"Przykladowy_klient_uslugi_REST\"><\/span>Przyk\u0142adowy klient us\u0142ugi REST<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Dla poszczeg\u00f3lnych \u017c\u0105da\u0144 mo\u017cna u\u017cy\u0107 narz\u0119dzia Soap UI, kt\u00f3ry jest opisany w rozdziale <em><a href=\"#test\">Testowanie us\u0142ug sieciowych za pomoc\u0105 narz\u0119dzia Soap UI<\/a><\/em>.<\/p>\n<h3 id=\"testowanie-uslug-sieciowych-za-pomoca-narzedzia-soap-ui\" ><span class=\"ez-toc-section\" id=\"Testowanie_uslug_sieciowych_za_pomoca_narzedzia_Soap_UI\"><\/span><a id=\"test\"><\/a>Testowanie us\u0142ug sieciowych za pomoc\u0105 narz\u0119dzia Soap UI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Narz\u0119dzie Soap Ui umo\u017cliwia przetestowania us\u0142ug SOAP i REST. Poni\u017cszy opis dotyczy wersji 3.6.1. Pe\u0142na dokumentacja oraz instrukcje instalacji narz\u0119dzia znajduj\u0105 si\u0119 pod adresem:<br \/>\nhttp:\/\/soapui.org\/REST-Testing\/getting-started.html<br \/>\n<em>Ustawienia Soap Ui<\/em><br \/>\nDo przetestowania us\u0142ugi sieciowej potrzebny jest plik WSDL lub WADL. Potrzebny jest r\u00f3wnie\u017c plik JKS certyfikatu u\u017cytkownika do uwierzytelniania wraz z has\u0142em do tego pliku. Certyfikat u\u017cytkownika musi by\u0107 przypisany do odpowiedniego u\u017cytkownika, kt\u00f3ry testuje us\u0142ug\u0119 sieciow\u0105. \u015acie\u017ck\u0119 do pliku i has\u0142o nale\u017cy wprowadzi\u0107 w sekcji SSL Settings okna dialogowego <em>SoapUI Preferences<\/em>.<br \/>\n<em>Zalecenie:<\/em><br \/>\nZalecamy wprowadzenie warto\u015bci 120000 dla <em>Socket Timeout<\/em> w sekcji <em>HTTP Settings<\/em>.<br \/>\nOkno dialogowe <em>SoapUI Preferences<\/em> mo\u017cna otworzy\u0107 za pomoc\u0105 kombinacji klawiszy CTRL+ALT+P lub wybieraj\u0105c opcj\u0119 <em>SoapUi Preferences<\/em> w menu <em>File<\/em>.<br \/>\n<em>Nowy projekt Soap UI<\/em><br \/>\nPo wprowadzeniu ustawie\u0144 Soap UI nale\u017cy utworzy\u0107 nowy projekt SoapUI za pomoc\u0105 kombinacji klawiszy CTRL+N lub wybieraj\u0105c opcj\u0119 <em>New SoapUi Project<\/em> w menu <em>File<\/em>. W otwartym oknie dialogowym nale\u017cy wprowadzi\u0107 nazw\u0119 projektu oraz \u015bcie\u017ck\u0119 do pliku WSDL lub WADL. Po naci\u015bni\u0119ciu <em>OK<\/em> zostanie utworzony projekt o hierarchicznej strukturze. Poszczeg\u00f3lne w\u0119z\u0142y reprezentuj\u0105 ca\u0142\u0105 us\u0142ug\u0119 sieciow\u0105 albo poszczeg\u00f3lne funkcjonalno\u015bci lub ich operacje HTTP (tylko dla us\u0142ugi REST).<br \/>\nNale\u017cy pami\u0119ta\u0107, \u017ce nazwy og\u00f3lnych parametr\u00f3w zapytania (np. oltp lub context) nie s\u0105 cz\u0119\u015bci\u0105 pliku WSDL czy WADL. Parametry te nale\u017cy wprowadzi\u0107 r\u0119cznie:<\/p>\n<ul>\n<li>W przypadku us\u0142ugi SOAP nale\u017cy rozwin\u0105\u0107 w\u0119z\u0142y z funkcjonalno\u015bciami do przetestowania a\u017c do w\u0119z\u0142a Request&lt;number&gt;. Nast\u0119pnie nale\u017cy najecha\u0107 na pasek adresu okna dialogowego, wybra\u0107 opcj\u0119 [<strong>edit current&#8230;<\/strong>] i doda\u0107 \u017c\u0105dany parametr do identyfikatora URI.<\/li>\n<li>W przypadku us\u0142ugi REST nale\u017cy rozwin\u0105\u0107 w\u0119ze\u0142 z nazw\u0105 us\u0142ugi sieciowej. Powinna to by\u0107 nazwa aplikacji utworzona w systemie ERP. Nale\u017cy klikn\u0105\u0107 na ni\u0105 dwa razy. W otwartym oknie dialogowym nale\u017cy doda\u0107 kolejne parametry.<br \/>\nAby uzyska\u0107 dost\u0119p do us\u0142ugi sieciowej nale\u017cy rozwin\u0105\u0107 w\u0119z\u0142y z funkcjonalno\u015bciami do przetestowania a\u017c do w\u0119z\u0142a <em>Request&lt;number&gt;<\/em>. Klikni\u0119cie tego w\u0119z\u0142a spowoduje wy\u015bwietlenie okna dialogowego, w kt\u00f3rym mo\u017cna wys\u0142a\u0107 \u017c\u0105dania do us\u0142ug sieciowych, jak i wy\u015bwietli\u0107 ich odpowiedzi.<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">SAS, kt\u00f3rego identyfikator URI zosta\u0142 u\u017cyty do pobrania pliku WSDL lub WADL, musi by\u0107 uruchomiony. Je\u015bli masz pewno\u015b\u0107, \u017ce ta sama us\u0142uga sieciowa jest uruchomiona na innym serwerze aplikacji, mo\u017cesz edytowa\u0107 identyfikator URI w oknie dialogowym Request, pod\u015bwietlaj\u0105c pasek adresu okna dialogowego i wybieraj\u0105c opcj\u0119 [<strong>edit current&#8230;<\/strong>].<\/div><\/section>\n<p>W pewnych przypadkach plik WADL mo\u017ce nie by\u0107 kompletny, np. mo\u017ce brakowa\u0107 parametr\u00f3w wymaganych dla \u017c\u0105dania. W takim przypadku nale\u017cy doda\u0107 niezb\u0119dne parametry r\u0119cznie.<br \/>\nZa pomoc\u0105 narz\u0119dzia Soap UI mo\u017cna wy\u015bwietla\u0107 r\u00f3\u017cne pliki dziennika. Na przyk\u0142ad zak\u0142adki <em>Soap UI log<\/em> i <em>error log<\/em> wy\u015bwietlane s\u0105 w dolnej cz\u0119\u015bci g\u0142\u00f3wnego okna.<\/p>\n","protected":false},"author":12,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-8043","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-zewnetrzne-interfejsy"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/8043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/comments?post=8043"}],"version-history":[{"count":5,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/8043\/revisions"}],"predecessor-version":[{"id":8048,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/8043\/revisions\/8048"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=8043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}