środa, 22 września 2010

Web Services – usługa i klient z wykorzystaniem Apache Axis 2 i Eclipse Galileo

Mój zbliżający się wielkimi krokami projekt oparty będzie o usługi sieciowe w związku z czym, postanowiłem rozpoznać temat i zobaczyć jakie jest wsparcie w Eclipse i co sprawdzi się lepiej – Apache Axis 2 czy JAX-WS (Java API for XML Web Services). Zacznijmy od Axisa – nie wymaga in kontenera EJB w związku z czym użyłem Tomcata 6.
W Eclipse wybieramy File → New → Dynamic Web Project
Do utworzenia mojego Web Service'u wybrałem podejście bottom-up czyli utworzenie usługi z klasy Java. Alternatywnie można wybrać podejście top-down czyli utworzenie usługi na bazie istniejącego dokumentu WSDL.
Poniżej moja klasa z jedną metodą
public class AxisDemoService {
 
 public String sayHello(String name){
  return "Hello "+name;
 } 
}

Następnie wybieramy File –> New → Web Service
W następnym kroku należy wybrać funkcje dostępne dla naszej usługi
 
i wystartować server
To czy usługa została poprawnie uruchomiona można sprawdzić pod adresem: http://localhost:8080/AxisWS/services
Czas na utworzenie aplikacji klienckiej. Ja zrobię to w osobnym projekcie o nazwie AxisWSClient.
Ponownie wybieramy File → New → Dynamic Web Project , a następnie File –> New → Web Service Client. Wskazujemy na lokalizację naszego dokumentu WSDL:
Poniżej wygenerowany z automatu kod mojej aplikacji klienckiej.
 
Czas na mały test. Utworzyłem w tym celu dodatkową klasę
import java.rmi.RemoteException;

public class AxisDemoServiceTest {

    public static void main(String[] args) throws RemoteException {
        
        AxisDemoServiceProxy proxy = new AxisDemoServiceProxy();
        proxy.setEndpoint("http://localhost:8080/AxisWS/services/AxisDemoService?wsdl");
        
        String message = proxy.sayHello("Kuba");
        System.out.println(message);

    }
} 

Warto jeszcze zabezpieczyć usługę. W tym celu wykorzystałem najprostszą z możliwych autentykację typu BASIC. W pliku konfiguracyjnym tomcat-users.xml dodałem użytkownika

  
  


i stworzyłem odpowiednie wpisy w pliku web.xml

   
    Axis Services
    /services/*
   
   
    ws_role
   
  
  
   BASIC
   Axis WS Realm
  

Moja klasa testowa w aplikacji klienckiej także wymagała małej modyfikacji
public class AxisDemoServiceTest {

 public static void main(String[] args) throws RemoteException {
  
  AxisDemoServiceProxy proxy = new AxisDemoServiceProxy();
  proxy.setEndpoint("http://localhost:8080/AxisWS/services/AxisDemoService?wsdl");
  
  AxisDemoServiceSoapBindingStub stub = (AxisDemoServiceSoapBindingStub)proxy.getAxisDemoService();
        stub.setUsername("ws_user");
        stub.setPassword("ws_password");
  
  String message = proxy.sayHello("Kuba");
  System.out.println(message);

 }
}

Działa.

niedziela, 19 września 2010

Hello World II - czy nowa odsłona mojego bloga

Witam !
Zbierałem się do tego długo, aż wreszcie w ten weekend spiąłem się zrobiłem nowego bloga. Skłoniło mnie do tego parę rzeczy, a między innymi fakt, że już od dłuższego czasu nie zajmuję się programowaniem w ADF. Doszły do tego pewne problemy administracyjne oraz dość kłopotliwe i zajmujące dla mnie tworzenie wpisów dwóch językach. Jeśli komuś przydały się zawarte w nich rozwiązania, cieszę się bardzo i mam nadzieję że i tutaj zajrzy od czasu do czasu – tym bardziej, że tematyka dalej kręcić będzie się wokół Javy.

Moje ambitne plany :)
Od teraz chcę skupić się bardziej konkretnie na Java EE. Mam nadzieję, że wkrótce pojawi się coś na temat WebServices. Oczywiście będzie sporo o moim ulubionym zagadnieniu czyli JSF i różnych implementacjach tego standardu – tym bardziej, że w ostatniej wersji 2.0 pojawiło się sporo nowych rzeczy. Na pewno będzie coś z tematyki ORM czyli EJB i Hibernate, a może i MyBatis - who knows ?. Z pewnością znajdą się też wpisy dotyczące JBoss Seam, którym jestem już od dłuższego czasu zafascynowany. Mam zamiar co nieco wspomnieć o bardziej zaawansowanych możliwościach Eclipse Birt i jego integracji z aplikacjami webowymi. No i oczywiście bezpieczeństwo aplikacji – tutaj także chciałbym się troszeczkę wykazać.
Jeśli chodzi o bazy danych to pozostaje przy jedynie słusznej czyli Oracle, aczkolwiek żeby nikt nie był zszokowany jeśli zobaczy coś o Informix'ie – tak, istnieje jeszcze coś takiego :).
Z tematów całkowicie dla mnie nowych planuję powalczyć z portalem Liferay i samymi portletami. Postaram się zamieszczać cykliczne relacje z tej walki, licząc na cenne uwagi i komentarze ze strony czytelników.
Czy będzie jeszcze o Oracle ADF ? - być może. Od czasu do czasu jeszcze coś w nim dłubię.

P.S.
Właśnie przeczytałem to co napisałem wyżej. Ciekawe kiedy znajdę na to wszystko czas :).