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;