Ein Webservice mit Axis2 und Spring

Mit Axis2 ist das Erstellen von Webservices für Java Programmierer noch einfacher geworden. Mit folgendem kleinen Beispiel will ich zeigen, wie man einen Webservice programmieren kann, der von Spring ein Bean injiziert bekommt.

Als Erstes erstellen wir unseren Webservice als einfache Java Klasse:

package com.jgeppert.services;
 
import com.jgeppert.dao.MyDAO;
 
private MyDAO myDAO;
 
public class MyWebService
{
	/* Die Funktion add() ist unsere Webservice Operation die
	 * dann mit einem Client angesprochen werden kann.
	 */
	public String add(String text)
	{
		try
		{
			myDAO.save(text);
			return "insert successfully";
		}
		catch(RuntimeException e)
		{
			return e.getMessage();
		}
	}
 
	// Mit dieser Methode injiziert uns Spring unser DAO Objekt
	public String setMyDAO(MyDAO myDAO)
	{
		this.myDAO = myDAO;
	}
}

Als Zweites brauchen wir für Aris2 eine service.xml mit folgendem Inhalt:

<service>
	<description>My First WebService</description>
	<parameter name="ServiceClass" locked="false">
		com.jgeppert.services.MyWebService
	</parameter>
    <parameter name="ServiceObjectSupplier" locked="false">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
    <parameter name="SpringBeanName" locked="false">myWebService</parameter>
	<operation name="add">
		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
	</operation>
 
</service>

Für Spring sind die zwei Parameter ServiceObjectSupplier und SpringBeanName entscheidend, um uns das benötigte DAO zu übergeben. Mit Hilfe eines Ant Scriptes oder manuell kann man sich den Webservice in das für Axis2 benötigte AAR Archiv packen. Das Archiv ist im Grunde eine normale JAR Datei mit der service.xml im META-INF Verzeichnis.

Die Struktur des AAR-Archives sollte so aus sehen:

- MyWebService
   - META-INF
     - services.xml
   - com
     - jgeppert
       - services
         - MyWebService.class

Damit Spring unser DAO in dem Service injizieren kann, brauchen wir noch folgenden Eintrag in unserer applicationContext.xml.

<bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />
 
	<bean id="myWebService" class="com.jgeppert.services.MyWebService">
    	<property name="myDAO" ref="MyDAO"/>
 
  	</bean>

Nach dem deployen des AAR-Archives im services Folder der Axis2 Web Application steht der Service nun zur Verfügung.

Leave a Reply