comparison GEMBASSY-1.0.3/gsoap/wsdl/soap.cpp @ 2:8947fca5f715 draft default tip

Uploaded
author ktnyt
date Fri, 26 Jun 2015 05:21:44 -0400
parents 84a17b3fad1f
children
comparison
equal deleted inserted replaced
1:84a17b3fad1f 2:8947fca5f715
1 /*
2 soap.cpp
3
4 WSDL/SOAP binding schema
5
6 --------------------------------------------------------------------------------
7 gSOAP XML Web services tools
8 Copyright (C) 2001-2008, Robert van Engelen, Genivia Inc. All Rights Reserved.
9 This software is released under one of the following licenses:
10 GPL or Genivia's license for commercial use.
11 --------------------------------------------------------------------------------
12 GPL license.
13
14 This program is free software; you can redistribute it and/or modify it under
15 the terms of the GNU General Public License as published by the Free Software
16 Foundation; either version 2 of the License, or (at your option) any later
17 version.
18
19 This program is distributed in the hope that it will be useful, but WITHOUT ANY
20 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
21 PARTICULAR PURPOSE. See the GNU General Public License for more details.
22
23 You should have received a copy of the GNU General Public License along with
24 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
25 Place, Suite 330, Boston, MA 02111-1307 USA
26
27 Author contact information:
28 engelen@genivia.com / engelen@acm.org
29 --------------------------------------------------------------------------------
30 A commercial use license is available from Genivia, Inc., contact@genivia.com
31 --------------------------------------------------------------------------------
32
33 */
34
35 #include "wsdlH.h" // cannot include "schemaH.h"
36 #include "includes.h"
37
38 extern const char *qname_token(const char*, const char*);
39 extern int is_builtin_qname(const char*);
40
41 ////////////////////////////////////////////////////////////////////////////////
42 //
43 // soap:header
44 //
45 ////////////////////////////////////////////////////////////////////////////////
46
47 int soap__header::traverse(wsdl__definitions& definitions)
48 { if (vflag)
49 cerr << " Analyzing soap header in wsdl namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
50 messageRef = NULL;
51 partRef = NULL;
52 const char *token = qname_token(message, definitions.targetNamespace);
53 if (token)
54 { for (vector<wsdl__message>::iterator message = definitions.message.begin(); message != definitions.message.end(); ++message)
55 { if ((*message).name && !strcmp((*message).name, token))
56 { messageRef = &(*message);
57 if (vflag)
58 cerr << " Found soap header part '" << (part?part:"") << "' message '" << (token?token:"") << "'" << endl;
59 break;
60 }
61 }
62 }
63 if (!messageRef)
64 { for (vector<wsdl__import>::iterator import = definitions.import.begin(); import != definitions.import.end(); ++import)
65 { wsdl__definitions *importdefinitions = (*import).definitionsPtr();
66 if (importdefinitions)
67 { token = qname_token(message, importdefinitions->targetNamespace);
68 if (token)
69 { for (vector<wsdl__message>::iterator message = importdefinitions->message.begin(); message != importdefinitions->message.end(); ++message)
70 { if ((*message).name && !strcmp((*message).name, token))
71 { messageRef = &(*message);
72 if (vflag)
73 cerr << " Found soap header part '" << (part?part:"") << "' message '" << (token?token:"") << "'" << endl;
74 break;
75 }
76 }
77 }
78 }
79 }
80 }
81 if (messageRef)
82 { if (part)
83 { for (vector<wsdl__part>::iterator pt = messageRef->part.begin(); pt != messageRef->part.end(); ++pt)
84 if ((*pt).name && !strcmp((*pt).name, part))
85 { partRef = &(*pt);
86 break;
87 }
88 }
89 if (!partRef)
90 cerr << "Warning: soap header has no matching part in message '" << (message?message:"") << "' in wsdl definitions '" << definitions.name << "' namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
91 }
92 else
93 cerr << "Warning: could not find soap header part '" << (part?part:"") << "' message '" << (message?message:"") << "' in wsdl definitions '" << definitions.name << "' namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
94 for (vector<soap__headerfault>::iterator i = headerfault.begin(); i != headerfault.end(); ++i)
95 (*i).traverse(definitions);
96 return SOAP_OK;
97 }
98
99 void soap__header::messagePtr(wsdl__message *message)
100 { messageRef = message;
101 }
102
103 wsdl__message *soap__header::messagePtr() const
104 { return messageRef;
105 }
106
107 void soap__header::partPtr(wsdl__part *part)
108 { partRef = part;
109 }
110
111 wsdl__part *soap__header::partPtr() const
112 { return partRef;
113 }
114
115 ////////////////////////////////////////////////////////////////////////////////
116 //
117 // soap:headerfault
118 //
119 ////////////////////////////////////////////////////////////////////////////////
120
121 int soap__headerfault::traverse(wsdl__definitions& definitions)
122 { if (vflag)
123 cerr << " Analyzing soap headerfault in wsdl namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
124 messageRef = NULL;
125 partRef = NULL;
126 const char *token = qname_token(message, definitions.targetNamespace);
127 if (token)
128 { for (vector<wsdl__message>::iterator message = definitions.message.begin(); message != definitions.message.end(); ++message)
129 { if ((*message).name && !strcmp((*message).name, token))
130 { messageRef = &(*message);
131 if (vflag)
132 cerr << " Found soap headerfault part '" << (part?part:"") << "' message '" << (token?token:"") << "'" << endl;
133 break;
134 }
135 }
136 }
137 else
138 { for (vector<wsdl__import>::iterator import = definitions.import.begin(); import != definitions.import.end(); ++import)
139 { wsdl__definitions *importdefinitions = (*import).definitionsPtr();
140 if (importdefinitions)
141 { token = qname_token(message, importdefinitions->targetNamespace);
142 if (token)
143 { for (vector<wsdl__message>::iterator message = importdefinitions->message.begin(); message != importdefinitions->message.end(); ++message)
144 { if ((*message).name && !strcmp((*message).name, token))
145 { messageRef = &(*message);
146 if (vflag)
147 cerr << " Found soap headerfault part '" << (part?part:"") << "' message '" << (token?token:"") << "'" << endl;
148 break;
149 }
150 }
151 }
152 }
153 }
154 }
155 if (messageRef)
156 { if (part)
157 { for (vector<wsdl__part>::iterator pt = messageRef->part.begin(); pt != messageRef->part.end(); ++pt)
158 if ((*pt).name && !strcmp((*pt).name, part))
159 { partRef = &(*pt);
160 break;
161 }
162 }
163 if (!partRef)
164 cerr << "Warning: soap headerfault has no matching part in message '" << (message?message:"") << "' in wsdl definitions '" << definitions.name << "' namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
165 }
166 else
167 cerr << "Warning: could not find soap headerfault part '" << (part?part:"") << "' message '" << (message?message:"") << "' in wSDL definitions '" << definitions.name << "' namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
168 return SOAP_OK;
169 }
170
171 void soap__headerfault::messagePtr(wsdl__message *message)
172 { messageRef = message;
173 }
174
175 wsdl__message *soap__headerfault::messagePtr() const
176 { return messageRef;
177 }
178
179 void soap__headerfault::partPtr(wsdl__part *part)
180 { partRef = part;
181 }
182
183 wsdl__part *soap__headerfault::partPtr() const
184 { return partRef;
185 }
186
187 ////////////////////////////////////////////////////////////////////////////////
188 //
189 // wsoap:header
190 //
191 ////////////////////////////////////////////////////////////////////////////////
192
193 int wsoap__header::traverse(wsdl__definitions& definitions)
194 { if (vflag)
195 cerr << " Analyzing soap header in wsdl namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
196 elementRef = NULL;
197 // WSDL 2.0
198 if (element)
199 { if (definitions.types)
200 { for (vector<xs__schema*>::iterator schema = definitions.types->xs__schema_.begin(); schema != definitions.types->xs__schema_.end(); ++schema)
201 { const char *token = qname_token(element, (*schema)->targetNamespace);
202 if (token)
203 { for (vector<xs__element>::iterator element = (*schema)->element.begin(); element != (*schema)->element.end(); ++element)
204 { if ((*element).name && !strcmp((*element).name, token))
205 { elementRef = &(*element);
206 if (vflag)
207 cerr << " Found soap header element '" << (token?token:"") << "'" << endl;
208 break;
209 }
210 }
211 }
212 }
213 }
214 if (!elementRef)
215 { if (is_builtin_qname(element))
216 definitions.builtinElement(element);
217 else
218 if (!Wflag)
219 cerr << "Warning: no soap header element '" << element << "' in wsdl definitions '" << (definitions.name?definitions.name:"") << "' namespace '" << (definitions.targetNamespace?definitions.targetNamespace:"") << "'" << endl;
220 }
221 }
222 return SOAP_OK;
223 }
224
225 void wsoap__header::elementPtr(xs__element *element)
226 { elementRef = element;
227 }
228
229 xs__element *wsoap__header::elementPtr() const
230 { return elementRef;
231 }