You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by su...@apache.org on 2004/04/08 15:23:52 UTC

cvs commit: ws-axis/c/samples/server/simple Calculator.cpp Calculator.h Calculator.wsdl CalculatorService.cpp CalculatorWrapper.cpp CalculatorWrapper.h Makefile.am deploy.wsdd undeploy.wsdd

susantha    2004/04/08 06:23:52

  Modified:    c/samples/server/interoptests/base InteropTestPortType.h
  Added:       c/samples/client/simple CalcClient.cpp Calculator.cpp
                        Calculator.h Makefile.am
               c/samples/server/simple Calculator.cpp Calculator.h
                        Calculator.wsdl CalculatorService.cpp
                        CalculatorWrapper.cpp CalculatorWrapper.h
                        Makefile.am deploy.wsdd undeploy.wsdd
  Log:
  Adding files for Simple Calculator Sample
  
  Revision  Changes    Path
  1.1                  ws-axis/c/samples/client/simple/CalcClient.cpp
  
  Index: CalcClient.cpp
  ===================================================================
  #include "Calculator.h"
  
  void PrintUsage();
  bool IsNumber(const char* p);
  
  int main(int argc, char* argv[])
  {
  	char endpoint[256];
  	const char* server="localhost";
  	const char* port="80";
  	const char* op = 0;
  	const char* p1 = 0;
  	const char* p2 = 0;
  	int i1=0, i2=0;
  
  	if (argc < 6)
  	{
  		PrintUsage();
  	}
  	else
  	{
  		server = argv[1];
  		port = argv[2];
  	}
  	printf("Sending Requests to Server http://%s:%s ........\n\n", server, port);
  	sprintf(endpoint, "http://%s:%s/axis/Calculator", server, port);
  	Calculator ws(endpoint);
  
  	op = argv[3];
  	p1 = argv[4];
  	p2 = argv[5];
  
  	if (!IsNumber(p1))
  	{
  		printf("Invalid value for first <parameter>\n\n");
  		PrintUsage();
  	}
  	if (!IsNumber(p2))
  	{
  		printf("Invalid value for second <parameter>\n\n");
  		PrintUsage();
  	}
  	
  	i1 = atoi(p1);
  	i2 = atoi(p2);
  
  	if (strcmp(op, "add") == 0)
  	{
  		printf("Result : %d\n\n", ws.add(i1, i2));
  	}
  	else 	if (strcmp(op, "sub") == 0)
  	{
  		printf("Result : %d\n\n", ws.sub(i1, i2));		
  	}
  	else 	if (strcmp(op, "mul") == 0)
  	{
  		printf("Result : %d\n\n", ws.mul(i1, i2));		
  	}
  	else 	if (strcmp(op, "div") == 0)
  	{
  		printf("Result : %d\n\n", ws.div(i1, i2));		
  	}
  	else 
  	{
  		printf("Invalid operation %s\n\n", op);
  		PrintUsage();
  	}
  	return 0;
  }
  
  void PrintUsage()
  {
  	printf("Usage :\n Calculator <server> <port> <operation> <parameter> <parameter>\n\n");
  	exit(1);
  }
  
  bool IsNumber(const char* p)
  {
  	for (int x=0; x < strlen(p); x++)
  	{
  		if (!isdigit(p[x])) return false;
  	}
  	return true;
  }
  
  
  1.1                  ws-axis/c/samples/client/simple/Calculator.cpp
  
  Index: Calculator.cpp
  ===================================================================
  /*
   * This is the Client Stub implementation file genarated by WSDL2Ws tool.
   * Calculator.cpp: implemtation for the Calculator.
   *
   */
  
  #include "Calculator.h"
  
  #include <axis/server/AxisWrapperAPI.h>
  
  bool CallBase::bInitialized;
  CallFunctions CallBase::ms_VFtable;
  Calculator::Calculator(const char* pchEndpointUri)
  {
  	m_pCall = new Call();
  	m_pCall->SetProtocol(APTHTTP);
  	m_pCall->SetEndpointURI(pchEndpointUri);
  }
  
  Calculator::~Calculator()
  {
  	delete m_pCall;
  }
  
  
  /*Methods corresponding to the web service methods*/
  
  /*
   * This method wrap the service methodadd
   */
  int Calculator::add(int Value0, int Value1)
  {
  	int Ret;
  	if (AXIS_SUCCESS != m_pCall->Initialize(CPP_RPC_PROVIDER, NORMAL_CHANNEL)) return Ret;
  	m_pCall->SetTransportProperty(SOAPACTION_HEADER , "Calculator#add");
  	m_pCall->SetSOAPVersion(SOAP_VER_1_1);
  	m_pCall->SetOperation("add", "http://localhost/axis/Calculator");
  	m_pCall->AddParameter((void*)&Value0, "in0", XSD_INT);
  	m_pCall->AddParameter((void*)&Value1, "in1", XSD_INT);
  	if (AXIS_SUCCESS == m_pCall->Invoke())
  	{
  		if(AXIS_SUCCESS == m_pCall->CheckMessage("addResponse", "http://localhost/axis/Calculator"))
  		{
  			Ret = m_pCall->GetElementAsInt("addReturn", 0);
  		}
  	}
  	m_pCall->UnInitialize();
  	return Ret;
  }
  
  
  /*
   * This method wrap the service methodsub
   */
  int Calculator::sub(int Value0, int Value1)
  {
  	int Ret;
  	if (AXIS_SUCCESS != m_pCall->Initialize(CPP_RPC_PROVIDER, NORMAL_CHANNEL)) return Ret;
  	m_pCall->SetTransportProperty(SOAPACTION_HEADER , "Calculator#sub");
  	m_pCall->SetSOAPVersion(SOAP_VER_1_1);
  	m_pCall->SetOperation("sub", "http://localhost/axis/Calculator");
  	m_pCall->AddParameter((void*)&Value0, "in0", XSD_INT);
  	m_pCall->AddParameter((void*)&Value1, "in1", XSD_INT);
  	if (AXIS_SUCCESS == m_pCall->Invoke())
  	{
  		if(AXIS_SUCCESS == m_pCall->CheckMessage("subResponse", "http://localhost/axis/Calculator"))
  		{
  			Ret = m_pCall->GetElementAsInt("subReturn", 0);
  		}
  	}
  	m_pCall->UnInitialize();
  	return Ret;
  }
  
  
  /*
   * This method wrap the service methodmul
   */
  int Calculator::mul(int Value0, int Value1)
  {
  	int Ret;
  	if (AXIS_SUCCESS != m_pCall->Initialize(CPP_RPC_PROVIDER, NORMAL_CHANNEL)) return Ret;
  	m_pCall->SetTransportProperty(SOAPACTION_HEADER , "Calculator#mul");
  	m_pCall->SetSOAPVersion(SOAP_VER_1_1);
  	m_pCall->SetOperation("mul", "http://localhost/axis/Calculator");
  	m_pCall->AddParameter((void*)&Value0, "in0", XSD_INT);
  	m_pCall->AddParameter((void*)&Value1, "in1", XSD_INT);
  	if (AXIS_SUCCESS == m_pCall->Invoke())
  	{
  		if(AXIS_SUCCESS == m_pCall->CheckMessage("mulResponse", "http://localhost/axis/Calculator"))
  		{
  			Ret = m_pCall->GetElementAsInt("addReturn", 0);
  		}
  	}
  	m_pCall->UnInitialize();
  	return Ret;
  }
  
  
  /*
   * This method wrap the service methoddiv
   */
  int Calculator::div(int Value0, int Value1)
  {
  	int Ret;
  	if (AXIS_SUCCESS != m_pCall->Initialize(CPP_RPC_PROVIDER, NORMAL_CHANNEL)) return Ret;
  	m_pCall->SetTransportProperty(SOAPACTION_HEADER , "Calculator#div");
  	m_pCall->SetSOAPVersion(SOAP_VER_1_1);
  	m_pCall->SetOperation("div", "http://localhost/axis/Calculator");
  	m_pCall->AddParameter((void*)&Value0, "in0", XSD_INT);
  	m_pCall->AddParameter((void*)&Value1, "in1", XSD_INT);
  	if (AXIS_SUCCESS == m_pCall->Invoke())
  	{
  		if(AXIS_SUCCESS == m_pCall->CheckMessage("divResponse", "http://localhost/axis/Calculator"))
  		{
  			Ret = m_pCall->GetElementAsInt("addReturn", 0);
  		}
  	}
  	m_pCall->UnInitialize();
  	return Ret;
  }
  
  
  
  
  1.1                  ws-axis/c/samples/client/simple/Calculator.h
  
  Index: Calculator.h
  ===================================================================
  /*
   * This is the Client Stub Class genarated by the tool WSDL2Ws
   * Calculator.h: interface for the Calculatorclass.
   *
   */
  #if !defined(__CALCULATOR_CLIENTSTUB_H__INCLUDED_)
  #define __CALCULATOR_CLIENTSTUB_H__INCLUDED_
  
  #include <axis/client/Call.h>
  
  class Calculator 
  {
  private:
  	Call* m_pCall;
  public:
  	Calculator(const char* pchEndpointUri);
  public:
  	virtual ~Calculator();
  public: 
  	int add(int Value0,int Value1);
  	int sub(int Value0,int Value1);
  	int mul(int Value0,int Value1);
  	int div(int Value0,int Value1);
  };
  
  #endif /* !defined(__CALCULATOR_CLIENTSTUB_H__INCLUDED_)*/
  
  
  
  1.1                  ws-axis/c/samples/client/simple/Makefile.am
  
  Index: Makefile.am
  ===================================================================
  bin_PROGRAMS = Calculator
  SUBDIRS =
  AM_CPPFLAGS = $(CPPFLAGS)
  adminclient_SOURCES = Calculator.cpp CalcClient.cpp
  
  adminclient_LDADD   =  $(LDFLAGS)  -L$(AXISCPP_HOME)/bin -laxiscpp_client -lltdl
  INCLUDES = -I$(AXISCPP_HOME)/include
  
  
  
  1.5       +1 -1      ws-axis/c/samples/server/interoptests/base/InteropTestPortType.h
  
  Index: InteropTestPortType.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/samples/server/interoptests/base/InteropTestPortType.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- InteropTestPortType.h	1 Apr 2004 15:10:17 -0000	1.4
  +++ InteropTestPortType.h	8 Apr 2004 13:23:52 -0000	1.5
  @@ -13,7 +13,7 @@
   
   class InteropTestPortType 
   {
  -	public:
  +    public:
   		InteropTestPortType();
   	public:
   		virtual ~InteropTestPortType();
  
  
  
  1.1                  ws-axis/c/samples/server/simple/Calculator.cpp
  
  Index: Calculator.cpp
  ===================================================================
  /*
   *This is the Service implementation CPP file genarated by theWSDL2Ws.
   *		Calculator.cpp: implemtation for the Calculator.
   *
   */
  #include "Calculator.h"
  
  
  Calculator::Calculator()
  {
  }
  
  Calculator::~Calculator()
  {
  }
  
  int Calculator::add(int Value0, int Value1)
  {
  	return Value0+Value1;
  }
  int Calculator::sub(int Value0, int Value1)
  {
  	return Value0-Value1;
  }
  int Calculator::mul(int Value0, int Value1)
  {
  	return Value0*Value1;
  }
  int Calculator::div(int Value0, int Value1)
  {
  	if (Value1 == 0) return -1; /* :)) */
  	return Value0/Value1;
  }
  
  
  
  1.1                  ws-axis/c/samples/server/simple/Calculator.h
  
  Index: Calculator.h
  ===================================================================
  /*
   * This is the Service Class genarated by the tool WSDL2Ws
   * Calculator.h: interface for the Calculatorclass.
   *
   */
  #if !defined(__CALCULATOR_SERVERSKELETON_H__INCLUDED_)
  #define __CALCULATOR_SERVERSKELETON_H__INCLUDED_
  
  #include <axis/server/AxisUserAPI.h>
  
  
  class Calculator 
  {
  	public:
  		Calculator();
  	public:
  		virtual ~Calculator();
  	public: 
  		int add(int Value0,int Value1);
  		int sub(int Value0,int Value1);
  		int mul(int Value0,int Value1);
  		int div(int Value0,int Value1);
  };
  
  #endif /* !defined(__CALCULATOR_SERVERSKELETON_H__INCLUDED_)*/
  
  
  
  1.1                  ws-axis/c/samples/server/simple/Calculator.wsdl
  
  Index: Calculator.wsdl
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <wsdl:definitions targetNamespace="http://localhost/axis/Calculator" 
  xmlns="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:apachesoap="http://xml.apache.org/xml-soap"
  xmlns:impl="http://localhost/axis/Calculator"
  xmlns:intf="http://localhost/axis/Calculator"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:message name="addRequest">
      <wsdl:part name="in0" type="xsd:int"/>
      <wsdl:part name="in1" type="xsd:int"/>
    </wsdl:message>
    <wsdl:message name="addResponse">
      <wsdl:part name="addReturn" type="xsd:int"/>
    </wsdl:message>
    <wsdl:message name="subResponse">
      <wsdl:part name="subReturn" type="xsd:int"/>
    </wsdl:message>
    <wsdl:message name="subRequest">
      <wsdl:part name="in0" type="xsd:int"/>
      <wsdl:part name="in1" type="xsd:int"/>
    </wsdl:message>
    <wsdl:message name="mulRequest">
      <wsdl:part name="in0" type="xsd:int"/>
      <wsdl:part name="in1" type="xsd:int"/>
    </wsdl:message>
    <wsdl:message name="mulResponse">
      <wsdl:part name="addReturn" type="xsd:int"/>
    </wsdl:message>
    <wsdl:message name="divRequest">
      <wsdl:part name="in0" type="xsd:int"/>
      <wsdl:part name="in1" type="xsd:int"/>
    </wsdl:message>
    <wsdl:message name="divResponse">
      <wsdl:part name="addReturn" type="xsd:int"/>
    </wsdl:message>
    <wsdl:portType name="Calculator">
      <wsdl:operation name="add" parameterOrder="in0 in1">
        <wsdl:input message="intf:addRequest" name="addRequest"/>
        <wsdl:output message="intf:addResponse" name="addResponse"/>
      </wsdl:operation>
      <wsdl:operation name="sub" parameterOrder="in0 in1">
        <wsdl:input message="intf:subRequest" name="subRequest"/>
        <wsdl:output message="intf:subResponse" name="subResponse"/>
      </wsdl:operation>
      <wsdl:operation name="mul" parameterOrder="in0 in1">
        <wsdl:input message="intf:mulRequest" name="mulRequest"/>
        <wsdl:output message="intf:mulResponse" name="mulResponse"/>
      </wsdl:operation>
      <wsdl:operation name="div" parameterOrder="in0 in1">
        <wsdl:input message="intf:divRequest" name="divRequest"/>
        <wsdl:output message="intf:divResponse" name="divResponse"/>
      </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="CalculatorSoapBinding" type="intf:Calculator">
      <wsdlsoap:binding style="rpc" 
      transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="add">
        <wsdlsoap:operation soapAction="Calculator#add"/>
        <wsdl:input name="addRequest">
          <wsdlsoap:body 
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:input>
        <wsdl:output name="addResponse">
          <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="sub">
        <wsdlsoap:operation soapAction="Calculator#sub"/>
        <wsdl:input name="subRequest">
          <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:input>
        <wsdl:output name="subResponse">
          <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="mul">
        <wsdlsoap:operation soapAction="Calculator#mul"/>
        <wsdl:input name="mulRequest">
          <wsdlsoap:body 
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:input>
        <wsdl:output name="mulResponse">
          <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="div">
        <wsdlsoap:operation soapAction="Calculator#div"/>
        <wsdl:input name="divRequest">
          <wsdlsoap:body 
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:input>
        <wsdl:output name="divResponse">
          <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
          namespace="http://localhost/axis/Calculator" 
          use="encoded"/>
        </wsdl:output>
      </wsdl:operation>
    </wsdl:binding>  
    <wsdl:service name="Calculator">
      <wsdl:port binding="intf:CalculatorSoapBinding" name="Calculator">
        <wsdlsoap:address location="http://localhost/axis/Calculator"/>
      </wsdl:port>
    </wsdl:service>
  </wsdl:definitions>
  
  
  1.1                  ws-axis/c/samples/server/simple/CalculatorService.cpp
  
  Index: CalculatorService.cpp
  ===================================================================
  /*This file is automatically generated by the Axis C++ Wrapper Class Generator
   *Service file containing the two export functions of the Web service Library*/
  #ifdef WIN32
  #define STORAGE_CLASS_INFO __declspec(dllexport)
  #else
  #define STORAGE_CLASS_INFO 
  #endif
  #include "CalculatorWrapper.h" 
  extern "C" {
  STORAGE_CLASS_INFO
  int GetClassInstance(BasicHandler **inst)
  {
  	*inst = new BasicHandler();
  	WrapperClassHandler* pWCH = new CalculatorWrapper();
  	(*inst)->_functions = 0;
  	if (pWCH)
  	{
  		(*inst)->_object = pWCH;
  		return pWCH->Init();
  	}
  	return AXIS_FAIL;
  }
  STORAGE_CLASS_INFO 
  int DestroyInstance(BasicHandler *inst)
  {
  	if (inst)
  	{
  		WrapperClassHandler* pWCH = reinterpret_cast<WrapperClassHandler*>(inst);
  		pWCH->Fini();
  		delete pWCH;
  		delete inst;
  		return AXIS_SUCCESS;
  	}
  	return AXIS_FAIL;
  }
  }
  
  
  
  1.1                  ws-axis/c/samples/server/simple/CalculatorWrapper.cpp
  
  Index: CalculatorWrapper.cpp
  ===================================================================
  /*
   * This is the Service implementation CPP file genarated by theWSDL2Ws.
   * CalculatorWrapper.cpp: implemtation for the CalculatorWrapper.
   * 
   */
  
  #include "CalculatorWrapper.h"
  
  CalculatorWrapper::CalculatorWrapper()
  {
  	pWs = new Calculator();
  }
  
  CalculatorWrapper::~CalculatorWrapper()
  {
  	delete pWs;
  }
  
  /*implementation of WrapperClassHandler interface*/
  void CalculatorWrapper::OnFault(void *pMsg)
  {
  }
  
  int CalculatorWrapper::Init()
  {
  	return AXIS_SUCCESS;
  }
  
  int CalculatorWrapper::Fini()
  {
  	return AXIS_SUCCESS;
  }
  
  
  /*
   * This method invokes the right service method 
   */
  int CalculatorWrapper::Invoke(void *pMsg)
  {
  	IMessageData* mc = (IMessageData*)pMsg;
  	const AxisChar *method = mc->GetOperationName();
  	if (0 == strcmp(method, "add"))
  		return add(mc);
  	else if (0 == strcmp(method, "sub"))
  		return sub(mc);
  	else if (0 == strcmp(method, "mul"))
  		return mul(mc);
  	else if (0 == strcmp(method, "div"))
  		return div(mc);
  	else return AXIS_FAIL;
  }
  
  
  /*Methods corresponding to the web service methods*/
  
  /*
   * This method wrap the service method 
   */
  int CalculatorWrapper::add(void* pMsg)
  {
  	IMessageData* mc = (IMessageData*)pMsg;
  	int nStatus;
  	IWrapperSoapSerializer *pIWSSZ = NULL;
  	mc->GetSoapSerializer(&pIWSSZ);
  	if (!pIWSSZ) return AXIS_FAIL;
  	IWrapperSoapDeSerializer *pIWSDZ = NULL;
  	mc->GetSoapDeSerializer(&pIWSDZ);
  	if (!pIWSDZ) return AXIS_FAIL;
  	/* check whether we have got correct message */
  	if (AXIS_SUCCESS != pIWSDZ->CheckMessageBody("add", "http://localhost/axis/Calculator")) return AXIS_FAIL;
  	pIWSSZ->CreateSoapMethod("addResponse", "http://localhost/axis/Calculator");
  	int v0 = pIWSDZ->GetElementAsInt("in0",0);
  	int v1 = pIWSDZ->GetElementAsInt("in1",0);
  	if (AXIS_SUCCESS != (nStatus = pIWSDZ->GetStatus())) return nStatus;
  	int ret = pWs->add(v0,v1);
  	return pIWSSZ->AddOutputParam("addReturn", (void*)&ret, XSD_INT);
  }
  
  
  /*
   * This method wrap the service method 
   */
  int CalculatorWrapper::sub(void* pMsg)
  {
  	IMessageData* mc = (IMessageData*)pMsg;
  	int nStatus;
  	IWrapperSoapSerializer *pIWSSZ = NULL;
  	mc->GetSoapSerializer(&pIWSSZ);
  	if (!pIWSSZ) return AXIS_FAIL;
  	IWrapperSoapDeSerializer *pIWSDZ = NULL;
  	mc->GetSoapDeSerializer(&pIWSDZ);
  	if (!pIWSDZ) return AXIS_FAIL;
  	/* check whether we have got correct message */
  	if (AXIS_SUCCESS != pIWSDZ->CheckMessageBody("sub", "http://localhost/axis/Calculator")) return AXIS_FAIL;
  	pIWSSZ->CreateSoapMethod("subResponse", "http://localhost/axis/Calculator");
  	int v0 = pIWSDZ->GetElementAsInt("in0",0);
  	int v1 = pIWSDZ->GetElementAsInt("in1",0);
  	if (AXIS_SUCCESS != (nStatus = pIWSDZ->GetStatus())) return nStatus;
  	int ret = pWs->sub(v0,v1);
  	return pIWSSZ->AddOutputParam("subReturn", (void*)&ret, XSD_INT);
  }
  
  
  /*
   * This method wrap the service method 
   */
  int CalculatorWrapper::mul(void* pMsg)
  {
  	IMessageData* mc = (IMessageData*)pMsg;
  	int nStatus;
  	IWrapperSoapSerializer *pIWSSZ = NULL;
  	mc->GetSoapSerializer(&pIWSSZ);
  	if (!pIWSSZ) return AXIS_FAIL;
  	IWrapperSoapDeSerializer *pIWSDZ = NULL;
  	mc->GetSoapDeSerializer(&pIWSDZ);
  	if (!pIWSDZ) return AXIS_FAIL;
  	/* check whether we have got correct message */
  	if (AXIS_SUCCESS != pIWSDZ->CheckMessageBody("mul", "http://localhost/axis/Calculator")) return AXIS_FAIL;
  	pIWSSZ->CreateSoapMethod("mulResponse", "http://localhost/axis/Calculator");
  	int v0 = pIWSDZ->GetElementAsInt("in0",0);
  	int v1 = pIWSDZ->GetElementAsInt("in1",0);
  	if (AXIS_SUCCESS != (nStatus = pIWSDZ->GetStatus())) return nStatus;
  	int ret = pWs->mul(v0,v1);
  	return pIWSSZ->AddOutputParam("mulReturn", (void*)&ret, XSD_INT);
  }
  
  
  /*
   * This method wrap the service method 
   */
  int CalculatorWrapper::div(void* pMsg)
  {
  	IMessageData* mc = (IMessageData*)pMsg;
  	int nStatus;
  	IWrapperSoapSerializer *pIWSSZ = NULL;
  	mc->GetSoapSerializer(&pIWSSZ);
  	if (!pIWSSZ) return AXIS_FAIL;
  	IWrapperSoapDeSerializer *pIWSDZ = NULL;
  	mc->GetSoapDeSerializer(&pIWSDZ);
  	if (!pIWSDZ) return AXIS_FAIL;
  	/* check whether we have got correct message */
  	if (AXIS_SUCCESS != pIWSDZ->CheckMessageBody("div", "http://localhost/axis/Calculator")) return AXIS_FAIL;
  	pIWSSZ->CreateSoapMethod("divResponse", "http://localhost/axis/Calculator");
  	int v0 = pIWSDZ->GetElementAsInt("in0",0);
  	int v1 = pIWSDZ->GetElementAsInt("in1",0);
  	if (AXIS_SUCCESS != (nStatus = pIWSDZ->GetStatus())) return nStatus;
  	int ret = pWs->div(v0,v1);
  	return pIWSSZ->AddOutputParam("divReturn", (void*)&ret, XSD_INT);
  }
  
  
  
  
  1.1                  ws-axis/c/samples/server/simple/CalculatorWrapper.h
  
  Index: CalculatorWrapper.h
  ===================================================================
  /*
   * This is the Service Class genarated by the tool WSDL2Ws
   *		CalculatorWrapper.h: interface for the CalculatorWrapperclass.
   *
   */
  #if !defined(__CALCULATORWRAPPER_SERVERWRAPPER_H__INCLUDED_)
  #define __CALCULATORWRAPPER_SERVERWRAPPER_H__INCLUDED_
  
  #include "Calculator.h"
  #include <axis/server/WrapperClassHandler.h>
  #include <axis/server/IMessageData.h>
  #include <axis/server/GDefine.h>
  #include <axis/server/AxisWrapperAPI.h>
  
  class CalculatorWrapper : public WrapperClassHandler
  {
  private:/* Actual web service object*/
  	Calculator *pWs;
  public:
  	CalculatorWrapper();
  public:
  	virtual ~CalculatorWrapper();
  public:/*implementation of WrapperClassHandler interface*/
  	int AXISCALL Invoke(void* pMsg);
  	void AXISCALL OnFault(void* pMsg);
  	int AXISCALL Init();
  	int AXISCALL Fini();
  	AXIS_BINDING_STYLE AXISCALL GetBindingStyle(){return RPC_ENCODED;};
  private:/*Methods corresponding to the web service methods*/
  	int add(void* pMsg);
  	int sub(void* pMsg);
  	int mul(void* pMsg);
  	int div(void* pMsg);
  };
  
  #endif /* !defined(__CALCULATORWRAPPER_SERVERWRAPPER_H__INCLUDED_)*/
  
  
  
  1.1                  ws-axis/c/samples/server/simple/Makefile.am
  
  Index: Makefile.am
  ===================================================================
  lib_LTLIBRARIES = libCalculator.la
  SUBDIRS =
  libAdminService_la_SOURCES = Calculator.cpp CalculatorWrapper.cpp CalculatorService.cpp
  libAdminService_la_LIBADD   = $(LDFLAGS)
  
  INCLUDES = -I$(AXISCPP_HOME)/include
  
  
  
  1.1                  ws-axis/c/samples/server/simple/deploy.wsdd
  
  Index: deploy.wsdd
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:CPP="http://xml.apache.org/axis/wsdd/providers/CPP">
  	<service name="Calculator" provider="CPP:RPC" description="Simple Calculator Axis C++ web service">
  		<parameter name="className" value="/user/local/apache/axis/CalculatorService.so"/>
  		<parameter name="allowedMethods" value="add sub mul div "/>
  	</service>
  </deployment>
  
  
  
  1.1                  ws-axis/c/samples/server/simple/undeploy.wsdd
  
  Index: undeploy.wsdd
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <undeployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:CPP="http://xml.apache.org/axis/wsdd/providers/CPP">
  	<service name="Calculator"/>
  </undeployment>