Mercurial > repos > ktnyt > gembassy
diff GEMBASSY-1.0.3/gsoap/wsdl/wsdl2h.cpp @ 2:8947fca5f715 draft default tip
Uploaded
author | ktnyt |
---|---|
date | Fri, 26 Jun 2015 05:21:44 -0400 |
parents | 84a17b3fad1f |
children |
line wrap: on
line diff
--- a/GEMBASSY-1.0.3/gsoap/wsdl/wsdl2h.cpp Fri Jun 26 05:20:29 2015 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,527 +0,0 @@ -/* - wsdl2h.cpp - - WSDL parser, translator, and generator (of the gSOAP header file format) - --------------------------------------------------------------------------------- -gSOAP XML Web services tools -Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved. -This software is released under one of the following licenses: -GPL or Genivia's license for commercial use. --------------------------------------------------------------------------------- -GPL license. - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA - -Author contact information: -engelen@genivia.com / engelen@acm.org --------------------------------------------------------------------------------- -A commercial use license is available from Genivia, Inc., contact@genivia.com --------------------------------------------------------------------------------- - -Build: - soapcpp2 -ipwsdl wsdl.h - g++ -o wsdl2h wsdl2h.cpp types.cpp service.cpp wsdl.cpp schema.cpp wsdlC.cpp stdsoap2.cpp - -TODO: - Resolve relative versus absolute import paths for reading imported WSDL/schema (use URL local addresses) - Do not generate abstract complexTypes, but include defs in derived types - Handle simpleType derivation from base64 - -*/ - -#include "includes.h" -#include "types.h" -#include "service.h" - -#ifndef WSDL2H_IMPORT_PATH -#define WSDL2H_IMPORT_PATH (NULL) -#endif - -#ifndef WSDL_TYPEMAP_FILE -#define WSDL_TYPEMAP_FILE "typemap.dat" -#endif - -static void init(); -static void options(int argc, char **argv); - -int _flag = 0, - aflag = 0, - bflag = 0, - cflag = 0, - dflag = 0, - eflag = 0, - fflag = 0, - gflag = 0, - iflag = 0, - jflag = 0, - kflag = 0, - mflag = 0, - pflag = 0, - Pflag = 0, - Rflag = 0, - sflag = 0, - uflag = 0, - vflag = 0, - wflag = 0, - Wflag = 0, - xflag = 0, - yflag = 0, - zflag = 0; - -int infiles = 0; -char *infile[MAXINFILES], - *outfile = NULL, - *proxy_host = NULL, - *proxy_userid = NULL, - *proxy_passwd = NULL, - *auth_userid = NULL, - *auth_passwd = NULL; -const char - *mapfile = WSDL_TYPEMAP_FILE, - *import_path = WSDL2H_IMPORT_PATH, - *cwd_path = NULL, - *cppnamespace = NULL; - -int proxy_port = 8080; - -FILE *stream = stdout; - -SetOfString exturis; - -extern struct Namespace namespaces[]; - -const char *service_prefix = NULL; -const char *schema_prefix = "ns"; - -const char elementformat[] = " %-35s %-30s"; -const char pointerformat[] = " %-35s *%-30s"; -const char attributeformat[] = " @%-35s %-30s"; -const char vectorformat[] = " std::vector<%-23s> %-30s"; -const char pointervectorformat[] = " std::vector<%-22s> *%-30s"; -const char vectorformat_open[] = " std::vector<%s"; -const char arrayformat[] = " %-35s *__ptr%-25s"; -const char arraysizeformat[] = " %-35s __size%-24s"; -const char arrayoffsetformat[] = "// %-35s __offset%-22s"; -const char sizeformat[] = " $%-35s __size%-24s"; -const char choiceformat[] = " $%-35s __union%-23s"; -const char schemaformat[] = "//gsoap %-5s schema %s:\t%s\n"; -const char serviceformat[] = "//gsoap %-4s service %s:\t%s %s\n"; -const char paraformat[] = " %-35s%s%s%s"; -const char anonformat[] = " %-35s%s_%s%s"; - -const char copyrightnotice[] = "\n** The gSOAP WSDL/Schema processor for C and C++, wsdl2h release " WSDL2H_VERSION "\n** Copyright (C) 2000-2013 Robert van Engelen, Genivia Inc.\n** All Rights Reserved. This product is provided \"as is\", without any warranty.\n** The wsdl2h tool is released under one of the following licenses:\n** GPL or the commercial license by Genivia Inc. Use option -l for details.\n\n"; - -const char licensenotice[] = "\ ---------------------------------------------------------------------------------\n\ -gSOAP XML Web services tools\n\ -Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved.\n\ -\n\ -This software is released under one of the following licenses:\n\ -GPL or Genivia's license for commercial use.\n\ ---------------------------------------------------------------------------------\n\ -GPL license.\n\ -\n\ -This program is free software; you can redistribute it and/or modify it under\n\ -the terms of the GNU General Public License as published by the Free Software\n\ -Foundation; either version 2 of the License, or (at your option) any later\n\ -version.\n\ -\n\ -This program is distributed in the hope that it will be useful, but WITHOUT ANY\n\ -WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\n\ -PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\ -\n\ -You should have received a copy of the GNU General Public License along with\n\ -this program; if not, write to the Free Software Foundation, Inc., 59 Temple\n\ -Place, Suite 330, Boston, MA 02111-1307 USA\n\ -\n\ -Author contact information:\n\ -engelen@genivia.com / engelen@acm.org\n\ -\n\ -This program is released under the GPL with the additional exemption that\n\ -compiling, linking, and/or using OpenSSL is allowed.\n\ ---------------------------------------------------------------------------------\n\ -A commercial-use license is available from Genivia, Inc., contact@genivia.com\n\ ---------------------------------------------------------------------------------\n"; - -int main(int argc, char **argv) -{ init(); - fprintf(stderr, "%s", copyrightnotice); - options(argc, argv); - Definitions def; - wsdl__definitions definitions; - definitions.read(infiles, infile); - if (definitions.error()) - { definitions.print_fault(); - exit(1); - } - definitions.traverse(); - def.compile(definitions); - if (outfile) - { fclose(stream); - fprintf(stderr, "\nTo complete the process, compile with:\n> soapcpp2 %s\n", outfile); - if (!cflag) - fprintf(stderr, "or to generate C++ proxy and object classes:\n> soapcpp2 -j %s\n", outfile); - fprintf(stderr, "\n"); - } - return 0; -} - -//////////////////////////////////////////////////////////////////////////////// -// -// Initialization -// -//////////////////////////////////////////////////////////////////////////////// - -static void init() -{ struct Namespace *p = namespaces; - if (p) - { for (; p->id; p++) - { if (p->in && *p->in) - exturis.insert(p->in); - if (p->ns && *p->ns) - exturis.insert(p->ns); - } - } -} - -//////////////////////////////////////////////////////////////////////////////// -// -// Parse command line options -// -//////////////////////////////////////////////////////////////////////////////// - -static void options(int argc, char **argv) -{ int i; - infiles = 0; - for (i = 1; i < argc; i++) - { char *a = argv[i]; - if (*a == '-' -#ifdef WIN32 - || *a == '/' -#endif - ) - { int g = 1; - while (g && *++a) - { switch (*a) - { case '_': - _flag = 1; - break; - case 'a': - aflag = 1; - break; - case 'b': - bflag = 1; - break; - case 'c': - cflag = 1; - if (cppnamespace) - fprintf(stderr, "wsdl2h: Options -c and -q clash\n"); - break; - case 'd': - dflag = 1; - break; - case 'e': - eflag = 1; - break; - case 'f': - fflag = 1; - break; - case 'g': - gflag = 1; - break; - case 'i': - iflag = 1; - break; - case 'j': - jflag = 1; - break; - case 'k': - kflag = 1; - break; - case 'I': - a++; - g = 0; - if (*a) - import_path = a; - else if (i < argc && argv[++i]) - import_path = argv[i]; - else - fprintf(stderr, "wsdl2h: Option -I requires a path argument\n"); - break; - case 'l': - fprintf(stderr, "%s", licensenotice); - exit(0); - break; - case 'm': - mflag = 1; - break; - case 'n': - a++; - g = 0; - if (*a) - schema_prefix = a; - else if (i < argc && argv[++i]) - schema_prefix = argv[i]; - else - fprintf(stderr, "wsdl2h: Option -n requires a prefix name argument\n"); - break; - case 'N': - a++; - g = 0; - if (*a) - service_prefix = a; - else if (i < argc && argv[++i]) - service_prefix = argv[i]; - else - fprintf(stderr, "wsdl2h: Option -N requires a prefix name argument\n"); - break; - case 'o': - a++; - g = 0; - if (*a) - outfile = a; - else if (i < argc && argv[++i]) - outfile = argv[i]; - else - fprintf(stderr, "wsdl2h: Option -o requires an output file argument\n"); - break; - case 'p': - pflag = 1; - break; - case 'P': - Pflag = 1; - break; - case 'q': - a++; - g = 0; - if (*a) - cppnamespace = a; - else if (i < argc && argv[++i]) - cppnamespace = argv[i]; - else - fprintf(stderr, "wsdl2h: Option -q requires a C++ namespace name argument\n"); - if (cflag) - fprintf(stderr, "wsdl2h: Options -c and -q clash\n"); - break; - case 'r': - a++; - g = 0; - if (*a) - proxy_host = a; - else if (i < argc && argv[++i]) - proxy_host = argv[i]; - else - fprintf(stderr, "wsdl2h: Option -r requires proxy host:port:userid:passwd or :userid:passwd authentication argument\n"); - if (proxy_host) - { char *s = (char*)emalloc(strlen(proxy_host + 1)); - strcpy(s, proxy_host); - proxy_host = s; - s = strchr(proxy_host, ':'); - if (s) - { *s = '\0'; - if (*proxy_host) - { proxy_port = soap_strtol(s + 1, &s, 10); - if (s && *s == ':') - { *s = '\0'; - proxy_userid = s + 1; - s = strchr(proxy_userid, ':'); - if (s && *s == ':') - { *s = '\0'; - proxy_passwd = s + 1; - } - } - } - else - { s = proxy_host; - proxy_host = NULL; - auth_userid = s + 1; - s = strchr(auth_userid, ':'); - if (s && *s == ':') - { *s = '\0'; - auth_passwd = s + 1; - } - } - } - } - break; - case 'R': - Rflag = 1; - break; - case 's': - sflag = 1; - break; - case 't': - a++; - g = 0; - if (*a) - mapfile = a; - else if (i < argc && argv[++i]) - mapfile = argv[i]; - else - fprintf(stderr, "wsdl2h: Option -t requires a type map file argument\n"); - break; - case 'u': - uflag = 1; - break; - case 'v': - vflag = 1; - break; - case 'w': - wflag = 1; - break; - case 'W': - Wflag = 1; - break; - case 'x': - xflag = 1; - break; - case 'y': - yflag = 1; - break; - case 'z': - a++; - g = 0; - if (*a) - zflag = soap_strtol(a, NULL, 10); - else if (i < argc && argv[++i]) - zflag = soap_strtol(argv[i], NULL, 10); - else - zflag = 1; - break; - case '?': - case 'h': - fprintf(stderr, "Usage: wsdl2h [-a] [-b] [-c] [-d] [-e] [-f] [-g] [-h] [-I path] [-i] [-j] [-k] [-l] [-m] [-N name] [-n name] [-P|-p] [-q name] [-R] [-r proxyhost[:port[:uid:pwd]]] [-r:userid:passwd] [-s] [-t typemapfile] [-u] [-v] [-w] [-W] [-x] [-y] [-z#] [-_] [-o outfile.h] infile.wsdl infile.xsd http://www... ...\n\n"); - fprintf(stderr, "\ --a generate indexed struct names for local elements with anonymous types\n\ --b bi-directional operations (duplex ops) added to serve one-way responses\n\ --c generate C source code\n\ --d use DOM to populate xs:any, xs:anyType, and xs:anyAttribute\n\ --e don't qualify enum names\n\ --f generate flat C++ class hierarchy\n\ --g generate global top-level element declarations\n\ --h display help info\n\ --Ipath use path to find files\n\ --i don't import (advanced option)\n\ --j don't generate SOAP_ENV__Header and SOAP_ENV__Detail definitions\n\ --k don't generate SOAP_ENV__Header mustUnderstand qualifiers\n\ --l display license information\n\ --m use xsd.h module to import primitive types\n\ --Nname use name for service prefixes to produce a service for each binding\n\ --nname use name as the base namespace prefix instead of 'ns'\n\ --ofile output to file\n\ --P don't create polymorphic types inherited from xsd__anyType\n\ --p create polymorphic types inherited from base xsd__anyType\n\ --qname use name for the C++ namespace of all declarations\n\ --R generate REST operations for REST bindings in the WSDL\n\ --rhost[:port[:uid:pwd]]\n\ - connect via proxy host, port, and proxy credentials\n\ --r:uid:pwd\n\ - connect with authentication credentials (digest auth requires SSL)\n\ --s don't generate STL code (no std::string and no std::vector)\n\ --tfile use type map file instead of the default file typemap.dat\n\ --u don't generate unions\n\ --v verbose output\n\ --W suppress warnings\n\ --w always wrap response parameters in a response struct (<=1.1.4 behavior)\n\ --x don't generate _XML any/anyAttribute extensibility elements\n\ --y generate typedef synonyms for structs and enums\n\ --z1 compatibility with 2.7.6e: generate pointer-based arrays\n\ --z2 compatibility with 2.7.7 to 2.7.15: qualify element/attribute references\n\ --z3 compatibility with 2.7.16 to 2.8.7: qualify element/attribute references\n\ --z4 compatibility up to 2.8.11: don't generate union structs in std::vector\n\ --z5 compatibility up to 2.8.15\n\ --_ don't generate _USCORE (replace with UNICODE _x005f)\n\ -infile.wsdl infile.xsd http://www... list of input sources (if none: use stdin)\n\ -\n"); - exit(0); - default: - fprintf(stderr, "wsdl2h: Unknown option %s\n", a); - exit(1); - } - } - } - else - { infile[infiles++] = argv[i]; - if (infiles >= MAXINFILES) - { fprintf(stderr, "wsdl2h: too many files\n"); - exit(1); - } - } - } - if (infiles) - { if (!outfile) - { if (strncmp(infile[0], "http://", 7) && strncmp(infile[0], "https://", 8)) - { const char *s = strrchr(infile[0], '.'); - if (s && (!soap_tag_cmp(s, ".wsdl") || !soap_tag_cmp(s, ".gwsdl") || !soap_tag_cmp(s, ".xsd"))) - { outfile = estrdup(infile[0]); - outfile[s - infile[0] + 1] = 'h'; - outfile[s - infile[0] + 2] = '\0'; - } - else - { outfile = (char*)emalloc(strlen(infile[0]) + 3); - strcpy(outfile, infile[0]); - strcat(outfile, ".h"); - } - } - } - if (outfile) - { stream = fopen(outfile, "w"); - if (!stream) - { fprintf(stderr, "Cannot write to %s\n", outfile); - exit(1); - } - if (cppnamespace) - fprintf(stream, "namespace %s {\n", cppnamespace); - fprintf(stderr, "Saving %s\n\n", outfile); - } - } -} - -//////////////////////////////////////////////////////////////////////////////// -// -// Namespaces -// -//////////////////////////////////////////////////////////////////////////////// - -struct Namespace namespaces[] = -{ - {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope"}, - {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding"}, - {"xsi", "http://www.w3.org/2001/XMLSchema-instance"}, - {"xsd", "-"}, // http://www.w3.org/2001/XMLSchema"}, // don't use this, it might conflict with xs - {"xml", "http://www.w3.org/XML/1998/namespace"}, - {"xs", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema" }, - {"http", "http://schemas.xmlsoap.org/wsdl/http/"}, - {"soap", "http://schemas.xmlsoap.org/wsdl/soap/", "http://schemas.xmlsoap.org/wsdl/soap*/"}, - {"mime", "http://schemas.xmlsoap.org/wsdl/mime/"}, - {"xmime", "http://www.w3.org/2005/05/xmlmime"}, - {"dime", "http://schemas.xmlsoap.org/ws/2002/04/dime/wsdl/", "http://schemas.xmlsoap.org/ws/*/dime/wsdl/"}, - {"sp", "http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702", "http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"}, - {"wsdl", "http://schemas.xmlsoap.org/wsdl/", "http://www.w3.org/ns/wsdl"}, - {"wsdli", "http://www.w3.org/ns/wsdl-instance"}, - {"wsdlx", "http://www.w3.org/ns/wsdl-extensions"}, - {"wsoap", "http://www.w3.org/ns/wsdl/soap"}, - {"whttp", "http://www.w3.org/ns/wsdl/http"}, - {"wrpc", "http://www.w3.org/ns/wsdl/rpc"}, - {"wsa_", "http://www.w3.org/2005/08/addressing"}, - {"wsaw", "http://www.w3.org/2006/05/addressing/wsdl"}, - {"wsam", "http://www.w3.org/2007/05/addressing/metadata"}, - {"wsrmp", "http://schemas.xmlsoap.org/ws/2005/02/rm/policy", "http://docs.oasis-open.org/ws-rx/wsrmp/*"}, - {"wsp", "http://www.w3.org/ns/ws-policy", "http://schemas.xmlsoap.org/ws/2004/09/policy"}, - {"wst", "http://docs.oasis-open.org/ws-sx/ws-trust/200512"}, - {"wsu_", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"}, - {"gwsdl", "http://www.gridforum.org/namespaces/2003/03/gridWSDLExtensions"}, - {NULL, NULL} -};