Webservice - krótki wstęp

Do niedawna nie miałem pojęcia o webservice’ach, wiedziałem że takie coś istnieje ale jak działa to była czarna magia. Ale teraz mogę się stać ekspertem z racji tego, że w pracy jeden projekt jest prawie skończony oparty na nich (implementacja klienta) i drugi też będę robił (strona serwera).

Czym są webservicy, jak sama nazwa wskazuje są to usługi sieciowe i dzielą się jak wspomniałem wyżej na implementację po stronie klienta i po stronie serwera. Aby wygenerować webserice jest potrzebny plik wsdl. Ma on strukturę xmlową i kilka chyba obowiązkowych węzłów:

  • types
  • message
  • portType
  • binding
  • service

Aby wygenerować usługę lub klienta z wsdla moża użyć wbudowanego kreatora w eclipsie bądź skorzystać z narzędzia dostarczanego przez fundację apache w ich własnej implementacji ws Axis2 - wsdl2java. Osobiście nie polecam wizarda w eclipsie ponieważ jego działanie nie jest zbyt stabilne i trochę trzeba się namęczy. Wsdl2java i java2wsdl są prostymi konsolowymi aplikacjami o prostej składni. Również z kodu javy można wygenerować wsdl.

Zacznijmy może od usługi. Po wygenerowaniu w eclipsie usługi dostajemy kilka plików. W głównej mierze są to interfejsy, implementacje jakiś naszych typów zadeklarowanych w wsdl ale nas najbardziej będzie interesował plik z końcówką Impl od implementation. Są w nim metody naszego webservicu, które nie posiadają implementacji tylko zwracają jakieś wartości. Naszym zadaniem jest obudowanie ich i sprawienie aby wykonywały to co jest w założeniach projektu.

Strona klienta jest jeszcze prostsza. Szukamy w wygenerowanych plikach, jednego w którym nazwa zawiera słowo Locator. To się tyczy Axis 1. Tworzymy nową instancję tej klasy i poprzez tego lokatora łączymy się z ws. Pozostaje nam tylko wywołać metody z odpowiednimi parametrami chyba, że chcemy jakoś wykorzystać wartości zwracane przez te metody to wtedy tworzymy odpowiedni kod.

Trudny wybór - aparat

Już dawno chodziła mi po głowie myśl kupna cyfrówki. Początkowo chciałem coś niedrogiego w granicach 500 złotych, bez żadnej sprecyzowanej firmy. Jednak zwlekałem z zakupem ale że mikołaj za niedługo to sobie sprawię taki prezent.

Początkowo spodobał mi się canon s3. Niedawno kupił go sobie mój wujek i przypadł mi do gustu. Więc się zacząłem zastanawiać nad nim i nowszym modelem canon s5. Po przeglądnięciu i wysłuchaniu opinii o nich zostałem przy s3. Ale wtedy przypadkowo pojawił się na moim horyzoncie Panasonic- Lumix fz8. Aparat bardzo zbliżony do canona s3, w niektórych elementach lepszy a w niektórych gorszych, więc wybór był dosyć cieżki. Minimalnie ale jednak dalej mi podchodził canon s3, chociaż lumix był tańszy o jakieś 100-150 złotych. Właśnie dziś zobaczyłem, cena panasonica fz8 została obniżona i ta różnica wynosi teraz prawie 350 złotych. Za tak zbliżone aparaty to ta cena może mieć decydujące znaczenie.

Jeśli została obniżona cena powyższego panasonica to może też panasonic fz18 będzie tańszy. Nawet jak jego cena będzie zbliżona do canona s3, a jest to bardzo możliwe, może nawet tańszy, to wtedy raczej go wybiorę. Żeby nie było tak kolorowo to kolejny podobny aparat do canona s3 i lumixa fz8 - olympus sp550. Może nie brałem go jakoś bardziej pod uwagę ale też aparat ciekawy i dosyć korzystna cena.

