Advanced Java Services | Web Services mit GlassFish und Eclipse |
Im Unterschied zu JBoss braucht GlassFish in der WAR-Datei zusätzliche Archive im lib-Verzeichnis. Diese werden von Eclipse automatisch bereitgestellt, wenn man den Web Service Wizard einsetzt. Die folgenden Screenshots zeigen das Vorgehen ausführlich. Zunächst wird natürlich wieder ein Dynamic Web Project angelegt.
Hier die Verzeichnisstruktur, die Eclipse erzeugt hat.
Bevor wir den Web Service mit Hilfe von Eclipse einrichten legen wir ein SEI und eine SIB im Projekt an.
Im nächsten Schritt richten wir nun den Web Service ein.
Da wir nur einfache Datentypen verwenden reicht RPC/encoded.
Wir können daher das Warning ignorieren
Da wir GlassFish außerhalb von Eclipse starten canceln wir diesen Dialog.
Hier noch ein Blick auf die von Eclipse mittlerweile eingerichteten Dateien.
Im Gegensatz zu JBoss braucht GlassFish zusätzlöiche Bibliotheken um einen Web Service anzubieten, so verwendet GlassFish u.u. axis.jar. Apache Axis ist eine Implementierung von SOAP ("Simple Object Access Protocol"). Die web.xml unterscheidet sich daher grundlegend von der von JBoss.
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>WebService-GlassFish-1</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet> <display-name>Axis Admin Servlet</display-name> <servlet-name>AdminServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> </web-app>
Wir müssen noch die WSDL bearbeiten, da Eclipe hier nicht den richtigen Port einträgt
Wir wechseln zur Textansicht, der zu ändernde Teil befindet sich am Ende der WSDL.
Und tragen den richtigen Port ein. Auch den Namen können wir ändern.
Da wir unsere Anwendung selbst deployen wollen legen wir nun mit Hilfe von Eclipse ein war-File an.
File -> Export
GlassFish verfügt im Verzeichnis domain1 über ein sog. autodeploy-Verzeichnis. WAR, JAE und EAR-Dateien werden dort automatisch erkannt und deployed. Lehrreicher ist es jedoch, den Service selbst zu deployen, so bekommt man einige Kenntnisse über die Adminkonsole von GlassFish.
In der Admin-Console von GlassFish gehen wir auf Applications.
Und dann auf Deploy und tragen unser war-File ein. Dann bestätigen wir mit OK.
Nun ist der Web Service eingerichtet.
Wenn wir auf TimeService gehen bekommen wir noch weitere Information. Hier können wir sogar noch Änderungen vornehmen.
GlassFish liefert uns die WSDL unter der URL
http://localhost:9090/MyDayTimeService/TheDayTimeService?wsdl
import java.io.IOException; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.WebServiceException; import javax.xml.namespace.QName; import java.net.MalformedURLException; import timeservice.DayTimeService; public class WebService_GlassFish_1_Client { public static void main(String[] args) throws IOException { System.out.println("DayTimeServiceClient_GlassFish"); try { URL serviceURL = new URL("http://localhost:9090/MyDayTimeService/TheDayTimeService"); QName qname = new QName("http://timeservice/", "TheDayTimeService"); // slash am ende notwendig Service service = Service.create(serviceURL, qname); DayTimeService dts = service.getPort(DayTimeService.class); System.out.println(dts.getServerTime("ge")); System.out.println("Sekunden seit 1970: " + dts.getUnixTime()); } catch(MalformedURLException ex) { System.out.println(ex); //bw.write(ex.toString()); bw.newLine(); } catch(WebServiceException ex) { //System.out.println(ex); ex.printStackTrace(); } } }
Die Ausgabe