diff options
Diffstat (limited to 'wsdl2c/wsdl2c.c')
-rwxr-xr-x | wsdl2c/wsdl2c.c | 71 |
1 files changed, 65 insertions, 6 deletions
diff --git a/wsdl2c/wsdl2c.c b/wsdl2c/wsdl2c.c index 5b744e7..4626d67 100755 --- a/wsdl2c/wsdl2c.c +++ b/wsdl2c/wsdl2c.c @@ -1,5 +1,5 @@ /****************************************************************** - * $Id: wsdl2c.c,v 1.5 2004/06/03 08:53:34 snowdrop Exp $ + * $Id: wsdl2c.c,v 1.6 2004/06/03 13:13:47 snowdrop Exp $ * * CSOAP Project: A SOAP client/server library in C * Copyright (C) 2003 Ferhat Ayaz @@ -28,6 +28,48 @@ #include <xsd2c/obj.h> /* formatter sax serializer */ #include <string.h> +#define _DESERIALIZER_DISABLE_ +#include "CallList.h" + +/* ------------- Just for test --------------------------------- */ + +int Writer_Tab = 0; +int Writer_Ret = 0; + +void Writer_StartElement(const char* element_name, int attr_count, char **keys, char **values, void* userData) +{ + int i, j; + if (Writer_Ret) printf("\n"); + for (j=0;j<Writer_Tab;j++) printf("\t"); + printf("<%s", element_name); + for (i=0;i<attr_count;i++) + { + printf(" %s = \"%s\"", keys[i], values[i]); + } + printf(">"); + Writer_Tab++; + Writer_Ret = 1; +} + +void Writer_Characters(const char* element_name, const char* chars, void* userData) +{ + printf("%s", chars!=NULL?chars:"null"); +} + +void Writer_EndElement(const char* element_name, void* userData) +{ + int j; + Writer_Tab--; + if (!Writer_Ret) + for (j=0;j<Writer_Tab;j++) printf("\t"); + printf("</%s>\n", element_name); + Writer_Ret = 0; +} + +/* ------------------------------------------------------------- */ + +struct CallList* callList = NULL; + xmlXPathObjectPtr xpath_eval(xmlDocPtr doc, const char *xpath) { xmlXPathContextPtr context; @@ -192,13 +234,13 @@ xmlNodePtr findSubNode(xmlNodePtr root, const char *element_name) } -void handleInputParameters(xmlDocPtr doc, const char *name) +void handleInputParameters(xmlDocPtr doc, const char *name, struct CallFunc *func) { char ns[10]; char message_name[255]; xmlNodePtr node; xmlNodePtr cur; - + struct CallVar *var; xmlChar *var_name, *var_type; parseNS(name, ns, message_name); /* check why to pase ns? */ @@ -243,6 +285,10 @@ void handleInputParameters(xmlDocPtr doc, const char *name) continue; } + var = CallVar_Create(); + CallVar_Set_name(var, (const char*)var_name); + CallVar_Set_type(var, (const char*)var_type); + CallFunc_Add_in(func, var); fprintf(stdout, "\t\t(%s,%s)\n", trXSD2C((const char*)var_type), (const char*)var_name); @@ -262,7 +308,7 @@ void handlePortType(xmlDocPtr doc, const char *name) xmlNodePtr cur; xmlChar *attr_name; xmlChar *message; - + struct CallFunc *func; char opname[255]; node = findPortType(doc, name); @@ -292,6 +338,11 @@ void handlePortType(xmlDocPtr doc, const char *name) strcpy(opname, (const char*)attr_name); xmlFree(attr_name); + + func = CallFunc_Create(); + CallList_Add_operation(callList, func); + + CallFunc_Set_name(func, opname); fprintf(stdout, "Operation -> '%s'\n", opname); /* handle input */ @@ -311,7 +362,7 @@ void handlePortType(xmlDocPtr doc, const char *name) fprintf(stdout, "\tinput = '%s'\n", (const char*)message); - handleInputParameters(doc, (const char*)message); + handleInputParameters(doc, (const char*)message, func); xmlFree(message); @@ -515,7 +566,7 @@ int main(int argc, char *argv[]) if (!xsdInitObjModule(xsdRoot)) return 1; - + if (xsdEngineRun(xsdRoot, outDir)) { @@ -523,8 +574,16 @@ int main(int argc, char *argv[]) return 1; } + callList = CallList_Create(); wsdlParse(doc); + CallList_Sax_Serialize(callList, "CallList", + Writer_StartElement, + Writer_Characters, + Writer_EndElement, 0); + + CallList_Free(callList); + trFreeModule(); objFreeModule(); |