Najprawdopodobniej w przyszłym tygodniu będę miał jeden z tych aparatów chyba, że jeszcze zmienię zdanie i trafi mi się coś innego.

O moim zakupie

Ojciec chrzestny - scena chrztu

Notka trochę napisana z opóźnieniem ale w końcu się pojawia.

Sobotę spędziłem miło z moim skarbem i  po tym udało mi się w nocy trafić na końcówkę “Ojca chrzestnego. Nawet nie wiedziałem, że będzie. Tak to jest jak się nie ogląda w ogóle tv ani nie czyta programu. Ale wracając do rzeczy, pod koniec filmu jest scena chrztu, gdzie Michael Corleone jest ojcem chrzestnym syna swojej siostry. To jest jedna z moich ulubionych scen tego filmu. A co w niej jest takiego ciekawego, to dobro, które jest tylko maską zła. Michael, który początkowo jest dobry i nie wchodzi w interesy rodziny, właśnie w tej scenie pokazuje swoją prawdziwą twarz. Z jednej strony wyznanie wiary i słowa przyszłego dona, że wyrzeka się grzechu i szatana a w tym samym czasie następuje egzekucja wrogów Rodziny.

Jak dla mnie mistrzostwo, z jednej strony chrzest - kojarzący się z czymś dobrym a z drugiej wielokrotne morderstwo. Szkoda, że jest tak mało scen w filmach, zrobionych w podobny sposób.

Dodawanie certyfikatów w javie

Czasem jak korzystamy z klienta webservicu to potrzebujemy dodać certyfikat danej strony do aplikacji. O ile w przeglądarce zaakceptowanie certyfikatu jest proste i sprowadza się do paru kliknięć, to w aplikacji może to być trochę utrudnione.

Należy dodać certyfikat do listy certyfikatów w systemie ale jak to zrobić. Jest kilka sposobów aby to wykonać ale nie sprawdzałem ich dokładnie tylko skorzystałem ze sposobu opisanego tuta . Ta możliwość jest bardzo prosta do dodania pożądanego przez nas certyfikatu.

Ściągamy ten kod i kompilujemy go. Później uruchamiamy w konsoli skompilowany program z parametrem, gdzie tym parametrem jest nazwa hosta strony gdzie jest certyfikat. Musi on być bez żadnego http:// ani tym podobnych ani żadnych slashy na końcu. Po uruchomieniu z tym parametrem zostanie wypisany wyjątek, że nie można odnaleźć certyfikatu a także treść certyfikatu ze strony z możliwością dodania go do zaufanych certyfikatów. W katalogu gdzie jest nasz skompilowany program tworzy się plik “jssecacerts”, który zawiera zaufane certyfikaty z pliku cacerts oraz nasz nowy certyfikat. Można tamten plik podmienić tym naszym ale moim zdaniem lepiej tego nie robić. Ostatnią rzeczą jaką musimy zrobić jest w wpisanie w kodzie w miejscu gdzie łączymy się ze stroną z certyfikatem takiego fragmentu

System.setProperty(”javax.net.ssl.truststore”, “sciezka/do/pliku/jssecacerts”);

Wyszukiwanie i przekierowywanie na strony

Patrząc na frazy i ich pozycje w googlach po jakich niektórzy trafiają na moją stronę, dochodzę do wniosku, że wyszukiwanie jest źle zorganizowane. Mój blog nie jest nigdzie promowany, nigdzie nie umieszczałem linków do niego a jednak wiele fraz znajduje się na pierwszych miejscach pośród kilku milionów. Wyprzedzając tym samym serwisy, które istnieją dużo dłużej niż ja prowadzę tego bloga i mają lepsze informacje niż ja tu podałem.

