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 2003/07/24 06:13:41 UTC

cvs commit: xml-axis/c/src/wcg Variable.h Variable.cpp TranslationUnit.h TranslationUnit.cpp Method.h Method.cpp

susantha    2003/07/23 21:13:41

  Modified:    c/src/wcg Variable.h Variable.cpp TranslationUnit.h
                        TranslationUnit.cpp Method.h Method.cpp
  Log:
  now WCG can generate wrapper classes for web services that passes and returns complex types as well but not arrays
  
  Revision  Changes    Path
  1.5       +7 -2      xml-axis/c/src/wcg/Variable.h
  
  Index: Variable.h
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/wcg/Variable.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Variable.h	22 Jul 2003 12:58:55 -0000	1.4
  +++ Variable.h	24 Jul 2003 04:13:40 -0000	1.5
  @@ -73,6 +73,8 @@
   #pragma once
   #endif // _MSC_VER > 1000
   
  +#include "File.h"
  +
   #include <string>
   #include <list>
   #include <map>
  @@ -95,7 +97,10 @@
   
   class Variable  
   {
  -public:
  +public:	
  +	static string& GetParamGetMethod(int nType);
  +	int GenerateDeserializerImpl(File& file);
  +	int GenerateSerializerImpl(File& file);
   	string& GetTypeEnumStr();
   	string& GetCorrespondingUnionMemberName();
   	void Reset();
  @@ -111,7 +116,7 @@
   	Variable(Variable& Var);
   	virtual ~Variable();
   private:
  -	string m_sAuxStr;
  +	static string m_sAuxStr;
   	void SetBasicTypeName();
   	int m_Type;
   	string m_TypeName; //if m_Type is user type
  
  
  
  1.5       +53 -0     xml-axis/c/src/wcg/Variable.cpp
  
  Index: Variable.cpp
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/wcg/Variable.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Variable.cpp	22 Jul 2003 12:58:55 -0000	1.4
  +++ Variable.cpp	24 Jul 2003 04:13:40 -0000	1.5
  @@ -73,6 +73,7 @@
   //////////////////////////////////////////////////////////////////////
   // Construction/Destruction
   //////////////////////////////////////////////////////////////////////
  +string Variable::m_sAuxStr="";
   
   Variable::Variable()
   {
  @@ -226,3 +227,55 @@
   //DEL {
   //DEL 	
   //DEL }
  +
  +
  +int Variable::GenerateSerializerImpl(File &file)
  +{
  +	file << "\t"; 
  +	if (IsComplexType())
  +	{
  +		file << m_VarName << "->" << "Serialize(pSZ);";		
  +	}
  +	else
  +	{
  +		file << "pSZ << " << "pSZ.SerializeBasicType(\"" << m_VarName << "\", " << m_VarName << ").c_str();";
  +	}
  +	file << endl;
  +	return 0;
  +}
  +
  +int Variable::GenerateDeserializerImpl(File &file)
  +{
  +	file << "\t";
  +	if (IsComplexType())
  +	{
  +		file << m_VarName << "->" << "DeSerialize(pDZ);"; 	
  +	}
  +	else
  +	{
  +		file << m_VarName << " = pDZ->GetParam()->" << GetParamGetMethod(m_Type).c_str() << "();";
  +	}
  +	file << endl;
  +	return 0;
  +}
  +
  +string& Variable::GetParamGetMethod(int nType)
  +{
  +	//All get methods of Param class should be listed here
  +	switch(nType)
  +	{
  +		case VAR_INT: m_sAuxStr = "GetInt"; break;
  +		case VAR_FLOAT: m_sAuxStr = "GetFloat"; break;
  +		case VAR_STRING: m_sAuxStr = "GetString"; break;
  +		case VAR_LONG: m_sAuxStr = "GetLong"; break;
  +		case VAR_SHORT: m_sAuxStr = "GetShort"; break;
  +		case VAR_CHAR: m_sAuxStr = "GetChar"; break;
  +		case VAR_DOUBLE: m_sAuxStr = "GetDouble"; break;
  +		case VAR_BOOL: m_sAuxStr = "GetBool"; break;
  +		case VAR_UNSIGNEDLONG: m_sAuxStr = "GetUnsignedLong"; break;
  +		case VAR_UNSIGNEDINT: m_sAuxStr = "GetUnsignedInt"; break;
  +		case VAR_UNSIGNEDSHORT: m_sAuxStr = "GetUnsignedShort"; break;
  +		case VAR_UNSIGNED_CHAR: m_sAuxStr = "GetUnsignedChar"; break;
  +	}
  +	return m_sAuxStr;
  +}
  \ No newline at end of file
  
  
  
  1.2       +2 -0      xml-axis/c/src/wcg/TranslationUnit.h
  
  Index: TranslationUnit.h
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/wcg/TranslationUnit.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TranslationUnit.h	18 Jul 2003 13:34:31 -0000	1.1
  +++ TranslationUnit.h	24 Jul 2003 04:13:40 -0000	1.2
  @@ -82,6 +82,7 @@
   class TranslationUnit  
   {
   public:
  +	void SetWsFileName(const char* sFileName);
   	void AddBeanClass(BeanClass* pClass);
   	void SetWSClass(WSClass* pClass);
   	void AddNSDecl(string& sNSDecl);
  @@ -92,6 +93,7 @@
   	TranslationUnit();
   	virtual ~TranslationUnit();
   private:
  +	string m_sWsFileName;
   	list<string> m_includes;
   	list<string> m_nsdecls;
   	WSClass *m_pWSClass; //there can be only one web service class per header file.
  
  
  
  1.2       +19 -2     xml-axis/c/src/wcg/TranslationUnit.cpp
  
  Index: TranslationUnit.cpp
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/wcg/TranslationUnit.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TranslationUnit.cpp	18 Jul 2003 13:34:31 -0000	1.1
  +++ TranslationUnit.cpp	24 Jul 2003 04:13:40 -0000	1.2
  @@ -111,7 +111,12 @@
   		file << "#define " << WCID(m_pWSClass->GetName().c_str()) << endl;
   		file << endl;
   		//add includes
  -		//generate wrapper class declarations for bean classes
  +		file << "#include \"" << m_sWsFileName.c_str() << "\"" << endl;
  +		file << "#include \"../common/WrapperClassHandler.h\"" << endl;
  +		file << "#include \"../common/IMessageData.h\"" << endl;
  +		file << "#include \"../common/GDefine.h\"" << endl;
  +		file << "#include \"../common/IAccessBean.h\"" << endl;
  +		file << endl;
   		//generate wrapper class declaration
   		m_pWSClass->GenerateClassDef(file);
   		file << endl;
  @@ -136,10 +141,17 @@
   		//add includes
   		file << "#include \"../common/ISoapDeserializer.h\"" << endl;
   		file << "#include \"../common/ISoapSerializer.h\"" << endl;
  -		file << "#include \"../common/BasicTypeSerializer.h\"" << endl;
  +		file << "#include \"../common/ISoapMethod.h\"" << endl;
  +		file << "#include \"../common/IParam.h\"" << endl;
  +
   		file << "#include <string>" << endl;
   		file << "using namespace std;" << endl;
   		file << endl;
  +		//generate serializers and deserializers for bean classes
  +		for (list<BeanClass*>::iterator it = m_Beans.begin(); it != m_Beans.end(); it++)
  +		{
  +			(*it)->GenerateSerializerAndDeSerializerImpl(file);
  +		}
   		//generate wrapper class's methods
   		m_pWSClass->GenerateClassImpl(file);
   		//generate IAccessBean implementations for bean classes
  @@ -170,4 +182,9 @@
   void TranslationUnit::AddBeanClass(BeanClass *pClass)
   {
   	m_Beans.push_back(pClass);
  +}
  +
  +void TranslationUnit::SetWsFileName(const char *sFileName)
  +{
  +	m_sWsFileName = sFileName;
   }
  
  
  
  1.4       +0 -1      xml-axis/c/src/wcg/Method.h
  
  Index: Method.h
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/wcg/Method.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Method.h	18 Jul 2003 13:33:07 -0000	1.3
  +++ Method.h	24 Jul 2003 04:13:40 -0000	1.4
  @@ -82,7 +82,6 @@
   class Method  
   {
   public:
  -	string& GetParamGetMethod(int nType);
   	int GenerateMethodImpl(string& sClassName, File& file);
   	string& GetName();
   	int GenerateMethodDef(File &file);
  
  
  
  1.5       +17 -23    xml-axis/c/src/wcg/Method.cpp
  
  Index: Method.cpp
  ===================================================================
  RCS file: /home/cvs/xml-axis/c/src/wcg/Method.cpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Method.cpp	22 Jul 2003 12:58:55 -0000	1.4
  +++ Method.cpp	24 Jul 2003 04:13:40 -0000	1.5
  @@ -71,6 +71,15 @@
   // Construction/Destruction
   //////////////////////////////////////////////////////////////////////
   
  +/*
  +	Features:
  +	Limitations:
  +		1. All basic types are passed/returned to/from web service methods by value.
  +		2. All user types are passed/returned to/from web service methods by reference (pointers)
  +		3. No arrays can be passed or returned from web service methods.
  +		4. 
  +		5.
  +  */
   Method::Method()
   {
   	m_Qualifier=0;
  @@ -130,7 +139,7 @@
   {
   	file << "int " << sClassName << "::" << m_Name << "(IMessageData* mc)" << endl; 	
   	file << "{" << endl;
  -	file << "\tSetResponseMethod(mc, " << m_Name << "\");" << endl;
  +	file << "\tSetResponseMethod(mc, \"" << m_Name << "\");" << endl;
   	int nParam = 0;
   	for (list<Variable*>::iterator it = m_Params.begin(); it != m_Params.end(); it++)
   	{
  @@ -148,13 +157,18 @@
   		}
   		else //basic types
   		{
  -			file << "\t" << (*it)->GetTypeName() << " v" << nParam << " = " << "param" << nParam << "->" << GetParamGetMethod((*it)->GetType()) << "();" << endl;
  +			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() << " ret = pWs->" << m_Name << "(";
  +	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++;
  @@ -177,23 +191,3 @@
   	return 0;
   }
   
  -string& Method::GetParamGetMethod(int nType)
  -{
  -	//All get methods of Param class should be listed here
  -	switch(nType)
  -	{
  -		case VAR_INT: m_AuxStr = "GetInt"; break;
  -		case VAR_FLOAT: m_AuxStr = "GetFloat"; break;
  -		case VAR_STRING: m_AuxStr = "GetString"; break;
  -		case VAR_LONG: m_AuxStr = "GetLong"; break;
  -		case VAR_SHORT: m_AuxStr = "GetShort"; break;
  -		case VAR_CHAR: m_AuxStr = "GetChar"; break;
  -		case VAR_DOUBLE: m_AuxStr = "GetDouble"; break;
  -		case VAR_BOOL: m_AuxStr = "GetBool"; break;
  -		case VAR_UNSIGNEDLONG: m_AuxStr = "GetUnsignedLong"; break;
  -		case VAR_UNSIGNEDINT: m_AuxStr = "GetUnsignedInt"; break;
  -		case VAR_UNSIGNEDSHORT: m_AuxStr = "GetUnsignedShort"; break;
  -		case VAR_UNSIGNED_CHAR: m_AuxStr = "GetUnsignedChar"; break;
  -	}
  -	return m_AuxStr;
  -}