Akt I
W przykładzie zostanie użyta prosta, lekko okrojona encja z mojego projektu zaliczeniowego.package org.gen2.biblioteka.encje;
@Entity
public class Autor implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String imie;
private String nazwisko;
public Autor() {
super();
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImie() {
return imie;
}
public void setImie(String imie) {
this.imie = imie;
}
public String getNazwisko() {
return nazwisko;
}
public void setNazwisko(String nazwisko) {
this.nazwisko = nazwisko;
}
public String toString() {
return imie + " " + nazwisko;
}
}
Akt II
Definiujemy prosty interfejs (z jedna metoda) dla bean'a który będzie naszym WebSerwisem (tudzież Usługą Sieciową)package org.gen2.biblioteka.beany;
@WebService
@SOAPBinding(style = Style.DOCUMENT)
public interface AutorWSInterface {
ArrayListpobierzAutora(int idAutora);
}
@WebService - oznacza, ze intefejs będzie służył do implementacji WebSerwisu
@SOAPBinding - definiuje sposób komunikacji pomiędzy 'klientem' a 'serwerem', nie zaleca sie mieszanie style = RPC z use = LITERAL (JBoss w wersji 5.0 nie obsługuje tego jeszcze poprawnie)
Akt III
A teraz sama implemetacja bean'a.package org.gen2.biblioteka.beany;
@Stateless
@WebService(endpointInterface = "org.gen2.biblioteka.beany.AutorWSInterface")
@SOAPBinding(style = Style.DOCUMENT)
public class AutorWSBean {
private @PersistenceContext(unitName="BibliotekaEJB")
EntityManager em;
@WebMethod
public ArrayListpobierzAutora(int idAutora) {
Query query = em.createQuery("select a from Autor as a where a.id = " + idAutora);
ArrayListautor = new ArrayList ();
Autor temp = (Autor) query.getSingleResult();
autor.add(temp.getImie());
autor.add(temp.getNazwisko());
return autor;
}
}
@WebService(endpointInterface = "org.gen2.biblioteka.beany.AutorWSInterface") - musi wskazywać na intefejs który klasa ma implementować.
@WebMethod - jest użyteczne gdy mamy wiecej metod w beanie i chcemy żeby tylko niektóre były "eksportowane" do WSDL'a.
Akt IV
A teraz jak tego użyc?Najpierw musimy wrzucić nasz projekt na serwer, następnie tworzymy w eclipsie nowy projekt, naciskamy Ctrl + N, z menu wybieramy 'Web Services', 'Web Service Client', w 'Service Definition' wklejamy link do naszego WSDL (link możemy znalezć na stronie, nie musimy sie przekopywać przez tony logów tak jak np. w Geronimo), klikamy 'Finish' i mamy utworzony interfejs do połączenia z naszym WebSerwisem, teraz napiszemy klase w ktorej przetesujemy jego dzialanie.
public class Test {
public static void main(String[] args) {
AutorWSBeanService abs = new AutorWSBeanServiceLocator();
try {
AutorWSInterface asi = abs.getAutorWSBeanPort();
String[] autor = asi.pobierzAutora(1);
System.out.println(autor[0] + " " + autor[1]);
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
Happyend
Uruchamiamy powyższą aplikacje lokalnie. A poniżej mamy wynik działania programu.Adam Mickiewicz
Tu byl wielki babol rzeczowy;)