Tyczy się to głównie fraz dotyczących parsowania xml i konwersji tekst, chociaż zdarzają się też perełki, które łączą jakieś słowa z kilku notek i wynik jest jednym z pierwszych znalezionych. W tamtym tygodniu potrzebowałem strony z tutorialem digestera ale niestety była ona niedostępna. I gdzie wujek google mi podpowiedział abym się udał. Oczywiście do mnie, pierwsza pozycja pośród prawie 2 milionów. Skąd się wziąłem aż tak wysoko. Fakt, że o tej tematyce nie ma zbyt wielu informacji po polsku ale są strony dużo lepsze od mojej a są dużo niżej i może być problemem dotarcie do nich.

Moim zdaniem wypozycjonowanie strony nie powinno być jakimś problemem. Więc pozycjonerzy, nie wiem czy tak to się nazywa, mają chyba przyjemną pracę, dobiorą kilka słów kluczowyc, niekoniecznie związanych z stroną i już przesuwa się w górę. Tak samo page rank, nie wiem na jakiej zasadzie on działa i jaka jest jego skala ale chyba też ma jakiś wpływ na wyszukiwanie i pozycje na liście. Mojego bloga ta wartość to 2, co uważam za bardzo dobry wynik, biorąc pod uwagę, że nie ma tu zbyt wiele treści oraz to, że przez prawie pół roku było tu dwie trzy notki. Jednak wyszukiwarki mnie lubią.

A tu kilka moich pomysłów na lepsze wyszukiwanie.

1. W pierwszej kolejności powinny być pokazywane te strony, które zawierają dokładnie wyszukiwaną frazę. (Nie jestem pewien czy przypadkiem tak nie jest teraz).

2. Użycie elementów sztucznej inteligencji, systemów eksperckich aby nie pojawiały się złączone słowa z kilku różnych artykułów z jednej strony, a to niestety jest dość częste.

3. Powiązane z powyższym mogłyby być filtry, nawet definiowane przez użytkownika, jaka może być maksymalna odległość między szukanymi słowami ( w znakach lub słowach lub jeszcze innej jednostce).

4. Coś zrobić z słowami kluczowymi, tagami. Są one ważne ale mogą powodować dosyć niedokładne wyniki. Może zastosować tu 2 wskaźniki . Jeden procentowy udział naszych fraz w zadeklarowanych przez autora liście słów kluczowych a drugi liczbą wystąpień tych słów tekście ale pod warunkiem brania pod uwagę nie całości strony a pojedyncze artykuły.

Parsowanie XML 3-wiele atrybutów o takiej samej nazwie

Dziś w pracy miałem za zadanie wyciągnąć dane z dokumentu XML i zapisać je do tablicy longów. Dla naszego przykładu przyjmijmy, że miał postać:
<GlownyElement>
<Numer>1</Numer>
<Numer>2</Numer>
<Numer>3</Numer>
<Numer>4</Numer>
</GlownyElement>

Jak to sparsować? w poprzednich notkach przetwarzaliśmy dokumenty gdzie były pojedyncze elementy więc tamtych sposobów nie można zastosować, bo będziemy mieli tylko jeden element a potrzebujemy wszystkie. Można zastosować taki sposób, korzystając ze znanego nam Digestera.

Digester dig = new Digester();
dig.setValidating(false);
dig.addCallMethod(”*/Numer”, “add”, 1);
dig.addCallParam(”*/Numer”, 0);
List<String> list = new ArrayList<String>();
dig.push(list);
dig.parse(new StringReader(document));
long [] retar = new long[list.size()];
for(int i=0;i < list.size();i++){
retar[i] = Long.parseLong(list.get(i));
}

