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;
}