Web Services mit Spring WS und JAXB - JAXenter
Enterprise/Web Services mit Spring WS

Web Services mit Spring WS und JAXB

Thorsten Kamann
Der Web-Descriptor

Nachdem wir die Spring-Konfiguration bereits hinter uns gelassen haben, brauchen wir nur noch die web.xml konfigurieren. Hier benötigen wir lediglich das MessageDispatcherServlet, das von Spring WS geliefert wird (Listing 12).

Listing 12
Product Catalogue Servicespring-wso.s.ws.t.http.MessageDispatcherServletcontextConfigLocation
        classpath:META-INF/spring/spring-ws-servlet.xml
      transformWsdlLocationstruespring-ws/*

Über den Parameter contextConfigLocation geben Sie die zu verwendenden Spring-Konfigurationen an. Mit dem zweiten Parameter werden alle URIs in der WSDL mit dem aktuellen Servernamen überschrieben.

Testen der Anwendung

Jetzt ist der Zeitpunkt gekommen, die Anwendung zu testen. Da die Anwendung ja einen Web Service bereitstellt, ist es eine gute Idee, diese auf einen Webcontainer zu deployen. Dafür bietet sich Tomcat an. In Eclipse starten Sie die Anwendung mit RUN AS… | RUN ON SERVER. Nach wenigen Sekunden ist die Anwendung deployt und Sie können die WSDL unter http://localhost:8080/articles-spring-ws-dom/productService/product.wsdl aufrufen. Zum Testen der Anwendung brauchen Sie aber mehr als einen simplen Aufruf der WSDL. Mit SoapUI [8] gibt es ein leistungsfähiges Web-Service-Testing-Tool. In dem Verzeichnis soapui befindet sich ein SoapUI-Projekt. Öffnen Sie dieses und führen Sie den Web Service Request aus. Als Ergebnis sollten Sie eine SOAP-Message erhalten, die zwei Produkte enthält. Eigentlich wären wir jetzt fertig. Es gibt aber noch eine Stelle, die direkt verbessert werden kann. Der DateRangeType, der aus dem XML Schema generiert wird, verwendet nicht die Calendar/Date-Klassen aus dem JDK, sondern javax.xml.datatype.XMLGregorianCalendar. Hier wäre es schön, wenn anstatt dieser Calendar-Implementierung java.util.Date verwendet würde. Das muss dem XJC-Generator mitgeteilt werden, was direkt in dem XML Schema passieren kann (Listing 13).

Listing 13

Für den XML-Schema-Datentyp DateTime bietet JAXB bereits einen Konverter: javax.xml.bind.DatatypeConverter. Die Methoden, die zum Parsen bzw. zur Ausgabe des Datums herangezogen werden, heißen parseDateTime bzw. printDateTime.
Für den Datentyp date gibt es keine Entsprechung. Da der Request keine Zeitangabe enthalten soll, sondern nur eine Datumsangabe, brauchen wir einen Konverter für diesen Datentyp. Dazu verwenden wir die Klasse de.itemis.hoa.spring.ws.adapter.DateAdapter. Die Methoden heißen genauso wie die Methoden für den DateTime-Konverter. Die Implementierung des Konverters ist denkbar einfach (Listing 14).

Listing 14
public class DateAdapter {

  public static Date parseDateTime(String s) {
    return DatatypeConverter.parseDateTime(s).getTime();
  }

  public static String printDateTime(Date dt) {
    Calendar cal = new GregorianCalendar();
    cal.setTime(dt);
    return DatatypeConverter.printDateTime(cal);
  }
}

Wenn Sie die Klassen aus dem Schema neu generieren lassen, wird von nun an java.util.Date für die Datumsattribute in der Klasse DateRangeType verwendet.

Zusammenfassung

Die Lösung mit JAXB ist ein deutlicher Schritt nach vorne. Die Arbeit mit XML entfällt ganz und Spring WS übernimmt den Großteil der Konfiguration (Marshaller). Die Arbeit mit einem Web Service fällt viel leichter, da man lediglich eine Klasse und eine Methode annotieren muss, um einen gültigen Endpoint zu kreieren. Im dritten und letzten Teil dieser Artikelserie, werden wir uns dem Testen von Web Services zuwenden und das Thema „Security“ beleuchten.

Thorsten Kamann ist als Projektmanager, Softwarearchitekt und Coach bei itemis tätig. Seine Schwerpunkte sind Scrum, webbasierte Technologien, MDSD, leichtgewichtige und flexible Architekturen und Open Source. Er ist Projectlead bei der Fornax Platform, einer Plattform für die Entwicklung von MDSD-related Tools und Groovy-Committer. Darüber hinaus schreibt er Bücher, veröffentlicht regelmäßig Artikel in Fachmagazinen und hält Vorträge auf Fachkonferenzen zu obigen Themen.
Geschrieben von
Thorsten Kamann
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.