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/03/23 14:25:02 UTC

cvs commit: ws-axis/c/src/wsdd WSDDDeployment.cpp WSDDHandler.cpp WSDDService.cpp WSDDTransport.cpp WSDDTransport.h

susantha    2004/03/23 05:25:02

  Modified:    c/src/wsdd WSDDDeployment.cpp WSDDHandler.cpp
                        WSDDService.cpp WSDDTransport.cpp WSDDTransport.h
  Log:
  Functionality to serialize the WSDD objects to WSDD config file
  
  Revision  Changes    Path
  1.23      +59 -7     ws-axis/c/src/wsdd/WSDDDeployment.cpp
  
  Index: WSDDDeployment.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDDeployment.cpp,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- WSDDDeployment.cpp	23 Mar 2004 05:30:09 -0000	1.22
  +++ WSDDDeployment.cpp	23 Mar 2004 13:25:01 -0000	1.23
  @@ -124,7 +124,6 @@
   			delete ((*iter2).second);
   		}
   	}
  -
   }
   
   void WSDDDeployment::SetLibIdMap(map<AxisString, int>* pLibNameIdMap)
  @@ -146,23 +145,77 @@
   int WSDDDeployment::LoadWSDD(const AxisChar* sWSDD)
   {
   	m_sWSDDPath = string(sWSDD);
  -
   	WSDDDocument* doc = new WSDDDocument();
   	if (AXIS_SUCCESS != doc->GetDeployment(sWSDD, this))
  -
  -
   	{
  +#ifdef _DEBUG
           printf("server.wsdd loading failed\n");
  +#endif
   		return AXIS_FAIL;
   	}
  +#ifdef _DEBUG
       printf("server.wsdd loading successful\n");
  +#endif
   	return AXIS_SUCCESS;
   }
   
   int WSDDDeployment::UpdateWSDD()
   {
  -	/* Do we need this method ? */
  -
  +	FILE* file;
  +	int Status = AXIS_FAIL;
  +	/* TODO we have to rename the existing server.wsdd to server.wsdd.old
  +	 * and if anything went wrong we have to rename it back to server.wsdd
  +	 */
  +	file = fopen(m_sWSDDPath.c_str(), "w");
  +	if(!file) return AXIS_FAIL;
  +	while(true)
  +	{
  +		if (fputs("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", file) < 0) break;
  +		if (fputs("<deployment xmlns=\"http://xml.apache.org/axis/wsdd/\" xmlns:C=\"http://xml.apache.org/axis/wsdd/providers/C\" xmlns:CPP=\"http://xml.apache.org/axis/wsdd/providers/CPP\">\n", file) < 0) break;
  +		if (fputs("\t<globalConfiguration>\n", file) < 0) break;
  +		WSDDHandlerList::iterator iter;
  +		if(m_GlobalRequestHandlers)
  +		{
  +			if (fputs("\t\t<requestFlow>\n", file) < 0) break;
  +			for(iter=m_GlobalRequestHandlers->begin(); iter!=m_GlobalRequestHandlers->end(); iter++)
  +			{
  +				(*iter)->UpdateWSDD(file, 3);
  +			}
  +			if (fputs("\t\t</requestFlow>\n", file) < 0) break;
  +		}
  +
  +		if(m_GlobalResponseHandlers)
  +		{
  +			if (fputs("\t\t<responseFlow>\n", file) < 0) break;
  +			for(iter=m_GlobalResponseHandlers->begin(); iter!=m_GlobalResponseHandlers->end(); iter++)
  +			{
  +				(*iter)->UpdateWSDD(file, 3);
  +			}
  +			if (fputs("\t\t</responseFlow>\n", file) < 0) break;
  +		}
  +
  +		if (fputs("\t</globalConfiguration>\n", file) < 0) break;
  +
  +		if(m_pTransportHandlers)
  +		{
  +			m_pTransportHandlers->UpdateWSDD(file, 3);
  +		}
  +
  +		WSDDServiceMap::iterator iter2;
  +		if(m_DeployedServices)
  +		{
  +			for(iter2=m_DeployedServices->begin(); iter2!=m_DeployedServices->end(); iter2++)
  +			{
  +				((*iter2).second)->UpdateWSDD(file, 3);
  +			}
  +		}
  +		
  +		if (fputs("</deployment>", file) < 0) break;
  +	}
  +	if (AXIS_SUCCESS != Status)
  +	{
  +		/*TODO use the previous server.wsdd file itself. Undo renaming*/
  +	}
   	return AXIS_SUCCESS;
   }
   
  @@ -170,7 +223,6 @@
   const WSDDService* WSDDDeployment::GetService(const AxisChar* sServiceName)
   {
   	WSDDServiceMap::iterator iter;
  -
   	iter = m_DeployedServices->find(sServiceName);
   	if (iter != m_DeployedServices->end())
   	{
  
  
  
  1.10      +26 -0     ws-axis/c/src/wsdd/WSDDHandler.cpp
  
  Index: WSDDHandler.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDHandler.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- WSDDHandler.cpp	25 Oct 2003 08:39:37 -0000	1.9
  +++ WSDDHandler.cpp	23 Mar 2004 13:25:01 -0000	1.10
  @@ -77,6 +77,7 @@
   	m_nScope = AH_REQUEST; //default
   	m_Params = NULL;
   	m_sDescription = "No description provided";
  +	m_file = 0;
   }
   
   WSDDHandler::~WSDDHandler()
  @@ -147,5 +148,30 @@
   	return m_sDescription.c_str();
   }
   
  +int WSDDHandler::UpdateWSDD(FILE* wsddfile, int tabcount)
  +{
  +	m_file = wsddfile;
  +	PrintTabs(tabcount); *this << "<handler name=\"" << m_sName.c_str() << "\" type=\"" << m_sLibName.c_str() << "\">\n";
  +	if (m_Params)
  +	{
  +		map<AxisString, AxisString>::iterator itr;
  +		for (itr = m_Params->begin(); itr != m_Params->end(); itr++)
  +		{
  +			PrintTabs(tabcount+1); *this << "<parameter name=\"" << (*itr).first.c_str() << "\" value=\"" << (*itr).second.c_str() << "\" />";
  +		}
  +	}
  +	PrintTabs(tabcount); *this << "<handler>\n";
  +	m_file = 0;
  +	return AXIS_SUCCESS;
  +}
   
  +WSDDHandler& WSDDHandler::operator << (const char* str)
  +{
  +	fputs(str, m_file);
  +	return *this;
  +}
   
  +void WSDDHandler::PrintTabs(int count)
  +{
  +	for (int x=0; x<count; x++) *this << "\t";
  +}
  \ No newline at end of file
  
  
  
  1.15      +60 -0     ws-axis/c/src/wsdd/WSDDService.cpp
  
  Index: WSDDService.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDService.cpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- WSDDService.cpp	3 Feb 2004 13:04:48 -0000	1.14
  +++ WSDDService.cpp	23 Mar 2004 13:25:01 -0000	1.15
  @@ -200,3 +200,63 @@
   {
   	return m_AllowedMethods;
   }
  +
  +int WSDDService::UpdateWSDD(FILE* wsddfile, int tabcount)
  +{
  +	m_file = wsddfile;
  +	PrintTabs(tabcount); *this << "<service name=\"" << m_sName.c_str() << "\" provider=\"" << GetProviderString() << "\" description=\"" << m_sDescription.c_str() << "\">\n";
  +	if (m_Params)
  +	{
  +		WSDDHandlerList::iterator iter;
  +		if(m_RequestHandlers)
  +		{
  +			*this << "\t\t<requestFlow>\n";
  +			for(iter=m_RequestHandlers->begin(); iter!=m_RequestHandlers->end(); iter++)
  +			{
  +				(*iter)->UpdateWSDD(wsddfile, 3);
  +			}
  +			*this << "\t\t</requestFlow>\n";
  +		}
  +
  +		if(m_ResponseHandlers)
  +		{
  +			*this << "\t\t<responseFlow>\n";
  +			for(iter=m_ResponseHandlers->begin(); iter!=m_ResponseHandlers->end(); iter++)
  +			{
  +				(*iter)->UpdateWSDD(wsddfile, 3);
  +			}
  +			*this << "\t\t</responseFlow>\n";
  +		}
  +		PrintTabs(tabcount+1); *this << "<parameter name=\"allowedMethods\" value=\"";
  +		//for looop
  +		for (list<AxisString>::iterator itrs = m_AllowedMethods.begin(); itrs != m_AllowedMethods.end(); itrs++)
  +		{
  +			*this << (*itrs).c_str() << " ";
  +		}
  +		*this << "\"/>\n"; 
  +		PrintTabs(tabcount+1); *this << "<parameter name=\"className\" value=\"" << m_sLibName.c_str();
  +		*this << "\" />\n"; 
  +		map<AxisString, AxisString>::iterator itr;
  +		for (itr = m_Params->begin(); itr != m_Params->end(); itr++)
  +		{
  +			PrintTabs(tabcount+1); *this << "<parameter name=\"" << (*itr).first.c_str() << "\" value=\"" << (*itr).second.c_str() << "\" />";
  +		}
  +	}
  +	PrintTabs(tabcount); *this << "</service>\n";
  +	m_file = 0;
  +	return AXIS_SUCCESS;
  +}
  +
  +const char* WSDDService::GetProviderString()
  +{
  +	switch(m_Provider)
  +	{
  +	case C_RPC_PROVIDER: return "C:RPC";
  +	case C_DOC_PROVIDER: return "C:DOCUMENT";
  +	case CPP_RPC_PROVIDER: return "CPP:RPC";
  +	case CPP_DOC_PROVIDER: return "CPP:DOCUMENT";
  +	case COM_PROVIDER: return "COM";
  +	default: return "unknown";
  +	}
  +	return 0;
  +}
  \ No newline at end of file
  
  
  
  1.7       +36 -1     ws-axis/c/src/wsdd/WSDDTransport.cpp
  
  Index: WSDDTransport.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDTransport.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- WSDDTransport.cpp	23 Mar 2004 05:30:09 -0000	1.6
  +++ WSDDTransport.cpp	23 Mar 2004 13:25:01 -0000	1.7
  @@ -103,7 +103,6 @@
   			}
   		}
   	}
  -
   }
   
   const WSDDHandlerList* WSDDTransport::GetRequestFlowHandlers(AXIS_PROTOCOL_TYPE Protocol)
  @@ -133,4 +132,40 @@
   		if (!m_ResponseHandlers) m_ResponseHandlers = new map<AXIS_PROTOCOL_TYPE, WSDDHandlerList>;
   		(*m_ResponseHandlers)[protocol].push_back(pHandler);
   	}
  +}
  +
  +int WSDDTransport::UpdateWSDD(FILE* wsddfile, int tabcount)
  +{
  +	WSDDHandlerList::iterator iter2;
  +	const char* trtype = 0;
  +	for (int type = APTHTTP; type < APTOTHER; type++)
  +	{
  +		if(m_RequestHandlers && (m_RequestHandlers->find((AXIS_PROTOCOL_TYPE)type) != m_RequestHandlers->end()))
  +		{
  +			trtype = (APTHTTP == type) ? "http" : ((APTSMTP == type) ? "smtp" : "unsupported");
  +			if (fputs("\t<transport name=\"", wsddfile) < 0) return AXIS_FAIL;
  +			if (fputs(trtype, wsddfile) < 0) return AXIS_FAIL;
  +			if (fputs("\" >\n", wsddfile) < 0) return AXIS_FAIL;
  +			/* Write request flow handler configuration */
  +			WSDDHandlerList &list = (*m_RequestHandlers)[(AXIS_PROTOCOL_TYPE)type];
  +			if (fputs("\t\t<requestFlow>\n", wsddfile) < 0) return AXIS_FAIL;
  +			for(iter2 = list.begin(); iter2 != list.end(); iter2++)
  +			{
  +				if (AXIS_SUCCESS != (*iter2)->UpdateWSDD(wsddfile, tabcount+2)) return AXIS_FAIL;
  +			}			
  +			if (fputs("\t\t</requestFlow>\n", wsddfile) < 0) return AXIS_FAIL;
  +
  +			/* Write response flow handler configuration */
  +			WSDDHandlerList &list1 = (*m_ResponseHandlers)[(AXIS_PROTOCOL_TYPE)type];
  +			if (fputs("\t\t<responseFlow>\n", wsddfile) < 0) return AXIS_FAIL;
  +			for(iter2 = list1.begin(); iter2 != list.end(); iter2++)
  +			{
  +				if (AXIS_SUCCESS != (*iter2)->UpdateWSDD(wsddfile, tabcount+2)) return AXIS_FAIL;
  +			}			
  +			if (fputs("\t\t</responseFlow>\n", wsddfile) < 0) return AXIS_FAIL;
  +			if (fputs("\t</transport>\n", wsddfile) < 0) return AXIS_FAIL;
  +		}
  +
  +	}
  +	return AXIS_SUCCESS;
   }
  
  
  
  1.6       +1 -0      ws-axis/c/src/wsdd/WSDDTransport.h
  
  Index: WSDDTransport.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdd/WSDDTransport.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- WSDDTransport.h	23 Mar 2004 06:23:00 -0000	1.5
  +++ WSDDTransport.h	23 Mar 2004 13:25:01 -0000	1.6
  @@ -81,6 +81,7 @@
   	const WSDDHandlerList* GetRequestFlowHandlers(AXIS_PROTOCOL_TYPE Protocol);
   	WSDDTransport();
   	virtual ~WSDDTransport();
  +	int UpdateWSDD(FILE* wsddfile, int tabcount);
   private:
   	map<AXIS_PROTOCOL_TYPE, WSDDHandlerList>* m_RequestHandlers;
   	map<AXIS_PROTOCOL_TYPE, WSDDHandlerList>* m_ResponseHandlers;