<!-- This comment will put IE 6, 7 and 8 in quirks mode --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>wsdlpull: /builddir/build/BUILD/wsdlpull-1.23/src/tools/wsdl.cpp Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javaScript" src="search/search.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body onload='searchBox.OnSelectItem(0);'> <!-- Generated by Doxygen 1.6.2-20100208 --> <script type="text/javascript"><!-- var searchBox = new SearchBox("searchBox", "search",false,'Search'); --></script> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <img id="MSearchSelect" src="search/search.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/> <input type="text" id="MSearchField" value="Search" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> </div> </li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="dir_02f058d422e7266632662d1436e7c90d.html">src</a> » <a class="el" href="dir_9b08d5e3aa99b485234174b0ef99d02e.html">tools</a> </div> </div> <div class="contents"> <h1>wsdl.cpp</h1><a href="wsdl_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* </span> <a name="l00002"></a>00002 <span class="comment"> * wsdlpull - A C++ parser for WSDL (Web services description language)</span> <a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2005-2007 Vivek Krishna</span> <a name="l00004"></a>00004 <span class="comment"> *</span> <a name="l00005"></a>00005 <span class="comment"> * This library is free software; you can redistribute it and/or</span> <a name="l00006"></a>00006 <span class="comment"> * modify it under the terms of the GNU Library General Public</span> <a name="l00007"></a>00007 <span class="comment"> * License as published by the Free Software Foundation; either</span> <a name="l00008"></a>00008 <span class="comment"> * version 2 of the License, or (at your option) any later version.</span> <a name="l00009"></a>00009 <span class="comment"> *</span> <a name="l00010"></a>00010 <span class="comment"> * This library is distributed in the hope that it will be useful,</span> <a name="l00011"></a>00011 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00012"></a>00012 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> <a name="l00013"></a>00013 <span class="comment"> * Library General Public License for more details.</span> <a name="l00014"></a>00014 <span class="comment"> *</span> <a name="l00015"></a>00015 <span class="comment"> * You should have received a copy of the GNU Library General Public</span> <a name="l00016"></a>00016 <span class="comment"> * License along with this library; if not, write to the Free</span> <a name="l00017"></a>00017 <span class="comment"> * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.</span> <a name="l00018"></a>00018 <span class="comment"> */</span> <a name="l00019"></a>00019 <a name="l00020"></a>00020 <a name="l00021"></a>00021 <span class="comment">//A generic web service invocation tool which uses the invocation API</span> <a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="WsdlInvoker_8h.html">wsdlparser/WsdlInvoker.h</a>"</span> <a name="l00023"></a>00023 <span class="comment">//</span> <a name="l00024"></a>00024 <span class="preprocessor">#include <cstdlib></span> <a name="l00025"></a>00025 <a name="l00026"></a>00026 <span class="keyword">using namespace </span>std; <a name="l00027"></a>00027 <span class="keyword">using namespace </span>WsdlPull; <a name="l00028"></a>00028 <a name="l00029"></a>00029 <span class="preprocessor">#ifdef _WIN32</span> <a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define PACKAGE_VERSION "1.x"</span> <a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#endif</span> <a name="l00032"></a>00032 <span class="preprocessor"></span> <a name="l00033"></a>00033 <span class="keywordtype">void</span> <a name="l00034"></a><a class="code" href="wsdl_8cpp.html#ae8605e2b78cd4a81b6c6b5c30cb7366a">00034</a> <a class="code" href="schema_8cpp.html#ae8605e2b78cd4a81b6c6b5c30cb7366a">usage</a>(<span class="keywordtype">void</span>) <a name="l00035"></a>00035 { <a name="l00036"></a>00036 std::cout<<<span class="stringliteral">"Usage wsdl [options] wsdl-uri [operation name] [method parameters] [xpath expression for response]"</span><<std::endl; <a name="l00037"></a>00037 std::cout<<<span class="stringliteral">"Version "</span><<PACKAGE_VERSION<<std::endl; <a name="l00038"></a>00038 std::cout<<<span class="stringliteral">"Options: "</span><<std::endl; <a name="l00039"></a>00039 std::cout<<<span class="stringliteral">" -h Display this message"</span><<std::endl; <a name="l00040"></a>00040 std::cout<<<span class="stringliteral">" -x host[:port] Use HTTP proxy on given port"</span><<std::endl; <a name="l00041"></a>00041 std::cout<<<span class="stringliteral">" -U user[:password] Specify Proxy authentication"</span><<std::endl; <a name="l00042"></a>00042 std::cout<<<span class="stringliteral">" -v Verbose mode,SOAP request and response are logged"</span><<std::endl; <a name="l00043"></a>00043 std::cout<<<span class="stringliteral">" -d display WSDL operation's documentation"</span><<std::endl; <a name="l00044"></a>00044 std::cout<<<span class="stringliteral">" -p display WSDL port types and their operations"</span><<std::endl; <a name="l00045"></a>00045 std::cout<<<span class="stringliteral">" -l list all the WSDL operations "</span><<std::endl; <a name="l00046"></a>00046 std::cout<<<span class="stringliteral">" -o Allow setting occurrence constraint (default is 1)"</span><<std::endl; <a name="l00047"></a>00047 std::cout<<<span class="stringliteral">" -s Suppress printing type/element names in the output"</span><<std::endl; <a name="l00048"></a>00048 std::cout<<<span class="stringliteral">" -t requesttimeout in seconds"</span><<std::endl; <a name="l00049"></a>00049 std::cout<<<span class="stringliteral">" -e set SOAP headers in input"</span><<std::endl; <a name="l00050"></a>00050 std::cout<<<span class="stringliteral">" -g generate sample SOAP message for the invocation"</span><<std::endl; <a name="l00051"></a>00051 std::cout<<<span class="stringliteral">" -r Validate the response message with schema even when xpath selector is used(default is off)"</span><<std::endl; <a name="l00052"></a>00052 std::cout<<<span class="stringliteral">"With no arguments,wsdl starts in the interactive mode accepting operation name and parameters from the standard input."</span><<std::endl<<std::endl; <a name="l00053"></a>00053 std::cout<<<span class="stringliteral">"An xpath expression can be used to extract elements from web service response.If the expression points to an element or an attribute,the element's text or attribute value will be returned.The expression will match all occurrences in the xml tree"</span><<std::endl; <a name="l00054"></a>00054 <a name="l00055"></a>00055 <a name="l00056"></a>00056 } <a name="l00057"></a>00057 <a name="l00058"></a>00058 <span class="keywordtype">bool</span> <a name="l00059"></a><a class="code" href="wsdl_8cpp.html#a8a0d2331b278b95cdc364d4d53ae2426">00059</a> <a class="code" href="wsdl_8cpp.html#a8a0d2331b278b95cdc364d4d53ae2426">printPortTypes</a>(std::string uri) <a name="l00060"></a>00060 { <a name="l00061"></a>00061 <a name="l00062"></a>00062 <a class="code" href="classWsdlPull_1_1WsdlParser.html">WsdlParser</a> wp (uri, cout); <a name="l00063"></a>00063 <span class="keywordflow">while</span> (wp.<a class="code" href="classWsdlPull_1_1WsdlParser.html#a2d1b21eb1ddda7ff69ffe4ca39b38e8a">getEventType</a> () != WsdlParser::END){ <a name="l00064"></a>00064 <a name="l00065"></a>00065 <span class="keywordflow">if</span>(wp.<a class="code" href="classWsdlPull_1_1WsdlParser.html#a874400c3caa0253c187317df6cdd972f">getNextElement</a> () == WsdlParser::PORT_TYPE){ <a name="l00066"></a>00066 <a name="l00067"></a>00067 <a name="l00068"></a>00068 <span class="keyword">const</span> <a class="code" href="classWsdlPull_1_1PortType.html">PortType</a> * p = wp.<a class="code" href="classWsdlPull_1_1WsdlParser.html#a0a8946ae3d184dd471081ae5162cc2ea">getPortType</a> (); <a name="l00069"></a>00069 cout << <span class="stringliteral">"Port Type :"</span> << p-><a class="code" href="classWsdlPull_1_1WsdlElement.html#ae333f77f634fad93a34e599a6bd6bd70">getName</a> () << <span class="stringliteral">" has "</span> << <a name="l00070"></a>00070 p-><a class="code" href="classWsdlPull_1_1PortType.html#aa43fba1f8c86550347ac693ed81e8a12">getNumOps</a> () << <span class="stringliteral">" operations "</span><<endl; <a name="l00071"></a>00071 <a class="code" href="classWsdlPull_1_1Operation.html#a08d57d472188893cd746f616a2f001ea">Operation::cOpIterator</a> from,to; <a name="l00072"></a>00072 p-><a class="code" href="classWsdlPull_1_1PortType.html#ad856280fa84a1523ff3cdb4744361e39">getOperations</a>(from,to); <a name="l00073"></a>00073 <span class="keywordflow">while</span>(from!=to){ <a name="l00074"></a>00074 <a name="l00075"></a>00075 <span class="keyword">const</span> <a class="code" href="classWsdlPull_1_1Message.html">Message</a>* in = (*from)->getMessage(<a class="code" href="namespaceWsdlPull.html#a164c5e09fcd6185de9350186f9210ca6a3a3f05921718283e80a57288e54f3c50">Input</a>); <a name="l00076"></a>00076 <span class="keyword">const</span> <a class="code" href="classWsdlPull_1_1Message.html">Message</a>* out = (*from)->getMessage(<a class="code" href="namespaceWsdlPull.html#a164c5e09fcd6185de9350186f9210ca6a34eb09cf6345ace24ca2471de932fa41">Output</a>); <a name="l00077"></a>00077 <a class="code" href="namespaceWsdlPull.html#ac181aab7ed936bb9cf84046709ca4ee0">MessageList</a> * faults = (*from)->getFaults(); <a name="l00078"></a>00078 cout<<(*from)->getName()<<endl; <a name="l00079"></a>00079 cout <<<span class="stringliteral">" Input Message:"</span><<in-><a class="code" href="classWsdlPull_1_1WsdlElement.html#ae333f77f634fad93a34e599a6bd6bd70">getName</a>()<<endl; <a name="l00080"></a>00080 <span class="keywordflow">if</span> (out) <a name="l00081"></a>00081 cout <<<span class="stringliteral">" Output Message:"</span><<out-><a class="code" href="classWsdlPull_1_1WsdlElement.html#ae333f77f634fad93a34e599a6bd6bd70">getName</a>()<<endl; <a name="l00082"></a>00082 <span class="keywordflow">if</span> (faults) { <a name="l00083"></a>00083 <span class="keywordflow">for</span> (MessageList::iterator mli = faults->begin(); <a name="l00084"></a>00084 mli != faults->end(); <a name="l00085"></a>00085 mli++) { <a name="l00086"></a>00086 <a name="l00087"></a>00087 cout<<<span class="stringliteral">" Fault :"</span><<(*mli)->getName()<<endl; <a name="l00088"></a>00088 } <a name="l00089"></a>00089 } <a name="l00090"></a>00090 from++; <a name="l00091"></a>00091 } <a name="l00092"></a>00092 <a name="l00093"></a>00093 } <a name="l00094"></a>00094 } <a name="l00095"></a>00095 <span class="keywordflow">return</span> <span class="keyword">true</span>; <a name="l00096"></a>00096 } <a name="l00097"></a>00097 <a name="l00098"></a>00098 <a name="l00099"></a>00099 <a name="l00100"></a>00100 <span class="keywordtype">int</span> <a name="l00101"></a><a class="code" href="wsdl_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">00101</a> <a class="code" href="schema_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97">main</a> (<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]) <a name="l00102"></a>00102 { <a name="l00103"></a>00103 <a class="code" href="classWsdlPull_1_1WsdlInvoker.html">WsdlInvoker</a> invoker; <a name="l00104"></a>00104 <span class="keywordtype">bool</span> brkloop =<span class="keyword">false</span>; <a name="l00105"></a>00105 <span class="keywordtype">bool</span> showDoc = <span class="keyword">false</span>; <a name="l00106"></a>00106 <span class="keywordtype">bool</span> verbose = <span class="keyword">false</span>; <a name="l00107"></a>00107 <span class="keywordtype">bool</span> occurs = <span class="keyword">false</span>; <a name="l00108"></a>00108 <span class="keywordtype">bool</span> listops = <span class="keyword">false</span>; <a name="l00109"></a>00109 <span class="keywordtype">bool</span> generateSoapMsg = <span class="keyword">false</span>; <a name="l00110"></a>00110 <span class="keywordtype">bool</span> accept_password =<span class="keyword">false</span>; <a name="l00111"></a>00111 <span class="keywordtype">bool</span> accept_headers = <span class="keyword">false</span>; <a name="l00112"></a>00112 <span class="keywordtype">bool</span> processResponse = <span class="keyword">false</span>; <a name="l00113"></a>00113 <span class="keywordtype">long</span> timeout = 0; <a name="l00114"></a>00114 <a name="l00115"></a>00115 <span class="preprocessor">#ifdef _WIN32</span> <a name="l00116"></a>00116 <span class="preprocessor"></span> <a class="code" href="classWsdlPull_1_1WsdlParser.html#a30ff5f610b7d8e1b76a2d82bba861ba9">WsdlPull::WsdlParser::useLocalSchema_</a> = <span class="keyword">false</span>; <a name="l00117"></a>00117 <span class="preprocessor">#endif</span> <a name="l00118"></a>00118 <span class="preprocessor"></span> <a name="l00119"></a>00119 <a name="l00120"></a>00120 <span class="keywordtype">int</span> i =1; <a name="l00121"></a>00121 <span class="keywordflow">for</span> (;i<argc && !brkloop;){ <a name="l00122"></a>00122 <span class="keywordflow">switch</span>(argv[i][0]){ <a name="l00123"></a>00123 <span class="keywordflow">case</span> <span class="charliteral">'-'</span>:<span class="comment">//option</span> <a name="l00124"></a>00124 { <a name="l00125"></a>00125 std::string options(argv[i]+1); <a name="l00126"></a>00126 <span class="keywordtype">char</span> n = options.length(); <a name="l00127"></a>00127 <span class="keywordflow">while</span>(n--) { <a name="l00128"></a>00128 <a name="l00129"></a>00129 std::string opt(1,options[n]); <a name="l00130"></a>00130 <a name="l00131"></a>00131 <span class="keywordflow">if</span> (opt==<span class="stringliteral">"v"</span>){ <a name="l00132"></a>00132 invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#aad409c3622fa5fcc39c72d89e6cf117f">setVerbose</a>(<span class="keyword">true</span>); <a name="l00133"></a>00133 verbose = <span class="keyword">true</span>; <a name="l00134"></a>00134 showDoc = <span class="keyword">true</span>; <a name="l00135"></a>00135 <a name="l00136"></a>00136 } <a name="l00137"></a>00137 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt == <span class="stringliteral">"s"</span>){ <a name="l00138"></a>00138 <a name="l00139"></a>00139 invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a6c9d06371d06a1158dd558fce8fb2274">printTypeNames</a>(<span class="keyword">false</span>); <a name="l00140"></a>00140 <a name="l00141"></a>00141 } <a name="l00142"></a>00142 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt == <span class="stringliteral">"d"</span>){ <a name="l00143"></a>00143 <a name="l00144"></a>00144 showDoc = <span class="keyword">true</span>; <a name="l00145"></a>00145 <a name="l00146"></a>00146 } <a name="l00147"></a>00147 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt == <span class="stringliteral">"e"</span>){ <a name="l00148"></a>00148 <a name="l00149"></a>00149 accept_headers = <span class="keyword">true</span>; <a name="l00150"></a>00150 <a name="l00151"></a>00151 } <a name="l00152"></a>00152 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt == <span class="stringliteral">"l"</span>){ <a name="l00153"></a>00153 <a name="l00154"></a>00154 listops=<span class="keyword">true</span>; <a name="l00155"></a>00155 <a name="l00156"></a>00156 } <a name="l00157"></a>00157 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt == <span class="stringliteral">"x"</span>){ <a name="l00158"></a>00158 opt = argv[i+1]; <a name="l00159"></a>00159 <span class="keywordtype">size_t</span> pos=opt.find(<span class="charliteral">':'</span>); <a name="l00160"></a>00160 <a class="code" href="namespaceXmlUtils.html#aac778a12893c4ea49ccccc2cbd1d4f87">XmlUtils::setProxyHost</a> (opt); <a name="l00161"></a>00161 <span class="keywordflow">if</span>(pos==std::string::npos){ <a name="l00162"></a>00162 <a name="l00163"></a>00163 <a class="code" href="namespaceXmlUtils.html#aac778a12893c4ea49ccccc2cbd1d4f87">XmlUtils::setProxyHost</a> (<a class="code" href="namespaceXmlUtils.html#a182783e6a4045ea122bd08e564b15c74">XmlUtils::getProxyHost</a> () + <span class="stringliteral">":80"</span>); <a name="l00164"></a>00164 } <a name="l00165"></a>00165 <a class="code" href="namespaceXmlUtils.html#a6229485431678d0122c6cc86d4c438c2">XmlUtils::setProxy</a> (<span class="keyword">true</span>); <a name="l00166"></a>00166 i+=1; <a name="l00167"></a>00167 <span class="keywordflow">break</span>; <a name="l00168"></a>00168 } <a name="l00169"></a>00169 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt == <span class="stringliteral">"U"</span>){ <a name="l00170"></a>00170 opt = argv[i+1]; <a name="l00171"></a>00171 <span class="keywordtype">size_t</span> pos=opt.find(<span class="charliteral">':'</span>); <a name="l00172"></a>00172 <a class="code" href="namespaceXmlUtils.html#a7b37e31bd9868413ed7490e7e9bd46fd">XmlUtils::setProxyUser</a> (opt.substr(0,pos)); <a name="l00173"></a>00173 <span class="keywordflow">if</span>(pos!=std::string::npos) <a name="l00174"></a>00174 <a class="code" href="namespaceXmlUtils.html#a44575735ad84bbe13d2b36f19481e0a8">XmlUtils::setProxyPass</a> (opt.substr(pos+1)); <a name="l00175"></a>00175 <span class="keywordflow">else</span> <a name="l00176"></a>00176 accept_password = <span class="keyword">true</span>; <a name="l00177"></a>00177 i+=1; <a name="l00178"></a>00178 <a class="code" href="namespaceXmlUtils.html#a6229485431678d0122c6cc86d4c438c2">XmlUtils::setProxy</a> (<span class="keyword">true</span>); <a name="l00179"></a>00179 <span class="keywordflow">break</span>; <a name="l00180"></a>00180 } <a name="l00181"></a>00181 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt ==<span class="stringliteral">"p"</span>){ <a name="l00182"></a>00182 <a name="l00183"></a>00183 <span class="keywordflow">if</span>(<a class="code" href="wsdl_8cpp.html#a8a0d2331b278b95cdc364d4d53ae2426">printPortTypes</a>(argv[i+1])) <a name="l00184"></a>00184 <span class="keywordflow">return</span> 0; <a name="l00185"></a>00185 <span class="keywordflow">else</span> <a name="l00186"></a>00186 <span class="keywordflow">return</span> 1; <a name="l00187"></a>00187 } <a name="l00188"></a>00188 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt ==<span class="stringliteral">"h"</span>){ <a name="l00189"></a>00189 <a class="code" href="schema_8cpp.html#ae8605e2b78cd4a81b6c6b5c30cb7366a">usage</a>(); <a name="l00190"></a>00190 <span class="keywordflow">return</span> 0; <a name="l00191"></a>00191 } <a name="l00192"></a>00192 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (opt == <span class="stringliteral">"g"</span>){ <a name="l00193"></a>00193 <a name="l00194"></a>00194 generateSoapMsg = <span class="keyword">true</span>; <a name="l00195"></a>00195 } <a name="l00196"></a>00196 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(opt == <span class="stringliteral">"o"</span>){ <a name="l00197"></a>00197 <a name="l00198"></a>00198 occurs = <span class="keyword">true</span>;<span class="comment">//ask for occurrence constraints</span> <a name="l00199"></a>00199 <a name="l00200"></a>00200 } <a name="l00201"></a>00201 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(opt == <span class="stringliteral">"t"</span>){ <a name="l00202"></a>00202 opt = argv[i+1]; <a name="l00203"></a>00203 timeout=atoi(opt.c_str()); <a name="l00204"></a>00204 i+=1; <a name="l00205"></a>00205 <span class="keywordflow">break</span>; <a name="l00206"></a>00206 } <a name="l00207"></a>00207 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(opt == <span class="stringliteral">"r"</span>){ <a name="l00208"></a>00208 processResponse = <span class="keyword">true</span>; <a name="l00209"></a>00209 } <a name="l00210"></a>00210 <span class="keywordflow">else</span>{ <a name="l00211"></a>00211 std::cerr<<<span class="stringliteral">"Unknown option "</span><<argv[i]<<std::endl; <a name="l00212"></a>00212 <a class="code" href="schema_8cpp.html#ae8605e2b78cd4a81b6c6b5c30cb7366a">usage</a>(); <a name="l00213"></a>00213 <span class="keywordflow">return</span> 2; <a name="l00214"></a>00214 } <a name="l00215"></a>00215 <a name="l00216"></a>00216 } <a name="l00217"></a>00217 i++; <a name="l00218"></a>00218 <span class="keywordflow">break</span>; <a name="l00219"></a>00219 <a name="l00220"></a>00220 } <a name="l00221"></a>00221 <span class="keywordflow">default</span>: <a name="l00222"></a>00222 brkloop = <span class="keyword">true</span>; <a name="l00223"></a>00223 <span class="comment">//end of options</span> <a name="l00224"></a>00224 <span class="keywordflow">break</span>; <a name="l00225"></a>00225 } <a name="l00226"></a>00226 } <a name="l00227"></a>00227 <a name="l00228"></a>00228 <span class="keywordflow">if</span> (<a class="code" href="namespaceXmlUtils.html#a1725a578f019155cc8be8040488bfe54">XmlUtils::getProxy</a> () && accept_password){ <a name="l00229"></a>00229 <a name="l00230"></a>00230 <a class="code" href="namespaceXmlUtils.html#a44575735ad84bbe13d2b36f19481e0a8">XmlUtils::setProxyPass</a> (<a class="code" href="namespaceXmlUtils.html#a58f6a2b2eb995fc0fc00f12167bd55d9">XmlUtils::acceptSecretKey</a>(<span class="stringliteral">"Proxy Password"</span>)); <a name="l00231"></a>00231 std::cout<<endl; <a name="l00232"></a>00232 } <a name="l00233"></a>00233 <a name="l00234"></a>00234 <span class="keywordflow">if</span> (i < argc){ <a name="l00235"></a>00235 <span class="keywordflow">if</span>(!invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a6b02e2f56c8e5d4081f297a24fc40e7d">setWSDLUri</a>(argv[i])) { <a name="l00236"></a>00236 <a name="l00237"></a>00237 std::cerr<<<span class="stringliteral">"Error processing "</span><<argv[i]<<std::endl; <a name="l00238"></a>00238 std::cerr<<invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a640cab9f0266c0668bbc0a03ca8f8533">errors</a>()<<std::endl; <a name="l00239"></a>00239 <span class="keywordflow">return</span> 1; <a name="l00240"></a>00240 } <a name="l00241"></a>00241 <span class="preprocessor">#ifdef LOGGING</span> <a name="l00242"></a>00242 <span class="preprocessor"></span> std::cerr<<invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a640cab9f0266c0668bbc0a03ca8f8533">errors</a>()<<std::endl; <a name="l00243"></a>00243 <span class="preprocessor">#endif</span> <a name="l00244"></a>00244 <span class="preprocessor"></span> i++; <a name="l00245"></a>00245 } <a name="l00246"></a>00246 <span class="keywordflow">else</span>{ <a name="l00247"></a>00247 <a name="l00248"></a>00248 <a class="code" href="schema_8cpp.html#ae8605e2b78cd4a81b6c6b5c30cb7366a">usage</a>(); <a name="l00249"></a>00249 <span class="keywordflow">return</span> 2; <a name="l00250"></a>00250 } <a name="l00251"></a>00251 <a name="l00252"></a>00252 <span class="keywordflow">if</span> (verbose) <a name="l00253"></a>00253 std::cout<<invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a640cab9f0266c0668bbc0a03ca8f8533">errors</a>()<<std::endl; <a name="l00254"></a>00254 <a name="l00255"></a>00255 <span class="keywordflow">if</span> (i<argc && !listops){ <a name="l00256"></a>00256 <a name="l00257"></a>00257 <span class="keywordflow">if</span>(!invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#af361fbbd3b4080ebb711f2f09c58ab29" title="set the operation to invoke">setOperation</a>(argv[i])){ <a name="l00258"></a>00258 <a name="l00259"></a>00259 std::cerr<<<span class="stringliteral">"Unkown operation name "</span><<argv[i]<<std::endl; <a name="l00260"></a>00260 <span class="keywordflow">return</span> 2; <a name="l00261"></a>00261 } <a name="l00262"></a>00262 i++; <a name="l00263"></a>00263 } <a name="l00264"></a>00264 <span class="keywordflow">else</span>{ <a name="l00265"></a>00265 <a name="l00266"></a>00266 std::vector<std::string> ops; <a name="l00267"></a>00267 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> choice = 0; <a name="l00268"></a>00268 <span class="keywordflow">if</span> (invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a22ea77ffa0118167feacbf5e0f4199dc" title="return names of operations (only for the SOAP binding portType)">getOperations</a>(ops)){ <a name="l00269"></a>00269 <a name="l00270"></a>00270 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> s = 0;s<ops.size();s++){ <a name="l00271"></a>00271 <a name="l00272"></a>00272 std::cout<<s+1<<<span class="stringliteral">"."</span><<ops[s]; <a name="l00273"></a>00273 <a name="l00274"></a>00274 <span class="keywordflow">if</span> (showDoc) { <a name="l00275"></a>00275 <a name="l00276"></a>00276 std::string doc = invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#ae5e3f45a7f1e3c93b4821f0d24a9e8dd">getOpDocumentation</a>(ops[s]); <a name="l00277"></a>00277 <span class="keywordflow">if</span> (!doc.empty()) <a name="l00278"></a>00278 std::cout<<<span class="stringliteral">"("</span><<doc<<<span class="stringliteral">")"</span>; <a name="l00279"></a>00279 } <a name="l00280"></a>00280 std::cout<<endl; <a name="l00281"></a>00281 } <a name="l00282"></a>00282 <span class="keywordflow">if</span> (listops == <span class="keyword">true</span>){ <a name="l00283"></a>00283 <a name="l00284"></a>00284 <span class="keywordflow">return</span> 0; <a name="l00285"></a>00285 } <a name="l00286"></a>00286 <span class="keywordflow">while</span> (choice==0){ <a name="l00287"></a>00287 <a name="l00288"></a>00288 std::cout<<<span class="stringliteral">"Choose one of the above operations [1-"</span><<ops.size()<<<span class="stringliteral">"] :"</span>; <a name="l00289"></a>00289 std::cin>>choice; <a name="l00290"></a>00290 <span class="keywordflow">if</span> (choice>0 && choice<=ops.size()) <a name="l00291"></a>00291 <span class="keywordflow">break</span>; <a name="l00292"></a>00292 <span class="keywordflow">else</span> <a name="l00293"></a>00293 choice=0; <a name="l00294"></a>00294 } <a name="l00295"></a>00295 } <a name="l00296"></a>00296 <span class="keywordflow">else</span> { <a name="l00297"></a>00297 <a name="l00298"></a>00298 std::cerr<<<span class="stringliteral">"No operation found or missing <binding> section"</span><<std::endl; <a name="l00299"></a>00299 <span class="keywordflow">return</span> 2; <a name="l00300"></a>00300 } <a name="l00301"></a>00301 <span class="keywordflow">if</span> (!invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#af361fbbd3b4080ebb711f2f09c58ab29" title="set the operation to invoke">setOperation</a>(ops[choice-1])){ <a name="l00302"></a>00302 <a name="l00303"></a>00303 std::cerr<<<span class="stringliteral">"Couldn't invoke operation "</span><<std::endl<<invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a640cab9f0266c0668bbc0a03ca8f8533">errors</a>()<<std::endl; <a name="l00304"></a>00304 <span class="keywordflow">return</span> 1; <a name="l00305"></a>00305 } <a name="l00306"></a>00306 } <a name="l00307"></a>00307 <span class="keywordflow">if</span>(!accept_headers && invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#ad958aabe79f80cec39d27d2849f318b1">nInputHeaders</a>()>0){ <a name="l00308"></a>00308 <a name="l00309"></a>00309 std::cout<<<span class="stringliteral">"Warning:This operation has some SOAP headers in its inputs!(use -e)"</span><<std::endl; <a name="l00310"></a>00310 } <a name="l00311"></a>00311 <a name="l00312"></a>00312 <span class="keywordflow">if</span> (invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a53fbe5978872d408186a329abbecb149">status</a>()){ <a name="l00313"></a>00313 <a name="l00314"></a>00314 <span class="keywordtype">int</span> <span class="keywordtype">id</span> =0,minimum,maximum,n; <a name="l00315"></a>00315 <a class="code" href="namespaceSchema.html#acbe1398d097409fb3c2f948fa876711d">Schema::Type</a> t; <a name="l00316"></a>00316 std::string param; <a name="l00317"></a>00317 std::string val; <a name="l00318"></a>00318 std::vector<std::string> values; <a name="l00319"></a>00319 std::vector<std::string> parents; <a name="l00320"></a>00320 <a name="l00321"></a>00321 <span class="keywordflow">do</span>{ <a name="l00322"></a>00322 <a name="l00323"></a>00323 <span class="keywordflow">if</span> (accept_headers && invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#ad958aabe79f80cec39d27d2849f318b1">nInputHeaders</a>()>0){ <a name="l00324"></a>00324 <a name="l00325"></a>00325 <span class="keywordtype">id</span> = invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a6ee173c36b9e08abf3679aecb509a610">getNextHeaderInput</a>(param,t,minimum,maximum,parents); <a name="l00326"></a>00326 <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == -1){ <a name="l00327"></a>00327 accept_headers=<span class="keyword">false</span>;<span class="comment">//done with headers</span> <a name="l00328"></a>00328 <span class="keywordflow">continue</span>; <a name="l00329"></a>00329 } <a name="l00330"></a>00330 } <a name="l00331"></a>00331 <span class="keywordflow">else</span>{ <a name="l00332"></a>00332 <a name="l00333"></a>00333 <span class="keywordtype">id</span> = invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a71601c7739c93821b6fe6967d50d3b8b">getNextInput</a>(param,t,minimum,maximum,parents); <a name="l00334"></a>00334 } <a name="l00335"></a>00335 <span class="keywordflow">if</span> (<span class="keywordtype">id</span> == -1) <a name="l00336"></a>00336 <span class="keywordflow">break</span>; <a name="l00337"></a>00337 n = minimum; <a name="l00338"></a>00338 <span class="keywordflow">if</span> (occurs && minimum < maximum) { <a name="l00339"></a>00339 values.clear(); <a name="l00340"></a>00340 std::cout<<param<<<span class="stringliteral">"["</span><<minimum<<<span class="stringliteral">","</span><<maximum<<<span class="stringliteral">"] Enter number of occurrences:"</span>; <a name="l00341"></a>00341 cin>>n; <a name="l00342"></a>00342 <a name="l00343"></a>00343 <span class="keywordflow">if</span> (n<minimum || n>maximum){ <a name="l00344"></a>00344 <a name="l00345"></a>00345 std::cerr<<<span class="stringliteral">"Didnt match occurrence constraints"</span><<std::endl; <a name="l00346"></a>00346 <span class="keywordflow">return</span> 2; <a name="l00347"></a>00347 } <a name="l00348"></a>00348 <span class="keywordflow">while</span>(n--) { <a name="l00349"></a>00349 <a name="l00350"></a>00350 <span class="keywordflow">if</span> (i <argc) { <a name="l00351"></a>00351 val = argv[i++]; <a name="l00352"></a>00352 } <a name="l00353"></a>00353 <span class="keywordflow">else</span> { <a name="l00354"></a>00354 std::cout<<param<<<span class="stringliteral">": "</span>; <a name="l00355"></a>00355 cin>>val; <a name="l00356"></a>00356 } <a name="l00357"></a>00357 values.push_back(val); <a name="l00358"></a>00358 } <a name="l00359"></a>00359 <span class="keywordflow">if</span> (!invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a14825d271f5b6059bf5e3e5d344ae50a">setInputValue</a>(<span class="keywordtype">id</span>,values)){ <a name="l00360"></a>00360 <a name="l00361"></a>00361 std::cerr<<<span class="stringliteral">"Incorrect input values "</span><<std::endl; <a name="l00362"></a>00362 <span class="keywordflow">return</span> 2; <a name="l00363"></a>00363 } <a name="l00364"></a>00364 } <a name="l00365"></a>00365 <span class="keywordflow">else</span>{ <a name="l00366"></a>00366 <a name="l00367"></a>00367 <span class="keywordflow">if</span> (i <argc) { <a name="l00368"></a>00368 <a name="l00369"></a>00369 val = argv[i++]; <a name="l00370"></a>00370 } <a name="l00371"></a>00371 <span class="keywordflow">else</span>{ <a name="l00372"></a>00372 <span class="keywordtype">size_t</span> j = 0; <a name="l00373"></a>00373 <span class="keywordflow">for</span> (j=0;j<parents.size()-1;j++){ <a name="l00374"></a>00374 <a name="l00375"></a>00375 std::cout<<parents[j]<<<span class="stringliteral">"."</span>; <a name="l00376"></a>00376 } <a name="l00377"></a>00377 std::cout<<parents[j]<<<span class="stringliteral">": "</span>; <a name="l00378"></a>00378 cin>>val; <a name="l00379"></a>00379 } <a name="l00380"></a>00380 <span class="keywordflow">if</span> (!invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a14825d271f5b6059bf5e3e5d344ae50a">setInputValue</a>(<span class="keywordtype">id</span>,val)){ <a name="l00381"></a>00381 <a name="l00382"></a>00382 std::cerr<<<span class="stringliteral">"Incorrect input value "</span><<val<<std::endl; <a name="l00383"></a>00383 <span class="keywordflow">return</span> 2; <a name="l00384"></a>00384 } <a name="l00385"></a>00385 } <a name="l00386"></a>00386 }<span class="keywordflow">while</span>(1); <a name="l00387"></a>00387 <a name="l00388"></a>00388 <a name="l00389"></a>00389 <span class="keywordflow">if</span> (generateSoapMsg) { <a name="l00390"></a>00390 <a name="l00391"></a>00391 <span class="comment">//output the soap message and exit</span> <a name="l00392"></a>00392 std::cout <<invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#ae9d249a3486864c1c582b8b29613e8e2">getSoapMessage</a>()<<std::endl; <a name="l00393"></a>00393 <span class="keywordflow">return</span> 0; <a name="l00394"></a>00394 <a name="l00395"></a>00395 } <a name="l00396"></a>00396 <a name="l00397"></a>00397 <span class="preprocessor">#ifndef WITH_CURL</span> <a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#ifndef _WIN32</span> <a name="l00399"></a>00399 <span class="preprocessor"></span> std::cerr<<<span class="stringliteral">"libcurl needs to be installed to proceed with invocation"</span><<std::endl; <a name="l00400"></a>00400 std::cerr<<<span class="stringliteral">"Try using the -g option to just print the soap message"</span><<std::endl; <a name="l00401"></a>00401 <span class="keywordflow">return</span> 2; <a name="l00402"></a>00402 <span class="preprocessor">#endif</span> <a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#endif </span> <a name="l00404"></a>00404 <span class="preprocessor"></span> <a name="l00405"></a>00405 <span class="keywordflow">if</span> (invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#ab586331dc80e7775ae45de553806587f">invoke</a>(timeout,(i>=argc || processResponse))){ <a name="l00406"></a>00406 <a name="l00407"></a>00407 <a class="code" href="classSchema_1_1TypeContainer.html">TypeContainer</a>* tc = 0; <a name="l00408"></a>00408 std::string name; <a name="l00409"></a>00409 <a name="l00410"></a>00410 <span class="keywordflow">if</span> (i <argc) { <a name="l00411"></a>00411 <a name="l00412"></a>00412 <span class="keywordflow">try</span> { <a name="l00413"></a>00413 <span class="comment">//the last argument is an xpath expression to get the output</span> <a name="l00414"></a>00414 std::vector<std::string> arr=invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a34272043d1d96078fa0ce9c5dd7d7bab" title="sets the param value for an operation by name of the parameter">getValues</a><std::string>(argv[i++]); <a name="l00415"></a>00415 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> s = 0;s<arr.size();s++) <a name="l00416"></a>00416 std::cout<<arr[s]<<std::endl; <a name="l00417"></a>00417 <a name="l00418"></a>00418 <span class="keywordflow">return</span> 0; <a name="l00419"></a>00419 } <a name="l00420"></a>00420 <span class="keywordflow">catch</span> (<a class="code" href="classWsdlPull_1_1WsdlException.html">WsdlException</a> we) { <a name="l00421"></a>00421 <a name="l00422"></a>00422 std::cerr<<we.<a class="code" href="classWsdlPull_1_1WsdlException.html#a354d911fe01134471959c121e43b4a90">description</a><<std::endl; <a name="l00423"></a>00423 } <a name="l00424"></a>00424 <span class="keywordflow">catch</span> (<a class="code" href="classXmlPullParserException.html">XmlPullParserException</a> xpe) { <a name="l00425"></a>00425 <a name="l00426"></a>00426 std::cerr<<xpe.<a class="code" href="classXmlPullParserException.html#a5e678f53a8e21e41646f669897bf901c">description</a><<std::endl; <a name="l00427"></a>00427 } <a name="l00428"></a>00428 <span class="keywordflow">return</span> 2; <a name="l00429"></a>00429 } <a name="l00430"></a>00430 <span class="keywordflow">while</span>(invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#acf4dc9223c6fdb94935869d2bad67ec9">getNextHeaderOutput</a>(name,tc)) { <a name="l00431"></a>00431 <a name="l00432"></a>00432 <a name="l00433"></a>00433 tc-><a class="code" href="classSchema_1_1TypeContainer.html#a365b251684cf3602ff24219e91c9b1bf">print</a>(std::cout); <a name="l00434"></a>00434 std::cout<<std::endl; <a name="l00435"></a>00435 } <a name="l00436"></a>00436 <a name="l00437"></a>00437 <span class="keywordflow">while</span> (invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a595be2a62ac1db45866e293f270b2bf9">getNextOutput</a>(name,tc)){ <a name="l00438"></a>00438 <a name="l00439"></a>00439 tc-><a class="code" href="classSchema_1_1TypeContainer.html#a365b251684cf3602ff24219e91c9b1bf">print</a>(std::cout); <a name="l00440"></a>00440 std::cout<<std::endl; <a name="l00441"></a>00441 } <a name="l00442"></a>00442 <span class="keywordflow">return</span> 0; <a name="l00443"></a>00443 } <a name="l00444"></a>00444 <span class="keywordflow">else</span>{ <a name="l00445"></a>00445 cerr<<invoker.<a class="code" href="classWsdlPull_1_1WsdlInvoker.html#a640cab9f0266c0668bbc0a03ca8f8533">errors</a>()<<std::endl; <a name="l00446"></a>00446 cerr<<<span class="stringliteral">"Run with -v option and see request.log and response.log"</span><<endl; <a name="l00447"></a>00447 } <a name="l00448"></a>00448 } <a name="l00449"></a>00449 <span class="keywordflow">return</span> 1; <a name="l00450"></a>00450 } <a name="l00451"></a>00451 <a name="l00452"></a>00452 <a name="l00453"></a>00453 <a name="l00454"></a>00454 </pre></div></div> <!--- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Defines</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <hr class="footer"/><address style="text-align: right;"><small>Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2-20100208 </small></address> </body> </html>