home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

WebService veröffentlichen

Es gibt mehrere Möglichkeiten einen Java WebService zu veröffentlichen. Einerseits kann wie hier beschrieben der in Java eingebaute WebServer benutzt werden. In produktiven Systemen kommt meist eine gesonderte WebService Engine zum Einsatz. Für folgende Beispiele wird mindestens Java 6 benötigt.

Apache Tomcat in Kombination mit jax-ws

System vorbereiten

  1. Apache Tomcat (Version 6.X) downloaden und entpacken.
  2. jax-ws (Version 2.0.X) downloaden und entpacken (über doppelklick auf das JAR-File)
  3. Inhalt von axws-ri\lib nach apache-tomcat-X.X.XX\lib kopieren
  4. Tomcat starten (über die Datei "startup.bat" aus dem Verzeichnis "bin")

Web-Archiv erstellen

Hinweis: Es ist auch möglich mit Eclipse und Ant das Archiv zu erstellen. Beispielprojekt siehe unter: ExampleWebservice

Ein jax-ws WAR-File besitzt folgende Ordnerstruktur:

 

-WEB-INF
|-classes
|-...
|-sun-jaxws.xml
|-web.xml
-META-INF
|-MANIFEST.MF

 

Das Verzeichnis META-INF und das Manifest File, werden beim packen automatisch erstellt. Das WEB-INF Verzeichnis und deren Inhalt muss selbst angelegt werden:

  1. Dazu ein Verzeichnis namens WEB-INF Verzeichnis angelegt, und darin folgendes erzeugt:

    1. ein Verzeichnis namens classes
    2. eine Datei namnes sun-jaxws.xml
    3. eine Datei names web.xml

In das Verzeichnis "classes" kommen die java Packages mit den *.class Files hinein

Die Datei "sun-jaxws.xml" enthält die Endpoint Beschreibung des WebServices. Darin wird festgelegt welches die Hauptklasse des WebServices ist. Eine Beispieldatei sieht folgendermaßen aus:

 

<?xml version="1.0" encoding="UTF-8"?>

<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint
name='WebExample'
implementation='main.MeineWebServiceKlasse'
url-pattern='/'/>
</endpoints>
  1. name gibt den Namen des WebServices an
  2. implementation gibt den Namen der Hauptklasse an, in der gewohnten "package.className" Notation
  3. url-pattern Soll der WebService nur unter angabe eines Subdirectories erreichbar sein, kann es hier angegebn werden. (Wichtig falls mehrere WebServices über ein WAR File deployed werden sollen)


In der web.xml liegen die Informationen welche die Engine benötigt, um den Dienst bereitzustellen. Ein Beispiel sieht folgendermaßen aus:

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">

<display-name>MeinWebService</display-name>
<description>Ein ganz einfacher WebService</description>

<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>

</listener>

<servlet>
<servlet-name>WebExample</servlet-name>
<display-name>Display Name</display-name>
<description>Servlet Beschreibung</description>

<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>WebExample</servlet-name>

<url-pattern>/</url-pattern>
</servlet-mapping>

<session-config>
<session-timeout>60</session-timeout>
</session-config>

</web-app>

 

Diese web.xml muss natürlich entsprechend angepasst werden. Wichtig ist, dass im Abschnitt <servlet-mapping> der selbe Name und URL eingestellt ist, wie in der sun-jaxws.xml

Sind alle Angaben korrekt und komplett, kann das WebArchiv erstellt werden. Dazu öffnen wir ein Konsolenfenster, und wechseln in das Verzeichnis in welchem der WEB-INF Ordner liegt.

 

jar cvf MeinWebService.war WEB-INF

 

Das generierte War File kann nun einfach auf dem Tomcat deployed werden. Dazu kopieren wir es einfach in das "webapps" Verzeichnis, oder laden es über das Web-Interface hoch.
Die Installation kann durch den Aufruf der folgenden URL bestätigt werden:

 

http://servername:8080/MeinWebService/

 

Hinweis: Die URL auf dem Server muss gleich bennant sein, wie das ursprüngliche "*.war -Archiv"