Mercurial > repos > ktnyt > gembassy
comparison GEMBASSY-1.0.3/gsoap/wsdl/soap.cpp @ 0:8300eb051bea draft
Initial upload
author | ktnyt |
---|---|
date | Fri, 26 Jun 2015 05:19:29 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:8300eb051bea |
---|---|
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 } |