00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _WSDLINVOKERH
00023 #define _WSDLINVOKERH
00024
00025 #include "xmlpull/XmlSerializer.h"
00026 #include "wsdlparser/WsdlParser.h"
00027 #include "wsdlparser/Soap.h"
00028 #include "xmlpull/wsdlpull_export.h"
00029
00030
00031 namespace WsdlPull{
00032
00033 struct Parameter
00034 {
00035 Parameter(Schema::Type ,std::string,int m,int x,const SchemaParser* s,
00036 const std::vector<std::string>& parents);
00037 Schema::Type type_;
00038 std::string tag_;
00039 unsigned int min_;
00040 unsigned int max_;
00041 int n_;
00042 std::vector<std::string> data_;
00043
00044 const SchemaParser* sParser_;
00045 std::vector<std::string> parents_;
00046
00047 };
00048
00049 class WSDLPULL_EXPORT WsdlInvoker
00050 {
00051 public:
00052
00053
00054
00055
00056
00057
00058
00059 WsdlInvoker(const std::string &url);
00060 WsdlInvoker(const std::string &url, const std::string &schemaPath);
00061 WsdlInvoker();
00062 ~WsdlInvoker();
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 bool setWSDLUri(const std::string &url, const std::string & schemaPath="");
00073
00074
00075
00076
00077
00078 int getOperations(std::vector<std::string> & operations);
00079 std::string getOpDocumentation(const std::string & n);
00080 std::string getDocumentation();
00081
00082
00083
00084
00085
00086 bool setOperation(const std::string & operation,
00087 WsdlPull::MessageType mType = WsdlPull::Input);
00088
00089
00090
00091 std::string getServiceEndPoint(const std::string & opname) ;
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 bool setValue(const std::string & param,void* val);
00109 bool setValue(const std::string & param,void** values,unsigned int occur);
00110 bool setValue(const std::string & param,std::string val);
00111 bool setValue(const std::string & param,std::vector<std::string> values);
00112 bool setValue(const std::vector<std::string> & parents,void* val);
00113
00114
00115
00116
00117
00118 bool invoke(long timeout = 0);
00119
00120
00121
00122
00123
00124
00125
00126
00127 void* getValue(const std::string & param,Schema::Type & t);
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 int getNextInput(std::string & param ,Schema::Type & type,int & minimum,int & maximum);
00149 int getNextInput(std::string & param ,Schema::Type & type,int & minimum,int & maximum,
00150 std::vector<std::string>& parents);
00151
00152
00153
00154
00155
00156 int getNextHeaderInput(std::string & param ,Schema::Type & type,int & minimum,int & maximum);
00157 int getNextHeaderInput(std::string & param ,Schema::Type & type,int & minimum,int & maximum,
00158 std::vector<std::string>& parents);
00159
00160
00161
00162 int nInputHeaders()const;
00163
00164
00165
00166
00167
00168
00169
00170
00171 bool setInputValue(const int param,void* val);
00172 bool setInputValue(const int id,void** values,unsigned int occur);
00173
00174
00175
00176
00177
00178
00179
00180
00181 bool setInputValue(const int param,std::string val);
00182 bool setInputValue(const int param,std::vector<std::string> values);
00183
00184
00185
00186
00187
00188
00189 bool getNextOutput(std::string & name,TypeContainer * & tc);
00190
00191
00192
00193
00194
00195 TypeContainer* getOutput(const std::string & name);
00196
00197
00198
00199
00200
00201
00202 bool getNextHeaderOutput(std::string & name,TypeContainer*& tc);
00203
00204
00205
00206 void setLocation(const std::string & url);
00207
00208 void setCredentials(const std::string & user, const std::string & pass);
00209
00210 void setAuth(const std::string & user, const std::string & pass);
00211
00212 std::string getSoapMessage();
00213 std::string getXMLResponse();
00214 void setProxy(const std::string & host,int port=80);
00215
00216 void setVerbose(bool f);
00217
00218
00219
00220 void printTypeNames(bool f);
00221
00222 std::string errors();
00223
00224 bool status()const;
00225
00226
00227 std::string getFaultCode() const;
00228 std::string getFaultString() const;
00229 std::string getFaultActor() const;
00230
00231
00232 private:
00233
00234
00235 bool init(WsdlParser* parser);
00236
00237 void serialize();
00238 void serializeType(Schema::Type typeId,
00239 const std::string &tag,
00240 const SchemaParser * sParser,
00241 int minimum,
00242 int maximum,
00243 std::vector<std::string> parents,
00244 const std::string nsp="",
00245 bool isRoot = false);
00246
00247 void serializeParam(int n,const std::string & tag,
00248 const SchemaParser * sParser,
00249 const std::string nsp="",
00250 bool isRoot = false);
00251 void serializeContentModel(ContentModel *cm,
00252 const SchemaParser *sParser,
00253 std::vector<std::string> parents);
00254
00255
00256
00257
00258 void post(long timeout=0, std::string username="", std::string passwd="");
00259 void processResults();
00260 void processFault(XmlPullParser* xpp);
00261 void processHeader(XmlPullParser *xpp);
00262 void processBody(const Message* m,XmlPullParser* xpp);
00263 void parseWsdl(const std::string & url, const std::string & schemaPath = "");
00264 void serializeHeader();
00265 bool isSoapArray (const ComplexType * ct,const SchemaParser * sParser);
00266
00267 void reset();
00268 void getOperationDetails(const Operation* op);
00269 std::string getPrefix(const std::string& nsp);
00270
00271 WsdlParser * wParser_;
00272 WsdlParser * ourParser_;
00273 XmlSerializer * xmlStream_;
00274 Soap* soap_;
00275 bool soapheaders_;
00276 int hPartId_;
00277 std::string hnsp_;
00278 std::ostringstream * soapstr_;
00279 std::ostringstream logger_;
00280 bool status_;
00281 bool serializeMode_;
00282 bool verbose_;
00283 bool dontPost_;
00284 int oHeaders_;
00285 std::map<std::string,const Operation*> opMap_;
00286 const Operation* op_;
00287 Soap::Encoding use_;
00288 std::string encodingStyle_;
00289 Soap::Style style_;
00290 std::string nsp_;
00291 std::string location_;
00292 std::string username_,password_,host_;
00293 int port_;
00294 std::string action_;
00295 std::vector<Parameter> elems_;
00296 size_t n_;
00297 int iHeaders_;
00298 std::vector<std::pair<std::string,TypeContainer*> > outputs_;
00299 WsdlPull::MessageType messageType_;
00300
00301 std::vector<std::string> prefixes_;
00302 bool bAuth;
00303 std::string sAuthUser;
00304 std::string sAuthPass;
00305
00306 std::string sFaultCode;
00307 std::string sFaultString;
00308 std::string sFaultActor;
00309 };
00310
00311 inline
00312 Parameter::Parameter(Schema::Type t,std::string n,int m,int x,const SchemaParser* s,
00313 const std::vector<std::string>& parents)
00314 :type_(t),
00315 tag_(n),
00316 min_(m),
00317 max_(x),
00318 n_(0),
00319 sParser_(s),
00320 parents_(parents)
00321
00322 {
00323 }
00324
00325 inline
00326 std::string
00327 WsdlInvoker::errors()
00328 {
00329 return logger_.str();
00330 }
00331
00332 inline
00333 bool
00334 WsdlInvoker::setWSDLUri(const std::string &url,const std::string & schemaPath)
00335 {
00336 parseWsdl(url,schemaPath);
00337 return status_;
00338 }
00339
00340 inline
00341 bool
00342 WsdlInvoker::status()const
00343 {
00344 return status_;
00345 }
00346
00347 inline
00348 void
00349 WsdlInvoker::setLocation(const std::string & url)
00350 {
00351 location_ = url;
00352 }
00353
00354 inline
00355 void
00356 WsdlInvoker::setVerbose(bool f)
00357 {
00358 verbose_ = f;
00359 }
00360
00361 inline
00362 int
00363 WsdlInvoker::nInputHeaders()const
00364 {
00365 return iHeaders_;
00366 }
00367
00368 inline
00369 std::string
00370 WsdlInvoker::getFaultCode() const
00371 {
00372 return sFaultCode;
00373 }
00374
00375 inline
00376 std::string
00377 WsdlInvoker::getFaultString() const
00378 {
00379 return sFaultString;
00380 }
00381
00382 inline
00383 std::string
00384 WsdlInvoker::getFaultActor() const
00385 {
00386 return sFaultActor;
00387 }
00388
00389
00390 }
00391 #endif