programmera.net -> jax -> normal     för utskrift      info@programmera.net

Programmera serverdelen av Calculator

1. Programmera serverdelen
2. deploy.wsdd
3. Programmingsmiljö
4. CalculatorSoapBindingImpl.java
5. Sjösätt koden
6. Kolla om allt gick vägen

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.