9 czerwca 2008

Projekt JAX-WS z użyciem Eclipse Ganymede

Dałem się wciągnąć Jackowi – przystępuje do konkursu "Ganymede Around the World Contess". Zobaczymy, na co stać najnowsze dziecko Eclipse – Ganymede. W ramach testu zaimplementuję WebService bazujący na technologii JAX-WS. Niech będzie taki, jaki zaimplementowałem kiedyś używając Maven’a 2 i opisałem w artykule "JAX-WS i Maven 2 w podejściu Contract First Development". Tym razem również zacznę od WSDL’a. Na jego bazie wygeneruję klasy JAXB i interfejs serwisu, który następnie zaimplementuję.

Zaczynam od pobrania Eclipse Ganymede RC2 w wersji "for Java EE Developers". Żeby było ciekawiej, tj. żeby test rzeczywiście był testem idę na pełny żywioł. Będę na bieżąco pisał co robię, bez uprzedniego ćwiczenia czy jest to słuszna ścieżka i czy będzie działać.

Tworzymy więc nowy projekt – wybieramy kolejno ‘New -> Project -> Web -> Dynamic Web Project’. Zmieniamy wersję (specyfikacji Servlet’ów) na 2.5, wprowadzamy nazwę i… no właśnie, musimy wybrać serwer, na którym uruchomimy aplikację.



Ponieważ mamy świeżą instalację Eclipse’a musimy zdefiniować nowy serwer. W tym celu klikamy guzik ‘New’ w sekcji ‘Target Runtime’. Wybieramy Apache Tomcat v6.0, klikamy ‘Next’ i tu pierwsza miła niespodzianka – jeśli nie mamy jeszcze Tomcata na dysku możemy go sobie pobrać z sieci bezpośrednio z poziomu IDE. Co prawda ja mam, ale klikam ‘Download and Install’, żeby przetestować czy działa.



No i działa! Trochę dziwnie – serwer pobierany jest w osobnym wątku i dopóki proces się nie skończy widzimy komunikat błędu mówiący o niepoprawnej instalacji Tomcata – ale działa! Pierwszy plus dla nowej edycji. Przyjrzyjmy się teraz strukturze utworzonego projektu.



Uwagę zwraca tajemnicza gałąź ‘JavaScript Libraries’. Nie wiem, co to jest i do czego służy, ale zapewne nie ma nic wspólnego z WebService’ami więc zostawiam temat na później. W każdym razie jest to kolejna nowość Eclipse Ganymede (och… ciężko zapamiętać tę nazwę).

WebService będziemy implementować zaczynając od kontraktu – w pierwszej kolejności tworzymy więc WSDL’a. Korzystamy w tym celu z kreatora ‘New -> Other -> Web Services -> WSDL’. Akceptujemy proponowane wartości zmieniając ewentualnie nazwę pliku. Ja zmieniłem na ‘math.wsdl’.



Do stworzenia WSDL’a używam wbudowanego edytora. Nie zauważyłem tu zmian. Fakt, że nie wiele to oznacza, jako że słabo ten edytor znałem, ale na pierwszy rzut oka jest to to samo. Tak czy inaczej, edytor jest niezły i już po kilku kliknięciach mamy to, czego chcieliśmy.



Przechodzimy do kroku generowania kodu. Wybieramy opcję ‘New -> Other -> Web Services -> Web Service’. No i tu niestety wpadka. Eclipse jak nie wspierał JAX-WS tak nie wspiera. Jedyne opcje, jakie mamy do wyboru to ‘Axis’ i ‘Axis2’. Pomyślałem, że Eclipse jest na tyle mądry, że wie, iż Tomcat nie implementuje specyfikacji JAX-WS i stąd to ograniczenie, ale niestety, to samo jest z Geronimo 2.1.



A skąd na liście dostępnych serwerów wziął się Geronimo? Czyżby nowy Eclipse standardowo wspierał ten serwer aplikacyjny? Niestety nie, trzeba zainstalować odpowiedni adapter oraz osobno sam serwer. W sukurs przychodzi bardzo fajna funkcjonalność wyszukiwania i instalowania tego typu rozszerzeń. Co prawda nie jest to nowość Ganymede, ale ja odkryłem ją przy okazji pisania tego artykułu więc muszę wspomnieć. Wybieramy opcję ‘New -> Server’ i w oknie dialogowym klikamy na link ‘Download additional server adapters’. Eclipse przeszukuje bliżej nie określone zdalne repozytoria i po chwili widzimy listę dostępnych adapterów. W chwili pisania tego artykułu są to różne wersje Geronimo i WAS’a CE oraz GlassFish, Jetty a nawet WLS.



Wracając to tematu – póki co z JAX-WS nam się nie udaje, ale bynajmniej nie planuje się jeszcze poddać w tym momencie. Postanowiłem wypróbować nowy mechanizm pobierania uaktualnień i wtyczek (ang. plugin) w nadziei, że może tam znajdę coś ciekawego. Wybieram więc opcję ‘Help -> Software Updates’ a tu niemiła niespodzianka – nie działa. Jestem zdziwiony nie na żarty – nie spodziewałem się polec tak szybko.



Pierwsze co znalazłem, to że jest to znany błąd o numerze 224658. Niestety, błędu nie usunięto, ale sprawę uznano za zamkniętą. Zadowolono się podaniem jakiegoś wyjaśnienia, dlaczego błąd ten nie zostanie naprawiony. Zainteresowanych odsyłam do Bugzilli i lektury dyskusji pod wspomnianym zgłoszeniem błędu. Panowie od Eclipse’a – gratuluję poczucia humoru! Problemu nie udało się rozwiązać w ciągu 20 minut, więc na tym kończę. Co do wsparcia dla JAX-WS również zawód – trzeba jeszcze dużo zrobić, żeby dogonić NetBeans’a a tymczasem zupełnie nic się w tym temacie nie dzieje.

Coś mi się zdaje, że nie wygram głównej nagrody w konkursie Eclipse’a:) Chyba nie zrobiłem im za dobrej reklamy. Ciekaw jestem, czy dostanę koszulkę, która jak napisano przysługuje każdemu… no chyba, że wcześniej wyczerpią się zapasy.

Brak komentarzy: