1. Programmera serverdelen
På denna sida ska vi programmera serverdelen av Caclualtor och sjösätta den i Axis.
2. deploy.wsdd
Denna fil finns på
deploy.wsdd . Följande rad pekar ut vilken klass som ska köras:
<parameter name="className" value="net.programmera.www.ws.Calculator.CalculatorSoapBindingImpl"/>
|
Alltså är det "CalculatorSoapBindingImpl.java" vi ska editera för att webbtjänsten ska få önskad funktionalitet.
3. Programmingsmiljö
För att kunna kompilera din kod bör du lägga till följande JAR-filer till din CLASSPATH i din utvecklingsmiljö:
- $AXIS_HOME/lib/axis.jar
- $AXIS_HOME/lib/saaj.jar
- $AXIS_HOME/lib/jaxrpc.jar
4. CalculatorSoapBindingImpl.java
Såhär ser klassen ut:
/**
* CalculatorSoapBindingImpl.java
*
* This file was auto-generated from WSDL
* by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
*/
package net.programmera.www.ws.Calculator;
public class CalculatorSoapBindingImpl implements net.programmera.www.ws.Calculator.CalculatorPortType{
public int multiplication(net.programmera.www.ns.Calculator.MultiplicationRequestType multiplicationRequestPart)
throws java.rmi.RemoteException {
return -3;
}
public float division(net.programmera.www.ns.Calculator.DivisionRequestType divisionRequestPart)
throws java.rmi.RemoteException, net.programmera.www.ns.Calculator.DivideZeroFaultType {
return -3;
}
}
|
Vi uppdaterar klassen så att den beräknar korrekta värden:
package net.programmera.www.ws.Calculator;
import net.programmera.www.ns.Calculator.*;
public class CalculatorSoapBindingImpl implements CalculatorPortType{
public int multiplication(MultiplicationRequestType multiplicationRequestPart)
throws java.rmi.RemoteException {
int result = 0;
int multiplicand = multiplicationRequestPart.getMultiplicand();
int multiplier = multiplicationRequestPart.getMultiplier();
result = multiplicand * multiplier;
return result;
}
public float division(DivisionRequestType divisionRequestPart)
throws java.rmi.RemoteException, DivideZeroFaultType {
float result = 0;
int dividend = divisionRequestPart.getDividend();
int divisor = divisionRequestPart.getDivisor();
if (divisor == 0){
DivideZeroFaultType dzft= new DivideZeroFaultType();
dzft.setOffendingValue(divisor);
dzft.setComment("Division by zero is not possible.");
throw dzft;
}
result = (float) dividend / divisor;
return result;
}
}
|
5. Sjösätt koden
För att Axis ska hitta dina klasser ska du kopiera dem till en Tomcat, enklast är att bara kopiera alla kompilerade klasser till mappen $CATALINA_HOME/webapps/axis/WEB-INF/classes/.
[olle@dev1]$ cd classes/
[olle@dev1]$ cp -r net $CATALINA_HOME/webapps/axis/WEB-INF/classes/
|
Starta Tomcat:
[olle@dev1]$ startup.sh
Using CATALINA_BASE: /opt/tomcat/jakarta-tomcat-5.0.28
Using CATALINA_HOME: /opt/tomcat/jakarta-tomcat-5.0.28
Using CATALINA_TMPDIR: /opt/tomcat/jakarta-tomcat-5.0.28/temp
Using JAVA_HOME: /opt/jdk1.5.0.7/jdk1.5.0_07
|
Utför deploy:
[olle@dev1]$ cd ../src/net/programmera/www/ws/Calculator/
[olle@dev1]$ java -cp $AXIS_CLASSPATH org.apache.axis.client.AdminClient deploy.wsdd
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
Processing file deploy.wsdd
<Admin>Done processing</Admin>
|
6. Kolla om allt gick vägen
Öppna tomcat på http://localhost:8080/axis (eller den sökväg som gäller för dig):
Välj "list", och du ser följande bild:
Klicka nu på "wsdl" för Calculator och du ser följande:
Om det ser ut såhär så är det OK.