Pierwsze 2 linijki są nam znane, ale ciekawe rzeczy zaczynają się od kolejnej addCallMethod(”*/Numer”,”add”,1) oznacza to, że dla atrybutu */Numer wywołujemy metodę add a 1 to ilość paremetrów do przetworzenia czyli nasz Numer. Metoda addCallParam(”*/Numer”,0) mówi nam, że wartość elementu Numer będzie zapisywana na wierzchu stosu. Później jest tworzona lista stringów i wkładana na stos. Bardzo ważne aby to był string, bo jeśli damy inny typ to rzuci nam wyjątkiem. Kolejnym etapem jest parsowanie gdzie document to String z zawartością naszego dokumentu xml. Ostanie 3 linijki to utworzenie potrzebnej mi tablicy longów.

Druga część
Pierwsza część

Szalony tydzień

Ten tydzień przeżyłem na bardzo wysokich obrotach. O ile jeszcze poniedziałek i wtorek były w miarę normalne to końcówka już nie za bardzo.

W środę dowiedziałem się, że w ten poniedziałek czyli jutro jest spotkanie z klientem a nim prezentacja tego modułu, za który ja odpowiadam. W ten dzień jeszcze trochę mi brakowało do skończenia tego ale praca pod presją czasu działa na mnie mobilizująco. Przy okazji podpisałem nową umowę o pracę, więc pewna stabilizacja na rok. Pracę skończyłem o 17 i miałem sporo czasu na pociąg bo prawie półtorej godziny. Więc spokojnie powinienem zdążyć ( a pracuję w południowej części Krakowa) , łącznie wejściem do domu aby zabrać kilka rzeczy. Wsiadam w tramwaj i spokojnie sobie jad, kiedy rozlega się w głośniku głos kierowcy, że na moście Grunwaldzkim był jakiś wypadek i tramwaje tamtędy nie jeżdżą, tylko jakieś autobusy będą podstawiane.
Sytuacja staje się dla mnie nie ciekawa bo ponad kilometr muszę do domu dojść, szybko zabrać rzeczy i liczyć na szczęście, że autobus zastępczy przyjedzie w miarę szybko. Wiedziałem, że przejeżdża obok dworca a jak jedzie to była wielka tajemnica. Jakoś się udało zdążyć na pociąg i zostałem wciągnięty przez tłum oczekujących i w bardzo niewygodnej pozycji przestałem półtorej godziny w drodze do Tarnowa.

W czwartek szybkie zaliczenie 2 cmentarzy leżących około 30 km od Tarnowa do tego po przeciwnych stronach i powrót do Krakowa tym razem w prawie pustym pociągu ale za to rozgrzanym do czerwoności. I w ten dzień Kraków mnie oczarował bo taka pustka, nikogo nie widać, nikt się nie śpieszy, po prostu magia. Na myśl mi przyszły “Sklepy cynamonowe” Bruno Schulza

W piątek w pracy pojawiłem się wcześniej niż zwykle aby na spokojnie skończyć mój moduł i móc go przetestować. Niestety bardzo znana firma która, jest współwykonawcą projektu pozmieniała parę bardzo ważnych rzeczy, przez co dostosowanie tego do nas zajęło mi koło 6 godzin i już zabrakło czasu na testy. Jednak 12 godzin w pracy to dosyć sporo. Po wyjściu z pracy miałem niecałą godzinę do pociągu. To już było czyste szaleństwo. 10 minut z pracy na mój przystanek, 8 minut z przystanku do domu i z powrotem na przystanek aby móc zdążyć na kolejny tramwaj i 20 minut do dworca. Dobrze, że koło stacji można kupić jakieś jedzenie bo chyba bym umarł z głodu. Jeszcze w pociągu moje kochanie mi napisało, że ma dla mnie niespodziankę w ten dzień. Wyjść z mieszkania w Krakowie po 7, wrócić przed 19 na 2 minuty i później w domu w Tarnowie pojawić się przed 1 w nocy, zjeść obiad o tej porze i położyć się na kilka godzin snu. Aby następnego dnia móc pozałatwiać sprawy i po południu spotkać się z moim szczęściem i wrócić w środku nocy.
Miałem nadzieję, że uda mi się dziś odpocząć ale niestety też się nie udało.