summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac1
-rwxr-xr-xwsdl2c/Makefile.am9
-rwxr-xr-xwsdl2c/wsdl2c.c25
-rwxr-xr-xxsd2c/Makefile.am2
-rw-r--r--xsd2c/formatter.h4
-rw-r--r--xsd2c/obj.c4
-rw-r--r--xsd2c/obj.h4
-rw-r--r--xsd2c/util.h4
-rw-r--r--xsd2c/xsd2c.c164
10 files changed, 41 insertions, 178 deletions
diff --git a/Makefile.am b/Makefile.am
index dbdfbf9..3751011 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
## top directory
#Build in these directories:
-SUBDIRS= $(GENERIC_LIBRARY_NAME) $(NANOHTTP_LIBRARY_NAME) examples xsd2c
+SUBDIRS= $(GENERIC_LIBRARY_NAME) $(NANOHTTP_LIBRARY_NAME) xsd2c wsdl2c examples
#Distribute these directories:
DIST_SUBDIRS = $(GENERIC_LIBRARY_NAME)
diff --git a/configure.ac b/configure.ac
index ca3538d..c9823c6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -240,6 +240,7 @@ AC_OUTPUT(Makefile
libcsoap/Makefile
nanohttp/Makefile
xsd2c/Makefile
+wsdl2c/Makefile
examples/Makefile
examples/nanohttp/Makefile
examples/csoap/Makefile
diff --git a/wsdl2c/Makefile.am b/wsdl2c/Makefile.am
index 4feb2c3..e045020 100755
--- a/wsdl2c/Makefile.am
+++ b/wsdl2c/Makefile.am
@@ -2,7 +2,14 @@ bin_PROGRAMS=wsdl2c
INCLUDES=$(LIBXML_CFLAGS) -I$(top_srcdir)
LDFLAGS=$(LIBXML_LIBS)
+
+xsd2c_root= $(top_srcdir)/xsd2c
+xsd2c_objs=../xsd2c/util.o \
+../xsd2c/formatter.o \
+../xsd2c/obj.o \
+../xsd2c/xsd2c.o \
+../xsd2c/tr.o
wsdl2c_SOURCES=wsdl2c.c
-wsdl2c_LDFLAGS=$(LDFLAGS)
+wsdl2c_LDFLAGS=$(LDFLAGS) $(xsd2c_objs)
diff --git a/wsdl2c/wsdl2c.c b/wsdl2c/wsdl2c.c
index 67395af..85daa23 100755
--- a/wsdl2c/wsdl2c.c
+++ b/wsdl2c/wsdl2c.c
@@ -1,29 +1,8 @@
#include <libxml/xpath.h>
+#include <xsd2c/xsd2c.h>
+#include <xsd2c/util.h> /* parseNS */
-int parseNS(const char* fullname, char *ns, char *name)
-{
- int len, i, found;
-
- if (fullname == NULL || ns == NULL || name == NULL) return 0;
-
- len = strlen(fullname);
-
- found = 0;
- for (i = len - 1; i > 0; i--)
- {
- if (fullname[i] == ':') { found = 1; break; }
- }
-
- if (found) strncpy(ns, fullname, i);
- else ns[0] = '\0';
-
- strcpy(name,
- (fullname[i] == ':')?
- (&fullname[i+1]):(&fullname[i]));
-
- return 1;
-}
xmlXPathObjectPtr xpath_eval(xmlDocPtr doc, const char *xpath)
{
diff --git a/xsd2c/Makefile.am b/xsd2c/Makefile.am
index fbcdec0..1475ad0 100755
--- a/xsd2c/Makefile.am
+++ b/xsd2c/Makefile.am
@@ -3,6 +3,6 @@ bin_PROGRAMS=xsd2c
INCLUDES=$(LIBXML_CFLAGS)
LDFLAGS=$(LIBXML_LIBS)
-xsd2c_SOURCES=tr.c util.c obj.c formatter.c xsd2c.c
+xsd2c_SOURCES=tr.c util.c obj.c formatter.c xsd2c.c main.c
xsd2c_LDFLAGS=$(LDFLAGS)
diff --git a/xsd2c/formatter.h b/xsd2c/formatter.h
index 3833c96..629c061 100644
--- a/xsd2c/formatter.h
+++ b/xsd2c/formatter.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: formatter.h,v 1.1 2004/06/02 11:17:03 snowdrop Exp $
+ * $Id: formatter.h,v 1.2 2004/06/02 14:57:23 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
- * Email: ayaz@jprogrammet.net
+ * Email: ayaz@jprogrammer.net
******************************************************************/
#ifndef XSD2C_FORMATTER_H
#define XSD2C_FORMATTER_H
diff --git a/xsd2c/obj.c b/xsd2c/obj.c
index 58598de..804cf4f 100644
--- a/xsd2c/obj.c
+++ b/xsd2c/obj.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: obj.c,v 1.1 2004/06/02 11:17:03 snowdrop Exp $
+ * $Id: obj.c,v 1.2 2004/06/02 14:57:23 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
- * Email: ayaz@jprogrammet.net
+ * Email: ayaz@jprogrammer.net
******************************************************************/
#include "obj.h"
#include "tr.h"
diff --git a/xsd2c/obj.h b/xsd2c/obj.h
index 6f1b753..a51fb17 100644
--- a/xsd2c/obj.h
+++ b/xsd2c/obj.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: obj.h,v 1.1 2004/06/02 11:17:03 snowdrop Exp $
+ * $Id: obj.h,v 1.2 2004/06/02 14:57:23 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
- * Email: ayaz@jprogrammet.net
+ * Email: ayaz@jprogrammer.net
******************************************************************/
#ifndef XSD2C_OBJ_H
#define XSD2C_OBJ_H
diff --git a/xsd2c/util.h b/xsd2c/util.h
index 7f7ef09..7a1bc24 100644
--- a/xsd2c/util.h
+++ b/xsd2c/util.h
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: util.h,v 1.1 2004/06/02 11:17:03 snowdrop Exp $
+ * $Id: util.h,v 1.2 2004/06/02 14:57:23 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -19,7 +19,7 @@
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
- * Email: ayaz@jprogrammet.net
+ * Email: ayaz@jprogrammer.net
******************************************************************/
#ifndef XSD2C_UTIL_H
#define XSD2C_UTIL_H
diff --git a/xsd2c/xsd2c.c b/xsd2c/xsd2c.c
index 973dbfa..37b3497 100644
--- a/xsd2c/xsd2c.c
+++ b/xsd2c/xsd2c.c
@@ -1,5 +1,5 @@
/******************************************************************
- * $Id: xsd2c.c,v 1.1 2004/06/02 11:17:03 snowdrop Exp $
+ * $Id: xsd2c.c,v 1.2 2004/06/02 14:57:23 snowdrop Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -27,102 +27,17 @@
#include <stdio.h>
+#include <string.h>
#include "obj.h"
#include "tr.h"
#include "formatter.h"
+#include "xsd2c.h"
+#include <sys/stat.h>
#define NODE_NAME_EQUALS(xmlnode, text) \
(!xmlStrcmp(xmlnode->name, (const xmlChar *)text))
-
-#define XSD_ALL_STR "all"
-#define XSD_ANNOTATION_STR "annotation"
-#define XSD_ANY_STR ""
-#define XSD_ANY_ATTRIBUTE_STR "any"
-#define XSD_APPINFO_STR "appInfo"
-#define XSD_ATTRIBUTE_STR "attribute"
-#define XSD_ATTRIBUTE_GROUP_STR "attributeGroup"
-#define XSD_CHOICE_STR "choice"
-#define XSD_COMPLEX_TYPE_STR "complexType"
-#define XSD_COMPLEX_CONTENT_STR "complexContent"
-#define XSD_DOCUMENTATION_STR "documentation"
-#define XSD_ELEMENT_STR "element"
-#define XSD_EXTENSION_STR "extension"
-#define XSD_FIELD_STR "field"
-#define XSD_GROUP_STR "group"
-#define XSD_IMPORT_STR "import"
-#define XSD_INCLUDE_STR "include"
-#define XSD_KEY_STR "key"
-#define XSD_KEYREF_STR "keyref"
-#define XSD_LIST_STR "list"
-#define XSD_NOTATION_STR "notation"
-#define XSD_REDEFINE_STR "redefine"
-#define XSD_RESTRICTION_STR "restriction"
-#define XSD_SCHEMA_STR "schema"
-#define XSD_SELECTOR_STR "selector"
-#define XSD_SEQUENCE_STR "sequence"
-#define XSD_SIMPLE_CONTENT_STR "simpleContent"
-#define XSD_SIMPLE_TYPE_STR "simpleType"
-#define XSD_UNION_STR "union"
-#define XSD_UNIQUE_STR "unique"
-
-#define ATTR_TYPE_STR "type"
-#define ATTR_NAME_STR "name"
-#define ATTR_BASE_STR "base"
-#define ATTR_MIN_OCCURS_STR "minOccurs"
-#define ATTR_MAX_OCCURS_STR "maxOccurs"
-
-#define ATTR_VALUE_UNBOUNDED "unbounded"
-
-enum _xsdAttr
-{
- ATTR_UNKNOWN,
- ATTR_TYPE,
- ATTR_NAME,
- ATTR_BASE,
- ATTR_MIN_OCCURS,
- ATTR_MAX_OCCURS
-};
-
-enum _xsdKeyword
-{
- XSD_UNKNOWN,
- XSD_ALL,
- XSD_ANNOTATION,
- XSD_ANY,
- XSD_ANY_ATTRIBUTE,
- XSD_APPINFO,
- XSD_ATTRIBUTE,
- XSD_ATTRIBUTE_GROUP,
- XSD_CHOICE,
- XSD_COMPLEX_TYPE,
- XSD_COMPLEX_CONTENT,
- XSD_DOCUMENTATION,
- XSD_ELEMENT,
- XSD_EXTENSION,
- XSD_FIELD,
- XSD_GROUP,
- XSD_IMPORT,
- XSD_INCLUDE,
- XSD_KEY,
- XSD_KEYREF,
- XSD_LIST,
- XSD_NOTATION,
- XSD_REDEFINE,
- XSD_RESTRICTION,
- XSD_SCHEMA,
- XSD_SELECTOR,
- XSD_SEQUENCE,
- XSD_SIMPLE_CONTENT,
- XSD_SIMPLE_TYPE,
- XSD_UNION,
- XSD_UNIQUE
-};
-
-typedef enum _xsdKeyword xsdKeyword;
-typedef enum _xsdAttr xsdAttr;
-
static xmlNodePtr _xmlGetChild(xmlNodePtr node);
static xmlNodePtr _xmlGetNext(xmlNodePtr node);
static HCOMPLEXTYPE xsdProcComplexType(xmlNodePtr node, const char* type);
@@ -171,9 +86,6 @@ static char outDir[1054];
-static
-void usage();
-
static
xmlNodePtr xmlFindSubElement(xmlNodePtr root, const char* element_name)
@@ -198,7 +110,6 @@ xmlNodePtr xmlFindSubElement(xmlNodePtr root, const char* element_name)
return NULL;
}
-static
xmlNodePtr xsdLoadFile(const char* filename)
{
xmlDocPtr doc;
@@ -213,7 +124,6 @@ xmlNodePtr xsdLoadFile(const char* filename)
}
-static
xmlNodePtr wsdlLoadFile(const char* filename)
{
xmlDocPtr doc;
@@ -246,6 +156,8 @@ xmlNodePtr wsdlLoadFile(const char* filename)
case XSD_SIMPLE_TYPE:
case XSD_SCHEMA:
return sub;
+ default:
+ fprintf(stderr, "Unexpected node: '%s'\n", cur->name);
}
return NULL;
@@ -286,9 +198,9 @@ static
void xsdProcAttribute(HCOMPLEXTYPE parent, xmlNodePtr node)
{
char *name, *type;
- xmlNodePtr cur;
+/* xmlNodePtr cur;
char buffer[1054];
-
+ */
name = xmlGetProp(node, ATTR_NAME_STR);
type = xmlGetProp(node, ATTR_TYPE_STR);
@@ -374,6 +286,9 @@ void xsdProcElement(HCOMPLEXTYPE parent, xmlNodePtr node)
objAddElement(parent, name, buffer,0, mino, maxo);
}
break;
+
+ default:
+ fprintf(stderr, "Unexpected node: '%s'\n", cur->name);
}
} while ((cur = _xmlGetNext(cur)) != NULL);
@@ -557,7 +472,7 @@ HCOMPLEXTYPE xsdProcComplexType(xmlNodePtr node, const char* type)
if (!name)
{
- fprintf(stderr, "\nWARNING: complexType has no typename!\n", name);
+ fprintf(stderr, "\nWARNING: complexType has no typename!\n");
return NULL;
}
@@ -767,69 +682,30 @@ int xsdInitObjModule(xmlNodePtr xsdNode)
}
-int main(int argc, char *argv[])
+int xsdEngineRun(xmlNodePtr xsdNode, const char* destDir)
{
- int i;
- xmlNodePtr xsdNode = NULL;
- char fname[255];
- int wsdl = 0;
-
- if (argc < 2) {
- usage(argv[0]);
- return 1;
- }
-
-
- strcpy(outDir, ".");
-
- for (i=1;i<argc;i++)
- {
- if (!strcmp(argv[i], "-d"))
- if (i==argc-1) usage(argv[0]);
- else strcpy(outDir, argv[++i]);
- else if (!strcmp(argv[i], "-S"))
- formatter_generate_sax_serializer = 1;
- else if (!strcmp(argv[i], "-wsdl"))
- wsdl = 1;
- else strcpy(fname, argv[i]);
- }
-
- mkdir(outDir, 000);
-
- if (wsdl)
- xsdNode = wsdlLoadFile(fname);
- else
- xsdNode = xsdLoadFile(fname);
-
- if (xsdNode == NULL) {
- fprintf(stderr, "can not load xsd file!\n");
- return 1;
- }
if (!xsdInitTrModule(xsdNode))
return 1;
if (!xsdInitObjModule(xsdNode))
return 1;
-
+ strcpy(outDir, destDir);
+
+ mkdir(destDir, S_IRUSR|S_IWUSR|S_IXUSR |
+ S_IRGRP|S_IWGRP|S_IXGRP |
+ S_IROTH|S_IXOTH );
+
runGenerator(xsdNode);
objRegistryEnumComplexType(declareStructs);
objRegistryEnumComplexType(writeSource);
- xmlFreeDoc(xsdNode->doc);
trFreeModule();
objFreeModule();
-
+
return 0;
}
-void usage(const char* execName)
-{
- printf("usage: %s [-d <destdir> -S -D] <xsd filename>\n", execName);
-}
-
-
-