Artikel

 
Dezember 2008 | Artikel

Axis2 und Spring zusammenbringen Fortsetzung, Teil 4

Teil 1   Teil 2   Teil 3   Teil 4   

WSF/Spring

Eine noch tiefer greifende Integration mit dem Spring Framework ist mit dem "Web Service Framework for Spring", kurz WSF/Spring, möglich. Die mit Axis2 gelieferte Spring-Integration konzentriert sich im Wesentlichen darauf, lediglich Spring Beans in eine Axis2-Umgebung zu bringen. Die Axis2-Engine selbst bleibt dabei stets völlig autark von Spring. WSF/Spring geht nun so weit, dass sowohl Web Services, deren Konfiguration und sogar die Axis2-Engine selbst über den Application Context konfiguriert und gesteuert werden können. Gerade für Entwickler, die "Code First" bevorzugen und bereits Spring in ihren Projekten einsetzen, bieten sich so vielfältige Möglichkeiten. Spring Beans können über den IoC-Container von Spring direkt mit Axis2 verbunden werden, ein Deployment über ein Axis2-Archiv ist nicht mehr erforderlich. Der Deployment Deskriptor (services.xml), sonst bei nahezu jedem Axis2-Vorhaben eine unerschütterliche Notwendigkeit, entfällt und zieht ebenfalls im Application Context ein.

Ähnlich wie bei ServiceContextObjectSupplier muss vor der Verwendung von WSF/Spring die web.xml der Webanwendung (in der Axis2 eingebettet ist) konfiguriert werden. Listing 4 zeigt einen Ausschnitt aus einer beispielhaften web.xml. In der hier referenzierten Datei spring-app-context.xml liegt nicht nur die Spring-Konfiguration der als Web Service zu veröffentlichenden Spring Beans vor, sondern auch die komplette Axis2-Konfiguration selbst.

Listing 4: Konfiguration von WSF/Spring in der web.xml

  1. <listener>
  2. <listener-class>
  3. org.springframework.web.context.ContextLoaderListener
  4. </listener-class>
  5. </listener>
  6. <context-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>/WEB-INF/spring-app-context.xml</param-value>
  9. </context-param>
  10. <servlet>
  11. <servlet-name>axis2</servlet-name>
  12. <servlet-class>
  13. org.wso2.spring.ws.servlet.SpringAxis2Servlet
  14. </servlet-class>
  15. <load-on-startup>1</load-on-startup>
  16. </servlet>
  17. <servlet-mapping>
  18. <servlet-name>axis2</servlet-name>
  19. <url-pattern>/axis2/*</url-pattern>
  20. </servlet-mapping>
  21. <servlet-mapping>
  22. <servlet-name>axis2</servlet-name>
  23. <url-pattern>/services/*</url-pattern>
  24. </servlet-mapping>

Wenn man sich die WSF/Spring-Distribution herunterlädt, bekommt man im Samples-Ordner der Distribution eine vorgefertigte und hilfreiche Spring-Konfiguration mitgeliefert, die Axis2 komplett im Rahmen des Application Context aufbaut. Die sonst übliche Konfigurationsdatei axis2.xml entfällt ganz. Listing 5 zeigt auf, wie ein Web Service mit WSF/Spring in der Spring-Konfiguration hinterlegt wird, ohne dass ein externer Deployment-Deskriptor erforderlich ist. Zunächst werden die Grundeinstellungen, die separat in der Datei axis2Config.xml vorliegen, in den Application Context importiert. Danach wird, wie in Spring üblich, eine Spring Bean definiert, die die Geschäftslogik implementiert (den Bankleitzahl-Service). Diese Bean soll als Web Service offengelegt werden. Jetzt wird es richtig interessant, denn die darauffolgenden Zeilen stellen das Pendant zum sonst üblichen Deployment-Deskriptor dar. Alle Properties, die hier gesetzt werden, finden sich üblicherweise also auch in der Datei services.xml, würde man Axis2 ohne Spring einsetzen. Doch wo sind die Angaben zum Message Receiver geblieben? Da man sich im Umfeld von Spring normalerweise in einer Umgebung befindet, in denen POJOs vorherrschen, kann man in einer WSF/Spring-basierenden Konfiguration die Angabe des Message Receivers einfach weglassen. In diesem Fall wird dann automatisch der RPCMessageReceiver verwendet, der in Axis2 für POJO Services zuständig ist. Man ist aber nicht auf diesen einen festgelegt, bei Bedarf darf durchaus auch ein anderer Message Receiver eingestellt werden. Ebenso können auch Object Supplier mit WSF/Spring verwendet werden.

Wer jetzt WSF/Spring direkt selbst ausprobieren möchte, dem sei das Tutorial empfohlen.

Listing 5: Konfiguration eines Web Services mit WSF/Spring im Application Context

  1. <import resource="axis2Config.xml"/>
  2. <bean id="bankleitzahlService" class="de.axishotels.spring.BankleitzahlService" />
  3. <bean id="services" class="org.wso2.spring.ws.WebServices">
  4. <property name="services">
  5. <list>
  6. <bean id="blzService" class="org.wso2.spring.ws.SpringWebService">
  7. <property name="serviceBean" ref="bankleitzahlService"></property>
  8. <property name="serviceName" value="blzService"></property>
  9. </bean>
  10. </list>
  11. </property>
  12. </bean>
Fazit

Auch wenn mit Spring-WS eine Alternative zu Apache Axis2 direkt vom Hersteller des Spring Frameworks zur Verfügung steht, ist ein Zusammenbringen von Axis2 und Spring an vielen Stellen notwendig und sinnvoll. Der Artikel hat gezeigt, welche Optionen es hierfür gibt. So bringt das Axis2-Projekt selbst zwei Service Object Supplier mit, die ein einfaches Einbinden von bestehenden Spring Beans in Axis2 ermöglichen. Axis2 läuft dabei jedoch völlig isoliert von Spring. Wem diese Art der Integration von Axis2 und Spring noch nicht weit genug geht, für den steht mit dem separaten Projekt WSF/Spring eine weitere Möglichkeit zur Verfügung, Axis2 wirklich umfassend in das Spring-Universum zu bringen. Auch wenn es sich bei WSF/Spring lediglich um ein Addon für Axis2 handelt, und es nicht Bestandteil der Axis2-Distribution ist, steht mit WSO2 nicht irgend jemand hinter diesem Projekt, sondern eine Firma, die maßgeblich an der Entwicklung von Axis2 selbst beteiligt ist. Die vielfältigen Optionen zur Integration zeigen ganz deutlich, dass sich Axis2 und Spring gegenseitig nicht ausschließen, sondern dass sie ein gutes Gespann darstellen.

Marc Teufel arbeitet als Softwareentwickler bei der hama GmbH & Co und ist dort für die Entwicklung großer Java-Anwendungen im Logistikzentrum zuständig. Er ist Autor zahlreicher Fachartikel zu Java und .NET, hat zwei Bücher zu Apache Axis publiziert und spricht regelmäßig auf Fachkonferenzen. Unter www.teufel.net ist er im Web zu erreichen.
  1. Webseite Spring Framework
  2. Webseite Spring-WS
  3. Thilo Frotscher, Marc Teufel, Dapeng Wang: "Java Web Services mit Apache Axis2", entwickler.press
  4. Webseite WSF/Spring
  5. Tutorial WSF/Spring
  6. WSO2 Oxygen Tank

Teil 1   Teil 2   Teil 3   Teil 4   

andere Artikel dieser Serie


Anzeige

Kommentare


Anzeige

zurück zum Seitenanfang