in graveyard/src/wcg/Method.cpp [98:187]
int Method::GenerateMethodImpl(string& sClassName, File &file)
{
file << "int " << sClassName << "::" << m_Name << "(IMessageData* mc)"
<< endl;
file << "{" << endl;
file << "\tIWrapperSoapSerializer* pIWSSZ = NULL;" << endl;
file << "\tmc->getSoapSerializer(&pIWSSZ);" << endl;
file << "\tif (!pIWSSZ) return AXIS_FAIL;" << endl;
file << "\tIWrapperSoapDeSerializer* pIWSDZ = NULL;" << endl;
file << "\tmc->getSoapDeSerializer(&pIWSDZ);" << endl;
file << "\tif (!pIWSDZ) return AXIS_FAIL;" << endl;
file << "\tSetResponseMethod(mc, \"" << m_Name << "Response\");" << endl;
int nParam = 0;
for (list<Variable*>::iterator it = m_Params.begin();
it != m_Params.end(); it++)
{
file << endl;
file << "\tIParam *param" << nParam << " = pIWSDZ->GetParam();"
<< endl;
if ((*it)->IsComplexType())
{
file << "\t" << (*it)->GetTypeName() << "* v" << nParam <<
" = new " << (*it)->GetTypeName() << "();" << endl;
file << "\tparam" << nParam << "->" << "SetUserType(" << "v"
<< nParam <<
", (AXIS_DESERIALIZE_FUNCT)Axis_DeSerialize_" <<
(*it)->GetTypeName() <<
", (AXIS_OBJECT_DELETE_FUNCT)Axis_Delete_" <<
(*it)->GetTypeName() << ");" << endl;
file << "\tpIWSDZ->Deserialize(param" << nParam << ",0);"
<< endl; /* 0 should be changed to 1 if multiref to be used */
}
else if ((*it)->IsArrayType())
{
}
else /* basic types */
{
file << "\t" << (*it)->GetTypeName() << " v" << nParam << " = " <<
"param" << nParam << "->" <<
Variable::GetParamGetMethod((*it)->GetType()) << "();" << endl;
}
nParam++;
}
file << endl;
file << "\t//Call actual web service method with appropriate parameters"
<< endl;
file << "\t" << m_pReturnType->GetTypeName();
if (m_pReturnType->IsComplexType())
{
file << "*";
/* this is because of the convention that all user types return by
* reference (pointer)
*/
}
file << " ret = pWs->" << m_Name << "(";
for (int n=0; n<nParam;)
{
file << "v" << n++;
if (n<nParam) file << ", ";
}
file << ");" << endl;
file << endl;
if (m_pReturnType->IsComplexType())
{
file << "\tIParam* pRetParam = pIWSSZ->AddOutputParam(ret,\
(void*)Axis_Serialize_" <<
m_pReturnType->GetTypeName() << ",\
(void*)Axis_Delete_" << m_pReturnType->GetTypeName()
<< ");" << endl;
}
else
{
file << "\tuParamValue value;" << endl;
file << "\tvalue." << m_pReturnType->GetCorrespondingUnionMemberName()
<< " = ret";
if (m_pReturnType->GetType() == VAR_STRING)
{
file << ".c_str()";
}
file << ";" << endl;
file << "\tIParam* pRetParam = pIWSSZ->AddOutputParam(" <<
m_pReturnType->GetTypeEnumStr() << ", value);" << endl;
}
file << "\tpRetParam->SetName(\"" << m_Name << "Return\");" << endl;
file << "\treturn AXIS_SUCCESS;" << endl;
file << "}" << endl;
file << endl;
return 0;
}