blob: b711dbdb52aee09bd9084d37e654ff67b54c4f38 [file] [log] [blame]
/*
wsdl.h
WSDL 1.1 binding schema interface
--------------------------------------------------------------------------------
gSOAP XML Web services tools
Copyright (C) 2001-2006, Robert van Engelen, Genivia Inc. All Rights Reserved.
This software is released under one of the following two 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
--------------------------------------------------------------------------------
*/
//gsoapopt w
//gsoap wsdl schema documentation: WSDL 1.1 binding schema
//gsoap wsdl schema namespace: http://schemas.xmlsoap.org/wsdl/
//gsoap wsdl schema elementForm: qualified
//gsoap wsdl schema attributeForm: unqualified
#import "imports.h"
#import "schema.h"
#import "soap.h"
#import "mime.h"
#import "dime.h"
#import "http.h"
#import "gwsdl.h"
class wsdl__definitions; // forward declaration
class wsdl__import
{ public:
@xsd__anyURI namespace_;
@xsd__anyURI location;
private:
wsdl__definitions *definitionsRef;
public:
wsdl__import();
int preprocess(wsdl__definitions&);
int traverse(wsdl__definitions&);
void definitionsPtr(wsdl__definitions*);
wsdl__definitions *definitionsPtr() const;
};
class wsdl__types
{ public:
xsd__string documentation; // <wsdl:documentation>?
std::vector<xs__schema*> xs__schema_; // <xs:schema>*
public:
int preprocess(wsdl__definitions&);
int traverse(wsdl__definitions&);
};
class wsdl__part
{ public:
@xsd__NMTOKEN name;
@xsd__QName element;
@xsd__QName type;
xsd__string documentation; // <wsdl:documentation>?
private:
xs__element *elementRef; // traverse() finds element
xs__simpleType *simpleTypeRef; // traverse() finds simpleType
xs__complexType *complexTypeRef; // traverse() finds complexType
public:
wsdl__part();
int traverse(wsdl__definitions&);
void elementPtr(xs__element*);
void simpleTypePtr(xs__simpleType*);
void complexTypePtr(xs__complexType*);
xs__element *elementPtr() const;
xs__simpleType *simpleTypePtr() const;
xs__complexType *complexTypePtr() const;
};
class wsdl__message
{ public:
@xsd__NMTOKEN name;
xsd__string documentation; // <wsdl:documentation>?
std::vector<wsdl__part> part; // <wsdl:part>*
public:
int traverse(wsdl__definitions&);
};
class wsdl__input
{ public:
@xsd__NMTOKEN name;
@xsd__QName message;
xsd__string documentation; // <wsdl:documentation>?
private:
wsdl__message *messageRef; // traverse() finds message
public:
wsdl__input();
int traverse(wsdl__definitions&);
void messagePtr(wsdl__message*);
wsdl__message *messagePtr() const;
};
class wsdl__output
{ public:
@xsd__NMTOKEN name;
@xsd__QName message;
xsd__string documentation; // <wsdl:documentation>?
private:
wsdl__message *messageRef; // traverse() finds message
public:
wsdl__output();
int traverse(wsdl__definitions&);
void messagePtr(wsdl__message*);
wsdl__message *messagePtr() const;
};
class wsdl__fault
{ public:
@xsd__NMTOKEN name;
@xsd__QName message;
xsd__string documentation; // <wsdl:documentation>?
private:
wsdl__message *messageRef; // traverse() finds message
public:
wsdl__fault();
int traverse(wsdl__definitions&);
void messagePtr(wsdl__message*);
wsdl__message *messagePtr() const;
};
class wsdl__operation
{ public:
@xsd__NMTOKEN name;
@xsd__string parameterOrder;
xsd__string documentation; // <wsdl:documentation>?
wsdl__input *input; // <wsdl:input>?
wsdl__output *output; // <wsdl:output>?
std::vector<wsdl__fault> fault; // <wsdl:fault>*
public:
int traverse(wsdl__definitions&);
};
class wsdl__portType
{ public:
@xsd__NMTOKEN name;
xsd__string documentation; // <wsdl:documentation>?
std::vector<wsdl__operation> operation; // <wsdl:operation>*
public:
int traverse(wsdl__definitions&);
};
class wsdl__ext_input // extensibility element
{ public:
xsd__string documentation; // <wsdl:documentation>?
dime__message *dime__message_; // <dime:message>?
soap__body *soap__body_; // <soap:body>?
mime__multipartRelated *mime__multipartRelated_;// <mime:multipartRelated>?
mime__content *mime__content_; // <mime:content>?
std::vector<soap__header> soap__header_; // <soap:header>*
public:
int traverse(wsdl__definitions&);
};
class wsdl__ext_output // extensibility element
{ public:
xsd__string documentation; // <wsdl:documentation>?
dime__message *dime__message_; // <dime:message>?
soap__body *soap__body_; // <soap:body>?
mime__multipartRelated *mime__multipartRelated_;// <mime:multipartRelated>?
mime__content *mime__content_; // <mime:content>?
std::vector<soap__header> soap__header_; // <soap:header>*
public:
int traverse(wsdl__definitions&);
};
class wsdl__ext_fault // extensibility element
{ public:
@xsd__NMTOKEN name;
xsd__string documentation; // <wsdl:documentation>?
soap__fault *soap__fault_; // <soap:fault>?
private:
wsdl__message *messageRef;
public:
wsdl__ext_fault();
int traverse(wsdl__definitions&);
void messagePtr(wsdl__message*);
wsdl__message *messagePtr() const;
};
class wsdl__binding_operation
{ public:
@xsd__NMTOKEN name;
xsd__string documentation; // <wsdl:documentation>?
soap__operation *soap__operation_; // <soap:operation>?
http__operation *http__operation_; // <http:operation>?
wsdl__ext_input *input; // <wsdl:input>?
wsdl__ext_output *output; // <wsdl:output>?
std::vector<wsdl__ext_fault> fault; // <wsdl:fault>*
private:
wsdl__operation *operationRef; // traverse() finds operation in <wsdl:portType>
public:
wsdl__binding_operation();
int traverse(wsdl__definitions&, wsdl__portType*);
void operationPtr(wsdl__operation*);
wsdl__operation *operationPtr() const;
};
class wsdl__binding
{ public:
@xsd__NMTOKEN name;
@xsd__QName type;
xsd__string documentation; // <wsdl:documentation>?
soap__binding *soap__binding_; // <soap:binding>?
http__binding *http__binding_; // <http:binding>?
std::vector<wsdl__binding_operation>
operation; // <wsdl:operation>*
private:
wsdl__portType *portTypeRef; // traverse() finds portType
public:
wsdl__binding();
int traverse(wsdl__definitions&);
void portTypePtr(wsdl__portType*);
wsdl__portType *portTypePtr() const;
};
class wsdl__port
{ public:
@xsd__NMTOKEN name;
@xsd__QName binding;
xsd__string documentation; // <wsdl:documentation>?
soap__address *soap__address_; // <soap:address>?
http__address *http__address_; // <http:address>?
private:
wsdl__binding *bindingRef; // traverse() finds binding
public:
wsdl__port();
int traverse(wsdl__definitions&);
void bindingPtr(wsdl__binding*);
wsdl__binding *bindingPtr() const;
};
class wsdl__service
{ public:
@xsd__NMTOKEN name;
xsd__string documentation; // <wsdl:documentation>?
std::vector<wsdl__port> port; // <wsdl:port>*
public:
int traverse(wsdl__definitions&);
};
class wsdl__definitions
{ public:
@xsd__NMTOKEN name;
@xsd__anyURI targetNamespace = "";
@xsd__NMTOKEN version;
std::vector<wsdl__import> import; // <wsdl:import>*
xsd__string documentation; // <wsdl:documentation>?
wsdl__types *types; // <wsdl:types>?
std::vector<wsdl__message> message; // <wsdl:message>*
std::vector<wsdl__portType> portType; // <wsdl:portType>*
std::vector<wsdl__binding> binding; // <wsdl:binding>*
std::vector<wsdl__service> service; // <wsdl:service>*
std::vector<gwsdl__portType> gwsdl__portType_; // <gwsdl:portType>* For the moment, we will hardcode this which makes it easier to access. WSDL 1.1 does not allow this to be extended anyway
struct soap *soap;
private:
bool updated;
char* location;
int redirs;
SetOfString builtinTypeSet;
SetOfString builtinElementSet;
SetOfString builtinAttributeSet;
public:
wsdl__definitions();
wsdl__definitions(struct soap*, const char*, const char*);
virtual ~wsdl__definitions();
int get(struct soap*); // gSOAP getter is triggered after parsing
int preprocess();
int traverse();
int read(int, char**);
int read(const char *cwd, const char*);
const char* sourceLocation();
int error();
void print_fault();
void builtinType(const char*);
void builtinTypes(const SetOfString&);
void builtinElement(const char*);
void builtinElements(const SetOfString&);
void builtinAttribute(const char*);
void builtinAttributes(const SetOfString&);
const SetOfString& builtinTypes() const;
const SetOfString& builtinElements() const;
const SetOfString& builtinAttributes() const;
friend ostream& operator<<(ostream&, const wsdl__definitions&);
friend istream& operator>>(istream&, wsdl__definitions&);
};
extern ostream &operator<<(ostream &o, const wsdl__definitions &e);
extern istream &operator>>(istream &i, wsdl__definitions &e);