susantha    2003/07/21 07:12:28

  Modified:    c/src/server/samples/webservicewrapper WebServiceWrapper.cpp
  Log:
  Introduced Interfaces to AccessBean, ArrayBean and Param classes for
  1. Making wrapper class API simple
  2. Avoid code duplication in Webservice DLLs (Web service DLLs having its own copy 
of linked code)
  
  Revision  Changes    Path
  1.4       +45 -107   
xml-axis/c/src/server/samples/webservicewrapper/WebServiceWrapper.cpp
  
  Index: WebServiceWrapper.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/c/src/server/samples/webservicewrapper/WebServiceWrapper.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- WebServiceWrapper.cpp     16 Jul 2003 14:30:51 -0000      1.3
  +++ WebServiceWrapper.cpp     21 Jul 2003 14:12:28 -0000      1.4
  @@ -82,7 +82,7 @@
   {
        delete pWs;
   }
  -// Implementation of WrapperClassHandler interface.
  +// Implementation of WrapperClassHandler interfaces.
   int webservicewrapper::Invoke(IMessageData* mc)
   {
        string method = mc->getSoapDeserializer()->GetMethodName();     
  @@ -124,29 +124,32 @@
   int webservicewrapper::Echo(IMessageData* mc)
   {
        SetResponseMethod(mc, "Echo");
  -     Param *param1 = mc->getSoapDeserializer()->GetParam();
  +     IParam *param1 = mc->getSoapDeserializer()->GetParam();
        //We know that parameter 1 should be an string
        string str = param1->GetString();
        //Call actual web service method with appropriate parameters
        string strRet = pWs->Echo(str);
  -     Param ret(strRet);
  -     ret.m_sName = "EchoReturn";
  -     mc->getSoapSerializer()->setResponseParam(&ret);
  +     uParamValue value;
  +     value.pStrValue = &strRet;
  +     IParam* pRetParam = mc->getSoapSerializer()->setResponseParam(XSD_STRING, 
value);
  +     pRetParam->SetName("EchoReturn");
        return SUCCESS;
   }
   
   int webservicewrapper::Add(IMessageData* mc)
   {
        SetResponseMethod(mc, "Add");
  -     Param *param1 = mc->getSoapDeserializer()->GetParam();
  -     Param *param2 = mc->getSoapDeserializer()->GetParam();
  +     IParam *param1 = mc->getSoapDeserializer()->GetParam();
  +     IParam *param2 = mc->getSoapDeserializer()->GetParam();
        //Convert parameters to actual types
        int i1 = param1->GetInt();
        int i2 = param2->GetInt();
        //Call actual web service method with appropriate parameters
  -     Param ret(pWs->Add(i1, i2));
  -     ret.m_sName = "AddReturn";
  -     mc->getSoapSerializer()->setResponseParam(&ret);
  +     int ret = pWs->Add(i1, i2);
  +     uParamValue value;
  +     value.nValue = ret;
  +     IParam* pRetParam = mc->getSoapSerializer()->setResponseParam(XSD_INT, value);
  +     pRetParam->SetName("AddReturn");
        return SUCCESS; 
   }
   
  @@ -156,69 +159,26 @@
   
   int webservicewrapper::EchoIntArray(IMessageData *mc)
   {
  -/*
        SetResponseMethod(mc, "EchoIntArray");
  -     Param *param1 = mc->getSoapDeserializer()->GetParam();
  -     int size = param1->m_Value.a->s;
  +     IParam *param1 = mc->getSoapDeserializer()->GetParam();
  +     int size = param1->GetArraySize(); //gets full array size 
        int * arr = new int[size];
  -     ArrayBean* Input = new ArrayBean();
  -     Input->t = XSD_INT;
  -     Input->s = size;
  -     Input->v.so = arr;
  -     Input->DeSerialize(mc->getSoapDeserializer());
  -     delete Input;
  +     param1->SetArrayElements((void*)arr);
  +     mc->getSoapDeserializer()->Deserialize(param1,0);
   
        int retarrsize = 0;
        int * retarr;
  -     Param ret;
        
        retarr = pWs->EchoIntArray(size,arr,&retarrsize);
        delete [] arr;
   
  -     ret.m_Type = XSD_ARRAY;
  -     //Create a new array object and initialize it with the properties
  -     //of the array returned
  -     ArrayBean * arrbean = new ArrayBean();
  -     arrbean->t=XSD_INT;
  -     arrbean->m_ItemName = "Item";
  -     arrbean->s=retarrsize;
  -     arrbean->v.so= retarr;
  -     ret.m_Value.a = arrbean;
  -     ret.m_sName = "EchoIntArrayReturn";     
  -     mc->getSoapSerializer()->setResponseParam(&ret);
  -     return SUCCESS; 
  -*/
  -/*
  -     int retarrsize = 0;
  -     int * retarr;
  -     Param ret;
  -
  -     SetResponseMethod(mc, "EchoIntArray");
  -     Param *param1 = mc->getSoapDeserializer()->GetParam();
  -     //The wrapper generator knows the parameter passed to the
  -     //webservice method is an int array
  -     int size = param1->m_Value.a->s;
  -     //The wrapper generator knows the type of the array is int
  -     int * arr = new int[size];
  -     for(int i=0;i<size;i++)
  -     {
  -             arr[i] = mc->getSoapDeserializer()->GetParam()->GetInt();
  -     }
  -
  -     retarr = pWs->EchoIntArray(size,arr,&retarrsize);
  -
  -     ret.m_Type = XSD_ARRAY;
  -     //Create a new array object and initialize it with the properties
  -     //of the array returned
  -     ArrayBean * arrbean = new ArrayBean();
  -     arrbean->t=XSD_INT;
  -     arrbean->m_ItemName = "Item";
  -     arrbean->s=retarrsize;
  -     arrbean->v.so= retarr;
  -     ret.m_Value.a = arrbean;
  -     ret.m_sName = "EchoIntArrayReturn";     
  -     mc->getSoapSerializer()->setResponseParam(ret);
  -*/
  +     IArrayBean* pAb = mc->getSoapSerializer()->makeArrayBean(XSD_INT, 
(void*)retarr);
  +     pAb->AddDimension(retarrsize);
  +     pAb->SetItemName("item");
  +     uParamValue value;
  +     value.pIArray = pAb;
  +     IParam* pRetParam = mc->getSoapSerializer()->setResponseParam(XSD_ARRAY, 
value);
  +     pRetParam->SetName("EchoIntArrayReturn");
        return SUCCESS; 
   }
   
  @@ -226,66 +186,44 @@
   {
        SetResponseMethod(mc, "AddPoint");
   
  -     Param *param1 = mc->getSoapDeserializer()->GetParam();
  +     IParam *param1 = mc->getSoapDeserializer()->GetParam();
        Point* p1 = new Point();
  -     param1->m_Value.o = p1;
  -     param1->m_Type = USER_TYPE;
  +     param1->SetUserType(p1);
        mc->getSoapDeserializer()->Deserialize(param1,0);
        
  -     Param *param2 = mc->getSoapDeserializer()->GetParam();
  +     IParam *param2 = mc->getSoapDeserializer()->GetParam();
        Point* p2 = new Point();
  -     param2->m_Value.o = p2;
  -     param2->m_Type = USER_TYPE;
  +     param2->SetUserType(p2);
        mc->getSoapDeserializer()->Deserialize(param2,0);
        
        Point* pRet = pWs->AddPoint(p1, p2);
   
  -     Param ret;
  -     ret.m_Type = USER_TYPE;
  -     ret.m_Value.o = pRet;
  -     mc->getSoapSerializer()->setResponseParam(&ret);
  -     ret.m_Value.o = NULL;
  +     uParamValue value;
  +     value.pIBean = pRet;
  +     IParam* pRetParam = mc->getSoapSerializer()->setResponseParam(USER_TYPE, 
value);
  +     pRetParam->SetName("EchoIntArrayReturn");
        return SUCCESS;
   }
   
   int webservicewrapper::EchoPointArray(IMessageData *mc)
   {
  -/*   SetResponseMethod(mc, "EchoPointArray");
  -     Param *param1 = mc->getSoapDeserializer()->GetParam();
  -     int size = param1->m_Value.a->s;
  +     SetResponseMethod(mc, "EchoPointArray");
  +     IParam *param1 = mc->getSoapDeserializer()->GetParam();
  +     int size = param1->GetArraySize(); //gets full array size 
        Point* arr = new Point[size];
  -     AccessBean** pArr = new AccessBean*[size]; 
  -     for (int i=0; i<size; i++)
  -     {
  -             pArr[i] = &arr[i];
  -     }
  -     param1->m_Value.a->t = USER_TYPE;
  -     param1->m_Value.a->v.co = pArr;
  +     param1->SetArrayElements((void*)arr);
        mc->getSoapDeserializer()->Deserialize(param1,0);
  -
  +     
        Point* pRet = pWs->EchoPointArray(size, arr,&size);
  +     //delete [] arr;
   
  -     AccessBean** pOArr = new AccessBean*[size];
  -     for (int ix=0;ix<size;ix++)
  -     {
  -             pOArr[ix] = &pRet[ix];
  -     }
  -
  -     ArrayBean * arrbean = new ArrayBean();
  -     arrbean->t = USER_TYPE;
  -     arrbean->m_ItemName = "Point";
  -     arrbean->m_TypeName = "Point";
  -     arrbean->m_URI = "http://www.opensource.lk/Axis/";;
  -     arrbean->s = size;
  -     arrbean->v.co = pOArr;
  -
  -     Param ret;
  -     ret.m_Type = XSD_ARRAY;
  -     ret.m_Value.a = arrbean;
  -     ret.m_sName = "EchoIntArrayReturn";     
  -     mc->getSoapSerializer()->setResponseParam(&ret);
  -     ret.m_Value.a = NULL;
  -*/
  +     IArrayBean* pAb = mc->getSoapSerializer()->makeArrayBean(USER_TYPE, 
(void*)pRet);
  +     pAb->AddDimension(size);
  +     pAb->SetItemName("item");
  +     uParamValue value;
  +     value.pIArray = pAb;
  +     IParam* pRetParam = mc->getSoapSerializer()->setResponseParam(XSD_ARRAY, 
value);
  +     pRetParam->SetName("EchoPointArrayReturn");
        return SUCCESS; 
   }
   
  
  
  

Reply via email to