Welkom bij de Apache Axis2 Tutorial. Onlangs probeerde ik mijn vaardigheden met Apache Axis2 bij te werken van versie 1.3 naar de nieuwste versie 1.5.4 en ik kon geen zelfverklarende tutorial vinden die de laatste release behandelt. Dit vormt dus de basis van mijn bericht voor de Axis2 Web Services Tutorial.
Apache Axis2 Tutorial
Wie zou deze tutorial moeten gebruiken?
Deze tutorial is bedoeld voor Java-programmeurs die geïnteresseerd zijn in het ontwikkelen en implementeren van webdiensten met behulp van Apache Axis2.
Vereisten
Het doel van deze tutorial is om Axis2 te gebruiken voor het maken van webdiensten, het oproepen van de webdienst met een Java-clientprogramma en het testen van de webdienst met de Soap UI-tool. Een basiskennis van Java, webdiensten, XML, Ant en de toepassingsserver (Tomcat) is vereist om de tutorial gemakkelijk te begrijpen.
Gebruikte software en tools
- Java Development Kit (JDK) 1.6.0 (Tomcat 7 vereist minimaal JDK 1.6)
- Apache Ant 1.7.0 (Axis2 vereist minimale versie 1.6.5)
- Apache Axis2 1.5.4 (Binaire distributie)
- Eclipse 3.6.1 IDE voor projectontwikkeling (U kunt ook andere IDE gebruiken, bijvoorbeeld NetBeans)
- Apache Tomcat 7.0.8
- SoapUI voor het testen van onze webservice.
- Mac OS X 10.6.4 (Ik werk op Mac OS, maar de tutorial zou ook moeten werken voor andere besturingssystemen, hoewel sommige wijzigingen nodig kunnen zijn bij het uitvoeren van de commando’s)
Systeemopstelling
-
Download de nieuwste versie van Apache Tomcat nieuwste versie. Op dit moment is de nieuwste versie 7.0.8 en dat is wat ik gebruik voor deze tutorial. Het vereist minimaal Java Versie 1.6, dus zorg ervoor dat het geïnstalleerd is op uw systeem. Als Java 6 niet is geïnstalleerd op uw systeem, moet u het eerst downloaden en installeren vanaf Java SE Downloads. Download de Tomcat Core zip (apache-tomcat-7.0.8.zip) en pak het uit om het te installeren op uw systeem. Stel de JAVA_HOME omgevingsvariabele in om de server te starten en stoppen.
-
Download Apache Axis2 1.5.4 Binary Distribution zip van Apache Axis2 – Releases. Deze stap is vereist om axis2.war te maken die zal worden ingezet op tomcat en om de axis2-bibliotheken te verkrijgen die in projecten worden gebruikt.
-
Unzip de Axis2 binary distribution zip naar een willekeurige map. Ga naar de axis2-1.5.4/webapp-map en voer het “ant create.war”-commando uit om de axis2.war-implementatie te creëren in de axis2-1.5.4/dist-map. Als je Apache Ant niet hebt geïnstalleerd, kun je het downloaden en installeren vanaf Apache Ant – Binary Distributions. Let op dat ik een probleem had met axis2.war gedownload van War Distribution. Later ontdekte ik dat er enkele jars ontbreken in de axis2 War Distribution. War Distribution bevat slechts 58 jars, terwijl Binary Distribution 63 jars bevat. (Ik heb geen zin om uit te zoeken welke jars ontbreken.)
$ ant create.war Buildfile: build.xml init: [mkdir] Aangemaakt: /Users/pankaj/Downloads/axis2-1.5.4/dist/temp Kopiëren van 59 bestanden naar /Users/pankaj/Downloads/axis2-1.5.4/dist/temp prepare.repo: Kopiëren van 9 bestanden naar /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF [mkdir] Aangemaakt: /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf Kopiëren van 1 bestand naar /Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf create.war: [war] Bouwen van war: /Users/pankaj/Downloads/axis2-1.5.4/dist/axis2.war [delete] Verwijderen van map /Users/pankaj/Downloads/axis2-1.5.4/dist/temp BUILD SUCCESVOL Totale tijd: 2 seconden
-
Implementeer de axis2.war in de Tomcat-applicatieserver door deze te kopiëren naar de Tomcat webapps directory. Mogelijk moet je de server opnieuw opstarten als deze hot deployment niet ondersteunt.
-
Ga naar https://localhost:8080/axis2/ en klik op de Validate-link. Als de Happy Axis-pagina verschijnt met GROENE kleur, betekent dit dat axis2 succesvol is geïmplementeerd. Ons systeem is nu klaar en we kunnen doorgaan met het maken van Axis2-webdiensten.
Axis2 Web Service Maken
Om een Axis2 Web Service-archief te maken, hebben we het volgende nodig:
- A Java Project (Axis2WSImplementation) with a class that will be exposed as a web service. In my example, I am exposing two operations from MyService class. The first operation getData input is String and returns String whereas the second operation getObjectData input is MyBean java object and returns MyBean java object after some data manipulation. Note that MyBean class implements Serializable interface so that it can be transferred over the network.
- Ant build.xml-bestand dat zal worden gebruikt om aar, wsdl en client-side stub en callback-handlerklassen te maken.
- services.xml-bestand dat deel zal uitmaken van het axis2-archief. Dit bestand wordt geplaatst in de META-INF-map van het axis2-archief.
De projectstructuur zal eruitzien zoals weergegeven in de onderstaande afbeelding. Raak niet in de war met de inhoud binnen de build-map. Deze worden aangemaakt wanneer we het build.xml Ant-bestand uitvoeren.
Uitleg Axis2 Web Service Project
MyService.java: Implementatieklasse die wordt blootgesteld als Axis2-webdienst.
package com.journaldev.ws;
import com.journaldev.bean.MyBean;
public class MyService {
public String getData(String input) {
return "Hi" + input;
}
public MyBean getObjectData(MyBean myBean) {
String name = myBean.getName();
int id = myBean.getId();
myBean.setId(id + 100);
myBean.setName("Output: " + name);
return myBean;
}
}
MyBean.java: Java Bean-klasse die de invoer en uitvoer is van de getObjectData-operatie in de webdienst.
package com.journaldev.bean;
import java.io.Serializable;
public class MyBean implements Serializable {
private static final long serialVersionUID = -1129402159048345204L;
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
services.xml: Parameters gerelateerd aan Axis2-webdiensten maken deel uit van dit xml-bestand. Het parameter ServiceClass geeft de klasse aan die als webdienst wordt blootgesteld. De andere belangrijke parameters zijn targetNamespace en schemaNamespace. services.xml
<service name="MyService" scope="application" targetNamespace="https://journaldev.com/">
<description>
MyService
</description>
<messageReceivers>
<messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
<schema schemaNamespace="https://journaldev.com/xsd"/>
<parameter name="ServiceClass">com.journaldev.ws.MyService</parameter>
</service>
build.xml: Ant-buildbestand voor het uitvoeren van Axis2-taken. Er zijn drie doelen gedefinieerd waarvan de details zijn:
- generate.wsdl: Dit doel genereert het bestand MyService.wsdl in de build-map. Zorg ervoor dat targetNamespace en schemaTargetNamespace hetzelfde zijn als in het service.xml-bestand.
- generate.service: Dit doel genereert een Axis2-archief in de build-map. Het bevat het services.xml-bestand in het archief en de archiefnaam is MyService.aar
- generate.client: Dit doel genereert de klassen aan de cliëntzijde. Zorg ervoor dat u dit uitvoert nadat u generate.wsdl hebt uitgevoerd, zodat het bestand MyService.wsdl aanwezig is in de build-map.
build.xml
<project name="AxisWSImplementation" basedir="." default="generate.service">
<property environment="env"/>
<property name="build.dir" value="build"/>
<path id="axis2.classpath">
<fileset dir="${basedir}/lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="compile.service">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.dir}/classes"/>
<mkdir dir="${build.dir}/resources"/>
<!--First let's compile the classes-->
<javac debug="on"
fork="true"
destdir="${build.dir}/classes"
srcdir="${basedir}/src"
classpathref="axis2.classpath">
</javac>
</target>
<target name="generate.wsdl" depends="compile.service">
<taskdef name="java2wsdl"
classname="org.apache.ws.java2wsdl.Java2WSDLTask"
classpathref="axis2.classpath"/>
<java2wsdl className="com.journaldev.ws.MyService"
outputLocation="${build.dir}"
targetNamespace="https://journaldev.com/"
schemaTargetNamespace="https://journaldev.com/xsd">
<classpath>
<pathelement path="${axis2.classpath}"/>
<pathelement location="${build.dir}/classes"/>
</classpath>
</java2wsdl>
</target>
<target name="generate.service" depends="compile.service">
<copy toDir="${build.dir}/classes" failonerror="false">
<fileset dir="${basedir}/resources">
<include name="**/*.xml"/>
</fileset>
</copy>
<jar destfile="${build.dir}/MyService.aar">
<fileset excludes="**/Test.class" dir="${build.dir}/classes"/>
</jar>
</target>
<target name="generate.client" depends="compile.service">
<taskdef name="wsdl2java"
classname="org.apache.axis2.tool.ant.AntCodegenTask"
classpathref="axis2.classpath"/>
<wsdl2java
wsdlfilename="${build.dir}/MyService.wsdl"
output="${build.dir}/resources" />
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
Genereren van WSDL, Axis Archief en Stub-bestanden
- Voer het ant-doel generate.wsdl uit om het bestand MyService.wsdl te genereren.
- Voer het ant-doel generate.service uit om het bestand MyService.aar te genereren.
- Voer het ant-doel generate.client uit om de Stub-klassen te genereren.
Implementatie van Axis2-webdienst
Kopieer de MyService.aar naar de directory ~apache-tomcat-7.0.8/webapps/axis2/WEB-INF/services. Axis2 ondersteunt het hot deployen van diensten, dus je hoeft de server niet opnieuw op te starten. Controleer de implementatie van je dienst op de pagina ListServices (https://localhost:8080/axis2/services/listServices). MyService zou daar met twee operaties moeten worden vermeld.
Testen van Axis2-webdiensten
Na het implementeren van de dienst moeten we deze eerst testen. Hier gebruik ik SoapUI, dat een van de beste tools is voor het testen van webdiensten. Als je het niet hebt, kun je het downloaden van hun website en eenvoudig installeren. Stappen voor het testen met behulp van SoapUI
- Maak een nieuw SoapUI-project met de projectnaam MyServiceTest (je kunt elke gewenste naam geven) en de initiële WSDL/WADL https://localhost:8080/axis2/services/MyService?wsdl (Je kunt deze URL krijgen van de Axis2 Lijst Services-pagina nadat je op de MyService-link hebt geklikt.). Laat de andere opties met de standaardwaarde en klik op de OK-knop om het SoapUI-testproject te maken.
- Selecteer een van de Soap Bindings en dubbelklik op de getData en getObjectData SOAP-verzoeken.
- Geef enkele waarden op voor invoer in het verzoek en verzend het naar de URL van het webservice-eindpunt. Je zou output van de service moeten krijgen die lijkt op de onderstaande afbeelding. Het bevestigt dat onze webservice actief is.
Nu zullen we doorgaan met de laatste taak om de webservice aan te roepen met behulp van Axis2 stub-klassen.
Webservice-aanroepen met behulp van Stub-bestanden van Axis2
- Maak een Java-project Axis2Client in Eclipse.
- Maak een lib-map aan en kopieer alle Axis2-jar-bestanden vanuit de gedownloade binair distributiemap lib. Voeg deze jar-bestanden toe aan het build-pad van het project.
- Kopieer eerder gegenereerde MyServiceStub.java en MyServiceCallbackHandler.java naar de src-map van het project met de juiste pakketstructuur. In mijn geval heb ik ze gekopieerd naar het com.journaldev-pakket. Als je deze klassen aan iemand anders moet verstrekken, zou ik ten zeerste aanbevelen om er een jar van te maken en deze vervolgens met anderen te distribueren om eventuele wijzigingen te voorkomen.
- Maak de clientklasse Axis2ClientUsingStubsFromAnt om de bewerkingen van de webservice aan te roepen. De projectstructuur ziet er ongeveer uit als de onderstaande afbeelding.
Axis2ClientUsingStubsFromAnt Code
package com.journaldev.ws.client;
import java.rmi.RemoteException;
import com.journaldev.MyServiceStub;
import com.journaldev.MyServiceStub.GetData;
import com.journaldev.MyServiceStub.GetDataResponse;
import com.journaldev.MyServiceStub.GetObjectData;
import com.journaldev.MyServiceStub.GetObjectDataResponse;
import com.journaldev.MyServiceStub.MyBean;
/**
*
* @author Pankaj - www.journaldev.com This class will invoke Axis2 web service
* operations using Stub classes
*
*/
public class Axis2ClientUsingStubsFromAnt {
/**
* END_POINT is the web service endpoint
*/
private final static String END_POINT = "https://localhost:8080/axis2/services/MyService";
public static void main(String[] args) throws RemoteException {
System.out.println("START");
// Maak het Stub-object door de URL van de eindpunt van de webservice door te geven
MyServiceStub stub = new MyServiceStub(END_POINT);
// Maak een invoerobject voor de getData-bewerking
GetData getDataInput = new GetData();
// Stel het invoerdeel in het getData-invoerobject in
getDataInput.setInput("PANKAJ");
// Roep de getData-bewerking aan
GetDataResponse getDataOutput = stub.getData(getDataInput);
// De methode get_return geeft het uitvoerobject van de webservice terug. Hier is het
// een String, dus we kunnen
// de geretourneerde waarde direct afdrukken
System.out.println("Output:" + getDataOutput.get_return());
// Maak een invoerobject voor de getObjectData-bewerking
GetObjectData getObjectDataInput = new GetObjectData();
MyBean myBean = new MyBean();
myBean.setId(1);
myBean.setName("KUMAR");
// Stel het invoerdeel in het getObjectData-invoerobject in
getObjectDataInput.setMyBean(myBean);
// Roep de getObjectData-bewerking aan
GetObjectDataResponse getObjectDataOutput = stub
.getObjectData(getObjectDataInput);
// Haal het MyBean-object op uit het responsobject
MyBean myBeanOutput = getObjectDataOutput.get_return();
// Druk de waarden van myBeanOutput af om te controleren of de bewerkingen van de webservice
// worden aangeroepen
System.out.println("ID:" + myBeanOutput.getId() + "NAME:"
+ myBeanOutput.getName());
System.out.println("DONE");
}
}
Voer de klasse Axis2ClientUsingStubsFromAnt uit om de webservice aan te roepen. De uitvoer van het bovenstaande programma is:
START
log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
log4j:WARN Please initialize the log4j system properly.
Output:HiPANKAJ
ID:101NAME:Output: KUMAR
DONE
Als je de tutorial handig vindt om Axis2 te begrijpen en ermee aan de slag te gaan, deel dan alsjeblieft je gedachten in de opmerkingensectie. En ja, vergeet niet om het te delen met anderen. Jouw twee klikken en 5 seconden tijd kunnen iemand anders helpen om Axis2 gemakkelijk te leren. 🙂
Source:
https://www.digitalocean.com/community/tutorials/axis2-web-services-tutorial