You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2004/09/08 09:58:24 UTC

cvs commit: ws-axis/c/docs lininstall-guide.html linuser-guide.html windev-guide.html wininstall-guide.html winuser-guide.html

samisa      2004/09/08 00:58:24

  Added:       c/docs   lininstall-guide.html linuser-guide.html
                        windev-guide.html wininstall-guide.html
                        winuser-guide.html
  Log:
  Moved the files to doc root to sync up with web site structure
  
  Revision  Changes    Path
  1.1                  ws-axis/c/docs/lininstall-guide.html
  
  Index: lininstall-guide.html
  ===================================================================
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html">
  <title>Axis C++ Linux Installation Guide</title>
  </head>
  <body>
  <h1>Axis C++ Linux Installation Guide</h1>
  </div>
  <div class="h3">
  <div class="h3">
  <h3>Installing and deploying web applications using xml-Axis C++</h3>
  </div>
  <div class="h3">
  <h3>Contents</h3>
  </div>
  
  <li>
  <a href="#Introducti">Introduction</a>
  </li>
  <li>
  <a href="#What">What You Need</a>
  </li>
  <br>
  
  <p>
  <a name="Introducti"></a>
  </p>
  <div class="h3">
  <h3>Introduction</h3>
  </div>
  <p>This guide will help you to start with Axis C++. I'll explain the minimum steps needed to build and run Axis C++, and warn you about the common pitfalls.</p>
  <p>
  <a name="What"></a>
  </p>
  <div class="h3">
  <h3>What You Need</h3>
  </div>
  <p>
  &nbsp &nbsp &nbsp RedHat 9 (2.4.20-8) <br>
  &nbsp &nbsp &nbsp expat-1.95.7 (source) <br>
  &nbsp &nbsp &nbsp xerces-c-src2_2_0 (I build xerces from source) <br>
  &nbsp &nbsp &nbsp httpd-2.0.48 (source)<br>
  &nbsp &nbsp &nbsp apache_1.3.27 (source) </p>
  
  <p><b>Note: </b> If you are using provided configure and Makefile.in's you don't 
  need to run autogen.sh script to generate them for your platform.
  In any case if you need to run it then following versions are recommended
  to be installed in your environment. </p>
  
  <p> 
  autoconf 2.57 <br> 
  automake 1.6.3 <br>
  libtool 1.4.3 <br> 
  gcc 3.2.2</b></p>
  <p> You can download the Axis C++ source or binary from one of the apache mirror sites <br>
      <a href="http://ws.apache.org/axis/cpp/download.html">http://ws.apache.org/axis/cpp/download.html</a><br> <br>
  You can get expat from the uri <a href="http://sourceforge.net/projects/expat/">http://sourceforge.net/projects/expat/</a><br> <br>
  
  You can get xercesc from the uri <a href="http://xml.apache.org/xerces-c/download.cgi">http://xml.apache.org/xerces-c/download.cgi</a><br> <br>
  </p>
  <h3>Source distribution installation </h3>
  <p>Unzip and untar the tgz ball. <br>
  You must define some environment variables in order to build. <br> <br>
  <b>AXISCPP_HOME </b> is where you checkout Axis C++ </p>
  <br>
  <p><b>AXISCPP_HOME="/usr/local/axiscpp"</b><br>
  <b>AXISCPP_DEPLOY="/usr/local/axiscpp_deploy"</b><br>
  <b>LD_LIBRARY_PATH="$AXISCPP_DEPLOY/lib:&lt;path to parser library you use&gt" </b><br>
  <b>export AXISCPP_HOME AXISCPP_DEPLOY LD_LIBRARY_PATH </b><br> </p>
  <br>
  <p><b>AXISCPP_HOME</b> is where you extracted the source distribution.<br>
  <b>AXISCPP_DEPLOY</b> is where Axis C++ will be deployed </p>
  
  <p>Axis C++ core is independant of the parser layer and transport layer.</p>
  <p>You can write your own transport or parser library according to the APIs provided. Currently Axis C++ provides API implementations for Xerces-c and Expat. It also provides it's own client side transport library implementation. In the server side deployment, Axis C++ provides two modules that can be loaded into apache1.3 and apache 2 as shared libraries.</p>
  <p>So this sums upto two possibilities.<br>
  You can deploy Axis C++ server <br>
  &nbsp &nbsp On Apache2 with xercesc parser or expat parser(Only one parser at a time)<br>
  &nbsp &nbsp On Apache1.3 with xercesc parser or expat parser<br>
  </p>
  
  <p><b>When you build Axis C++ you can give options</b></p>
  <p><b>1) Build for Apache2</b><br>
     With Expat parser support only<br>
     With Xerces parser support only<br>
     With both parser support</p>
  <p><b>2) Build for Apache1.3</b><br>
     With Expat parser support only<br>
     With Xerces parser support only<br>
     With both parser support</p>
  <p>You can choose these selections when you configure</p>
  
  <br>
  
  <p> <b>The build process</b> </p>
  <p> <b>cd $AXISCPP_HOME</b></p> <br>
  <p>Following step is optional. If you need to generate configure and Makefile.in's instead
  of the provided one's you need to run autogen.sh <br> <br>
  <b>sh autogen.sh </b> <br> <br>
  <b>./configure --prefix=&lt;Where you need to deploy axis c++&gt \ </b><br>
  <b>--with-apache2=&lt;path to apache2&gt \ </b> <br>
  <b> --with-expat=/usr/local/expat1957 </b> <br>
  <br>
  <b>make</b> <br> <br>
  <b>make install</b> </p>
  
  <p>This will deploy Axis C++ into your folder of choice.<br> <br>
  Following are some of the options available with configure <br> <br>
  <b>--with-apache2 : </b>To use apache2 as server transport library <br> <br>
  <b>--with-apache : </b>To use apache as server transport library<br> <br>
  <b>--with-expat : </b>To build expat parser library <br> <br>
  <b>--with-xercesc :</b>To build xercesc parser library<br> <br>
  <b>--enable-samples : </b>Whether you need to build samples(server and client)<br>
  &nbsp &nbsp &nbsp &nbsp By default samples are built. If you don't want to build
                     the samples then you need to specifically say no <br> <br>
  <b>--enable-testcases : </b>Whether you need to build testcases <br>
  &nbsp &nbsp &nbsp &nbsp By default test cases are built. If you don't want to build the test cases then you need to specifically say no <br> <br>
  <b>--enable-log : </b>Whether to enable log facility. By default this is enabled. If you don't need it say no to this <br> <br>
  <b>--enable-libwww : </b>By default libwww client transport library  is built. If you don't need it say no to this. <br> </p>
  
  <p> You may rename and edit <b>build.sh_sample</b> for one step configuring and building.</p>
  <p>Once you have finished , have a look at <b>$AXISCPP_HOME/build_errors.</b> Most probably you will see many warnings.
  Just ignore them. But if you see any errors it means that build was not successful and check whether you have followed the instructions 
  carefully. </p>
  <p>You can see the folder <b>$AXISCPP_DEPLOY/lib </b>to see what are created</p>
  
  <p> <b>libaxiscpp_mod.so is apache module which is loaded when apache loads <br>
  libaxiscpp_mod2.so is apache2 module which is loaded when apache2 loads <br>
  libserver_engine.so is the Axis C++ server engine which is loaded by libaxis_mod(2).so module <br>
  libaxiscpp_client.so is Axis C++ client library <br>
  libaxis_transport.so is the Axis C++ client transport library <br>
  libaxis_expat.so is the expat parser library implementation for Axis C++ <br>
  libaxis_xercesc.so is the xercesc parser library implmentation for Axis C++ </b> </p>
  
  <p>Also <b>$AXISCPP_HOME/samples/server </b> samples are built and installed in <b>$AXISCPP_DEPLOY/lib</b> </p>
  
  <p><b>$AXISCPP_HOME/samples/client </b> samples are built and executables are in <b>$AXISCPP_DEPLOY/bin</b> </p>
  
  <p>Now you need to add to <b>$&lt;apache install directory&gt/conf/httpd.conf <br>
  $ vi &lt;apache install directory&gt/conf/httpd.conf </b> </p>
  <br>
  <p>At the bottom of the file you have to include following lines and save it.</p>
  <p><b>LoadModule axis_module modules/libaxiscpp_mod2.so</b> (in apache1.3 replace modules with libexec and libaxiscpp_mod2.so with libaxiscpp_mod.so)<br> 
  <b>&lt;Location /axis&gt;</b><br>
  <b>SetHandler axis</b><br>
  <b>&lt;/Location&gt;</b></p>
  
  <p>Now you need the deployment descripter (server.wsdd) to deploy server samples you built.</p>
  <p>By default there is a deployment descripter in <b>$AXISCPP_DEPLOY/conf</b> to deploy samples </p>
   
  <p>In <b>$AXISCPP_DEPLOY/etc/axiscpp.conf</b> file you can give paths to your log files, configuration files, libraries etc. </p>
  
  <br>
  
  <p><p><b># The comment character is '#'</b><br>
  <b>#Available directives are as follows</b><br>
  <b>#(Some of these directives may not be implemented yet)</b><br>
  <b>#</b><br>
  <b>#WSDDFilePath:The path to the server wsdd</b><br>
  <b>#LogPath:The path to the axis log</b><br>
  <b>#ClientLogPath:The path to the axis client log</b><br>
  <b>#ClientWSDDFilePath:The path to the client wsdd</b><br>
  <b>#Transport_http:The HTTP transport library</b><br>
  <b>#Transport_smtp:The SMTP transport library</b><br>
  <b>#XMLParser:The xml parser library</b></p>
  
  <p><b>LogPath:/usr/local/axiscpp_deploy/log/AxisLog</b><br>
  <b>WSDDFilePath:/usr/local/axiscpp_deploy/etc/server.wsdd</b><br>
  <b>ClientLogPath:/usr/local/axiscpp_deploy/log/AxisClientLog</b><br>
  <b>XMLParser:/usr/local/axiscpp_deploy/lib/libaxis_xmlparser.so</b><br>
  <b>Transport_http:/usr/local/axiscpp_deploy/lib/libaxis_transport.so</b></p>
  
  <br>
  
  <p>Now we need to copy apache module(libaxiscpp_mod2.so for apache2 and libaxiscpp_mod.so for apache)
  to the correct places and start apache.<br>
  To do that you can find scripts written in <b>$AXISCPP_DEPLOY/bin.</b> <br>
  <b>cd $AXISCPP_DEPLOY/bin</b> </p>
  
  <p>To deploy on apache2<br>
  <b>sh deploy_apache2.sh</b></p>
  
  <p>To deploy on apache<br>
  <b>sh deploy_apache.sh</b></p>
  
  <p>When you run the above script, <br>
  libaxiscpp_mod2.so is copied to &lt;your apache home&gt/modules folder. <br>
  libaxis_expat.so is renamed to libaxis_xmlparser.so. Also apache is started and libaxiscpp_mod2.so is loaded into apache. <br>
  libaxiscpp_mod2.so is the apache module for Axis C++. This will in term load Axis C++ server engine
  (libserver_engine.so). <br>
  Note that <b>libaxis_xmlparser.so</b> is loaded by the engine dynamically as parsing is required from the engine. </p>
  
  <p>Note that somewhere in the script above, it changes the name<b> libaxis_expat.so</b> to <b>libaxis_xmlparser.so.</b> <br>
  If we use xerces we need to change <b>libaxis_xercesc.so</b> to <b>libaxis_xmlparser.so.</b> </p>
  
  <p>If you have done installation successfully it will display the Axis C++ welcome page when you point to URI <a href="http://localhost/axis">http://localhost/axis</a> <br> <br>
  <b>Note: </b> In the axis welcome page all the services in <b>$AXISCPP_DEPLOY/conf/server.wsdd</b> are listed. This does not mean
  that the libraries corresponding to these services are deployed yet. It merely list whatever in the server.wsdd.</p>
  
  <br>
  <p>To run interop samples <br>
  <b>cd $AXISCPP_DEPLOY/bin </b> <br>
  <b>./base localhost 80 etc.</b> </p>
  
  <p>(Check whether there is a script <b>run_interoptests.sh</b> in that folder which can be used to run all the interop tests) </p>
  
  <p> If you don't get it right check with the following list <br> <br>
  Check whether <b>AXISCPP_HOME</b> is set where you build axis c++ by <br>
  <b>  echo $AXISCPP_HOME </b> <br> <br>
  Check whether <b>AXISCPP_DEPLOY</b> and <b>LD_LIBRARY_PATH</b> is set where you start apache <br>
   Build axis c++ and run clients by <br>
  <b>echo $AXISCPP_DEPLOY <br>
  echo $LD_LIBRARY_PATH </b> <br> <br>
  </p>
  
  <p>Check whether you have necessary permissions to create the deploy folder which you give in configure option prefix. <br>
  eg: configure --prefix=/usr/local/axiscpp_deploy you need permission to write in   /usr/local/ . Otherwise if you type make install you will get permission problems
  </p>
  
  <p>Check whether  paths in server.wsdd are pointing correctly to service or handler libraries <br> <br>
  
  Check whether <b>axiscpp.conf</b> is containing correct entries <br> <br>
  
  Check whether Axis C++  can write to log folder<b>($AXISCPP_DEPLOY/log)</b> </p>
  
  <br>
  
  <h3>Binary distribution installation </h3>
  
  <p>Unzip and untar the tgz ball. <br>
  You must define some environment variables first. </p>
  
  <p><b>AXISCPP_DEPLOY="/usr/local/axiscpp_deploy" </b> <br>
  <b>LD_LIBRARY_PATH="$AXISCPP_DEPLOY/lib:&lt;path to parser library you use&gt" </b><br>
  <b>export AXISCPP_DEPLOY LD_LIBRARY_PATH </b> </p>
  
  <p><b>AXISCPP_DEPLOY</b> is where you extracted the binary distribution </p>
  
  <p>Have a look at the folder <b>$AXISCPP_DEPLOY/lib</b> to see what is there </p>
  
  <p><b>libaxiscpp_mod.so is apache module which is loaded when apache loads</b> <br>
  <b>libaxiscpp_mod2.so is apache2 module which is loaded when apache2 loads </b> <br>
  <b>libserver_engine.so is the Axis C++ server engine which is loaded by libaxis_mod(2).so module </b> <br>
  <b>libaxiscpp_client.so is Axis C++ client library</b> <br>
  <b>libaxis_transport.so is the Axis C++ client transport library </b> <br>
  <b>libaxis_expat.so is the expat parser library implementation for Axis C++ </b> <br>
  <b>libaxis_xercesc.so is the xercesc parser library implmentation for Axis C++ </b> </p>
  
  <p>Also server samples are in <br>
  <b>$AXISCPP_DEPLOY/lib </b> <br>
  Client samples are in <b>$AXISCPP_DEPLOY/bin </b> </p>
  
  <p>Axis C++ core is independant of the parser layer and transport layer. <br> <br>
  You can write your own transport or parser library according to the APIs provided. Currently Axis C++
  provides API implementations for Xerces-c and Expat. It also provides it's own client side transport
  library implementation. In the server side deployment, Axis C++ provides two modules that can be loaded
  into apache1.3 and apache 2 as shared libraries. <br>
  So this sums upto two posibilities. <br>
  You can deploy Axis C++ server <br>
  &nbsp &nbspOn Apache2 with xercesc parser or expat parser(Only one parser at a time) <br>
  &nbsp &nbspOn Apache1.3 with xercesc parser or expat parser </p>
  
  <p>This binary comes with libraries built for apache1.3 and apache2 support and 
  parser libraries both for expat and xercesc </p>
  
  <p>It also comes with all the sample libraries and sample executables and prebuilt tests.
  But If you need to build the samples and tests for yourself from the sample and test source
  do the following </p>
  
  <p><b>Sample and Test build process</b> <br> <br>
  <b>cd $AXISCPP_DEPLOY </b> <br> <br>
  Following step is optional. If you need to generate configure and Makefile.in's instead
  of the provided one's you need to run autogen.sh </p>
  
  <p><b>sh autogen.sh</b> <br> <br>
  <b>./configure --prefix=$AXISCPP_DEPLOY</b> <br> <br>
  <b>make</b> <br> <br>
  <b>make install</b> <br> <br>
  This will put sample libraries into <b> $AXISCPP_DEPLOY/lib</b> and
  sample executables into<b> $AXISCPP_DEPLOY/bin </b> <br> <br>
  Now you need to add to <b>$&lt;apache install directory&gt/conf/httpd.conf</b> <br>
  <b>$ vi &gt;apache install directory&lt/conf/httpd.conf </b> </p>
  
  <p>At the bottom of the file you have to include following lines and save it.</p>
  
  <p><b>LoadModule axis_module modules/libaxiscpp_mod2.so</b> (in apache1.3 replace modules with libexec and libaxiscpp_mod2.so with libaxiscpp_mod.so) <br>
  <b>&lt;Location /axis&gt</b> <br> 
  <b>SetHandler axis </b> <br> 
  <b>&lt;/Location&gt </b>  </p>
  
  <p>Now you need the deployment descripter(server.wsdd) to deploy server samples you built. <br>
  By default there is a deployment descripter in <b> $AXISCPP_DEPLOY/conf </b> to deploy samples </p>
  
  <p>In <b> $AXISCPP_DEPLOY/etc/axiscpp.conf </b> file you can give paths to your log files, configuration files, libraries etc.</p>
  
  <p><b># The comment character is '#'</b> <br>
  <b>#Available directives are as follows </b> <br>
  <b>#(Some of these directives may not be implemented yet) </b> <br>
  <b>#</b> <br>
  <b>#WSDDFilePath:The path to the server wsdd </b> <br>
  <b>#LogPath:The path to the axis log </b> <br>
  <b>#ClientLogPath:The path to the axis client log </b> <br>
  <b>#ClientWSDDFilePath:The path to the client wsdd </b> <br>
  <b>#Transport_http:The HTTP transport library </b> <br>
  <b>#Transport_smtp:The SMTP transport library</b> <br>
  <b>#XMLParser:The xml parser library </b> <br>  <br>
  <b>LogPath:/usr/local/axiscpp_deploy/log/AxisLog </b> <br>
  <b>WSDDFilePath:/usr/local/axiscpp_deploy/etc/server.wsdd </b> <br>
  <b>ClientLogPath:/usr/local/axiscpp_deploy/log/AxisClientLog </b> <br>
  <b>XMLParser:/usr/local/axiscpp_deploy/lib/libaxis_xmlparser.so </b> <br>
  <b>Transport_http:/usr/local/axiscpp_deploy/lib/libaxis_transport.so </b> </p>
  
  <p>Now we need to copy apache module(libaxiscpp_mod2.so for apache2 and libaxiscpp_mod.so for apache)
  to the correct places and start apache. <br>
  To do that you can find scripts written in <b>$AXISCPP_DEPLOY/bin.</b> <br>
  <b>cd $AXISCPP_DEPLOY/bin </b> </p>
  
  <p>To deploy on apache2 <br>
  <b>sh deploy_apache2.sh </b> </p>
  
  <p>To deploy on apache <br>
  <b>sh deploy_apache.sh </b> </p>
  
  <p>When you run the above script, <br>
  libaxiscpp_mod2.so is copied to &lt;your apache home&gt/modules folder.<br>
  libaxis_expat.so is renamed to libaxis_xmlparser.so. Also apache is started and libaxiscpp_mod2. <br>
  libaxiscpp_mod2.so is the apache module for Axis C++. This will in term load Axis C++ server engine
  (libserver_engine.so). <br>
  Note that libaxis_xmlparser.so is loaded by the engine dynamically as parsing is required from the
  engine. </p>
  
  <p>Note that somewhere in the script above it changes the name libaxis_expat.so to libaxis_xmlparser.so. <br>
  If we use xerces we need to change libaxis_xercesc.so to libaxis_xmlparser.so. <br> <br>
  If you have done installation successfully it will display the Axis C++ welcome page when you point to URI <a href="http://localhost/axis">http://localhost/axis</a><br>
  Note: In the axis welcome page all the services in <b> $AXISCPP_DEPLOY/conf/server.wsdd</b> are listed. This does not mean <br>
  that the libraries corresponding to these services are deployed yet. It merely list whatever in the server.wsdd. </p>
  
  <p>To run interop samples <br>
  <b>cd $AXISCPP_DEPLOY/bin </b> <br>
  <b>./base localhost 80 etc.</b> <br>
  (Check whether there is a script <b>run_interoptests.sh</b> in that folder which  can be used to run all the interop tests) </p>
  
  <p> If you don't get it right check with the following list </p>
  
  <p>Check whether <b>AXISCPP_DEPLOY</b> and <b>LD_LIBRARY_PATH</b> is set where you start apache <br>
  Build axis c++ and run clients by <br> <br>
  <b>echo $AXISCPP_DEPLOY</b> <br>
  <b>echo $LD_LIBRARY_PATH </b> </p>
  
  <p>Check whether you have necessary permissions to create the deploy folder which  you give in configure option prefix. <br>
  eg: configure --prefix=/usr/local/axiscpp_deploy you need permission to write in   /usr/local/. Otherwise if you type make install you will get permission problems <br> <br>
  Check whether  paths in server.wsdd are pointing correctly to service or handler libraries <br> <br>
  Check whether <b>axiscpp.conf</b> is containing correct entries <br> <br>
  Check whether Axis C++  can write to log folder<b>($AXISCPP_DEPLOY/log)</b> <br> <br>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  <div id="pdf" align="right">
  <a href="lininstall-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
            PDF</a>
  </body>
  </html>
  
  
  
  
  1.1                  ws-axis/c/docs/linuser-guide.html
  
  Index: linuser-guide.html
  ===================================================================
  <html>
  <head>
  <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Axis C++ Linux User Guide</title>
  </head>
  <body>
  <h1>Axis C++ Linux User Guide</h1>
  </div>
  <div class="h3">
  <div class="h3">
  <h3>Contents</h3>
  </div>
  <dl>
  <dt>
  <a href="#Introducti">Introduction&nbsp;</a>
  </dt>
  <dt>
  <a href="#What">What's in this release</a>
  </dt>
  <dt>
  <a href="#Axis">Axis C++ now delivers the following key features</a>
  </dt>
  <dt>
  <a href="#Installing">Installing Axis and Using this Guide</a>
  </dt>
  <dt>
  <br>
  </dt>
  <dt>
  <a href="#Download">Download Source Distribution</a>
  </dt>
  <dd>
  <a href="#Server">ServerSide Skeleton and Wrappers generated by WSDL2ws Tool.</a>
  </dd>
  <dd>
  <a href="#Deploying">Deploying Services</a>
  </dd>
  <dd>
  <a href="#Client">Client side Stubs Generated by the wsdl2ws Tool</a>
  </dd>
  <dd>
  <a href="#sps">Building Server Side for provided Samples</a>
  </dd>
  <dd>
  <a href="#scls">Building Client Side for provided Samples</a>
  </dd>
  <dd>
  <a href="#handlers">Handlers</a>
  <br>
  </dd>
  <dd>
  <br>
  </dd>
  <dd>
  <br>
  </dd>
  <dt>
  <a href="#Download1">Download Binary</a>
  </dt>
  <dd>
  <a href="#Server1">ServerSide Skeleton and Wrappers generated by WSDL2ws Tool.</a>
  </dd>
  <dd>
  <a href="#Deploying1">Deploying Services</a>
  </dd>
  <dd>
  <a href="#Client1">Client side Stubs Generated by the wsdl2ws Tool</a>
  </dd>
  <dd>
  <a href="#bss">Building Server Side for provided Samples</a>
  <br>
  </dd>
  <dd>
  <a href="#bcs">Building Client Side for provided Samples</a>
  </dd>
  <dd>
  <br>
  </dd>
  </dl>
  <dl>
  <dt>
  <a href="#Getting">Getting a CVS checkout</a>
  </dt>
  <dt>
  <br>
  </dt>
  </dl>
  <p>
  <a name="Introducti"></a>
  </p>
  <div class="h3">
  <h3>Introduction</h3>
  </div>
  <p>Welcome to Axis C++, the opensource c++ implementation of SOAP !</p>
  <p>What is SOAP?&nbsp;</p>
  <p>SOAP is an XML-based communication protocol and encoding format for inter-application communication. Originally conceived by Microsoft and Userland software, it has evolved through several generations and the current spec, SOAP 1.2 is fast growing in popularity and usage. The W3C's XML Protocol working group is in the process of turning SOAP into a true open standard, and as of this writing has released a working draft of SOAP 1.2, which cleans up some of the more confusing areas of the 1.1 spec. SOAP is widely viewed as the backbone to a new generation of cross-platform cross-language distributed computing applications, termed Web Services. What is Axis C++? Axis C++ is essentially a SOAP engine.</p>
  <p>This version is written in C++. Axis C++ SOAP engine adopts most of Axis Java architecture. But it has some major architectural innovations over Axis Java in order to achieve greater performance and efficiency.</p>
  <p>
  <a name="What"></a>
  </p>
  <div class="h3">
  <h3>What's in this release?</h3>
  </div>
  <p>- Soap engine with both client and server support</p>
  <p>- Support for both SOAP 1.1 and SOAP 1.2</p>
  <p>- WSDD based deployment with dynamic deployment tools.</p>
  <p>- Support for all basic types, Complex types and Arrays</p>
  <p>- WSDL2WS tool for building C/C++ components</p>
  <p>- Server side &ndash; Skeletons and Wrappers</p>
  <p>- Client side &ndash; Stubs</p>
  <p>- WSDL2WS tool that generates wrappers, which perform the following functions. These wrappers act as RPC &nbsp; &nbsp;<br> &nbsp;&nbsp; Providers.</p>
  <p>- Serialization</p>
  <p>- Deserialization</p>
  <p>- Method invocation</p>
  <p>- WSDLs hosted statistically in the server.</p>
  <p>- Standalone server (with HTTP support)</p>
  <p>- Web server modules for Apache 1.3 &amp;amp; Apache2 (Linux/Windows)</p>
  <p>- Basic Wrapper Class Generator tool.</p>
  <p>- Web interface to the deployed services and their WSDL s.</p>
  <p>- Sample web services and client applications.</p>
  <p>- Document style web services support<br>
  </p>
  <p>
  <a name="Axis"></a>
  </p>
  <div class="h3">
  <h3>Axis C++ now delivers the following key features</h3>
  </div>
  <p>- Speed: Axis uses SAX (event-based) parsing to acheive significantly greater speed</p>
  <p>- Flexibility</p>
  <p>- Stability , Component oriented Deployment</p>
  <p>- Transport Framework</p>
  <p>- WSDL support</p>
  <p>AxisC++ 1.1 supports the Web Service Description Language, version 1.1, which allows you to easily build stubs to access remote services, and also to automatically export machine-readable descriptions of your deployed services from Axis. We hope you enjoy using Axis c++ 1.1. Please note that this is an open-source effort - if you feel the code could use some new features or fixes, please get involved and lend a hand! The Axis developer community welcomes your participation. Let us know what you think! Please send feedback about the package to <a href="mailto:axis-user@xml.apache.org">axis-user@xml.apache.org</a>
  </p>
  <p>
  <a name="What1"></a>
  </p>
  <p></p>
  <div class="h3">
  <h3>Installing Axis and Using this Guide</h3>
  </div>
  <p>See the Axis Installation Guide for instructions on installing Axis C++</p>
  <p>Before running the examples in this guide, you'll need to make sure that your environment variables and other configurations are set correctly as described in Installation guide. That is you need</p>
  <p>- Axis C++</p>
  <p>- Apache1.3 (or Apache2.0)</p>
  <p>- expat</p>
  <p>- j2SDK1.4</p>
  <p>installed and configured.</p>
  <p>
  <a name="Download"></a>
  </p>
  <p>Let's take a look at a sample Calculator service client that will call methods of a Calculator service deployed on Axis C++.&nbsp;</p>
  <p>
  <strong></strong>
  </p>
  <p>When starting with the valid WSDL file to use Axis C++ you have to get started with the tool called WSDL2Ws which is written in Java. source for WSDL2Ws tool is in</p>
  <p>
  <strong>$AXISCPP_HOME/src/wsdl</strong>
  </p>
  <p>You need the following latest jar files which are in <a href="http://apache.towardex.com/ws/axis/1_2beta/">http://apache.towardex.com/ws/axis/1_2beta/</a> please include them in the <strong>CLASSPATH</strong> .</p>
  <p>- axis.jar</p>
  <p>- commons-discovery.jar</p>
  <p>- commons-logging.jar</p>
  <p>- jaxrpc.jar</p>
  <p>- saaj.jar</p>
  <p>- wsdl4j.jar</p>
  <p>- xml-apis.jar</p>
  <p>The <strong>CLASSPATH</strong> Environment Variable should have the absolute paths of the jars (including the jar file name) given as a colon separated list</p>
  <p>Here is a sample <strong>/home/axisuser/.bash_profile</strong> file where we specified those</p>
  <p>
  <strong>AXIS_JARS_HOME="$AXISCPP_HOME/lib/axisjava"</strong>
  </p>
  <p>
  <strong>AXIS_JARS="$AXIS_JARS_HOME/axis-<br>
  </strong> <strong>ant.jar:$AXIS_JARS_HOME/axis.jar:$AXIS_JARS_HOME/commons-<br>
  </strong> <strong>discovery.jar:$AXIS_JARS_HOME/commons-<br>
  </strong> <strong>logging.jar:$AXIS_JARS_HOME/jaxrpc.jar:$AXIS_JARS_HOME/log4j-<br>
  </strong> <strong>1.2.4.jar:$AXIS_JARS_HOME/saaj.jar:$AXIS_JARS_HOME/wsdl4j.jar"</strong>
  </p>
  <p>
  <strong>JAVA_HOME="/usr/java"</strong>
  </p>
  <p>
  <strong>PATH="$PATH:$JAVA_HOME/bin:."</strong>
  </p>
  <p>
  <strong>CLASSPATH="$CLASSPATH:./:$JAVA_HOME/lib:$AXIS_JARS:"</strong>
  </p>
  <p>
  <strong>export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC AXIS_JARS_HOME</strong>
  </p>
  <p>
  <strong>AXIS_JARS JAVA_HOME CLASSPATH</strong>
  </p>
  <p>Now</p>
  <p>
  <strong>$ cd $AXISCPP_HOME/src/wsdl/</strong>
  </p>
  <p>
  <strong>$ mkdir temp</strong>
  </p>
  <p>
  <strong>$javac -d ./temp -sourcepath . ./org/apache/axis/wsdl/wsdl2ws/*.java</strong>
  </p>
  <p>
  <strong>$cd temp</strong>
  </p>
  <p>
  <strong>$jar -cvf wsdl2ws.jar org</strong>
  </p>
  <p>
  <strong>$cp -f wsdl2ws.jar $AXISCPP_HOME/lib/axis</strong>
  </p>
  <p>add this jar as the first entry into the classpath as well.(In the binary distribution you don't need to create this jar. It is already in $AXISCPP_HOME/lib/axis)</p>
  <p>
  <a name="Server"></a>
  </p>
  <div class="h3">
  <h3>Server side Skeleton And Wrappers Generated by the wsdl2ws Tool</h3>
  </div>
  <p>We use the sample at</p>
  <p>
  <strong>$AXISCPP_HOME/samples/server/simple</strong>
  </p>
  <p>
  <strong>
  <br>
  </strong>
  </p>
  <p>We use this sample to demonstrate the generation of serverside skeletons and how to deploy a web service using it.</p>
  <p>Inside this folder you will find Calculator.wsdl file using which we generate skeleton and Wrappers. Here is the command line arguments to generate the skeleton.</p>
  <p>
  <strong>*important:In this sample we generate the skeltons using Calculator.wsdl and wsdl2ws tool. But in the folder you will find already generated files. If you wish to use those without generating new ones you can do so. We recommend that you deploy the sample with the already generated files in the first round and<br> later do the same with code generated from Calcuator.wsdl.<br>
  </strong>
  </p>
  <p>
  <br> 
  <strong>cd $AXISCPP_HOME/samples/server/simple</strong>
  </p>
  <p>
  <strong>% java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -lc++ -sserver</strong>
  </p>
  <p>Note: If you give <strong>-o. /GenClassesServer</strong> then the server create a folder named GenClassServer and put the source there. Otherwise the source is put in the current folder where the tool is run.</p>
  <p>
  <a name="Deploying"></a>
  </p>
  <div class="h3">
  <h3>Deploying the Service</h3>
  </div>
  <p>The Folder called deploy in the <strong>$AXISCPP_HOME/</strong> should be copied to a folder of your choice .Rename the deploy folder as <strong>"Axis"</strong> . Give all permissions to this folder.</p>
  <p>
  <strong>$ cp &ndash;rf $AXISCPP_HOME/deploy /usr/local</strong>
  </p>
  <p>
  <strong>$ cd /usr/local</strong>
  </p>
  <p>
  <strong>$ mv deploy Axis</strong>
  </p>
  <p>
  <strong>$ chmod -R 777 Axis</strong>
  </p>
  <p>Now set the environment variable <strong>AXIS_HOME</strong> pointing to this directory.</p>
  <p>
  <strong>AXIS_HOME="/usr/local/Axis"</strong>
  </p>
  <p>Note that inside $AXIS_HOME directory there are files called axiscpp.conf_linux and axiscpp.conf_win. Rename axiscpp.conf_linux to axiscpp.conf.&nbsp; Make sure that it has read permissions. This file contains key, value pairs of paths used by the Axis Soap Engine. You can change the WSDDFILEPATH and AXISLOGPATH inside this file according to your choice.</p>
  <p>$ <strong>cd</strong> <strong>$AXISCPP_HOME/samples/server<br>$ sh build.sh<br>
  </strong>
  <br>
  <br>By typing above in&nbsp; the command line the dynamic library ( <strong>libcalculator.so</strong> for example) is created and installed<br>in<br>
  </p>
  <p>
  <strong>$AXIS_HOME/webservices where $AXIS_HOME = /usr/local/apache/Axis</strong>
  </p>
  <p>Modify the <strong>$AXIS_HOME/conf/</strong><strong>server.wsdd</strong> .&nbsp; (You have a sample server.wsdd file entry given below appropriately filled for this service).</p>
  <p>
  <strong>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</strong>
  <br> 
  <strong>&lt;deployment xmlns="http://xml.apache.org/axis/wsdd/"xmlns:C="http://xml.apache.org/axis/wsdd/providers/c"&gt;</strong>
  <br> 
  <strong>&lt;service&gt;</strong>
  <br> 
  <strong>&lt;service name ="Calculator" provider ="CPP:RPC" description:"Simple calculator web service"&gt; &lt;parameter name="classname" &nbsp;value = "/usr/local/Axis/webservices/libcalculator.so" /&gt;</strong>
  </p>
  <p>
  <strong>&lt;parameter name= "allowedMethods" value="add sub mul div "/&gt; &lt;/service&gt;</strong>
  <br>
  </p>
  <p>
  <strong>&lt;/deployment&gt;</strong>
  </p>
  <p>Start the Apache server</p>
  <p>
  <strong>$ /usr/local/apache/bin/apachectl start</strong>
  </p>
  <p>Now open a browser and enter the link http://localhost/axis If the service is correctly deployed then it will be displayed in a table of deployed services which contain information such as service name, link to wsdl and a description of the service.</p>
  <p>
  <a name="Client"></a>
  </p>
  <div class="h3">
  <h3>Client side Stubs Generated by the wsdl2ws Tool</h3>
  </div>
  <p>WSDL2Ws tools will generate the stubs for the client side. You will have C++ Client class and header file.</p>
  <p>
  <strong>$ cd $AXISCPP_HOME/samples/client/simple</strong>
  </p>
  <p>
  <strong>$ cp -f $AXISCPP_HOME/samples/server/simple/Calculator.wsdl ./</strong>
  </p>
  <p>
  <strong>*important:In this sample we generate the stubs using Calculator.wsdl and wsdl2ws tool. But in the folder you will find already generated files. If you wish to use those without generating new ones you can do so. We recommend that you run the sample with the already generated files in the first round and<br> later do the same with code generated from Calcuator.wsdl.</strong>
  <br>
  </p>
  <p>
  <strong>$ java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -lc++ -sclient</strong>
  </p>
  <p>
  <strong>
  <br>Note:</strong> again if you specify <strong>-o./GenClassesClient</strong> you will have source generated inside GenClassClient folder instead of current folder where the tool is run. Before compiling the client you have to write a class which contain a main method in which Calculator instance is created and its methods are called.</p>
  <p>Then fill the samples with the relevant business logics .</p>
  <p>Then fill the main method in a file as follows</p>
  <p>
  <strong>#include "Calculator.h"</strong>
  <br> 
  <strong>#include&lt;stdio.h&gt;</strong>
  <br> 
  <strong>int main()</strong>
  <br> 
  <strong>&nbsp;{</strong>
  <br> 
  <strong>&nbsp;&nbsp;Calculator c;</strong>
  <br> 
  <strong>&nbsp;&nbsp;int intOut;</strong>
  <br> 
  <strong>&nbsp;&nbsp;c.add(20, 40, intOut);</strong>
  <br> 
  <strong>&nbsp;&nbsp;printf("result is = %d\n", intOut);</strong>
  <br> 
  <strong>&nbsp;&nbsp;return 0;</strong>
  <br> 
  <strong>&nbsp;}</strong>
  </p>
  <p>Then build by<br> 
  <strong>cd $AXISCPP_HOME/samples/client</strong>
  <br>
  </p>
  <p>
  <strong>sh build.sh</strong>
  <br>Then to run the calculator sample</p>
  <p>
  <strong>$ cd AXISCPP_HOME/samples/simple</strong>
  </p>
  <p>
  <strong>./calculator &lt;server&gt; &lt;port&gt; &nbsp;&lt;command&gt; &nbsp;&lt;param1&gt; &nbsp;&lt;param2&gt;</strong>
  <br>
  <br> Example:<br>
  </p>
  <p>
  <strong>./calculator locathost 80 add 10 20</strong>
  </p>
  <p>
  <br>
  </p>
  <p>
  <a name="sps"></a>
  <br>
  </p>
  <div class="h3">
  <h3>Building Serverside of &nbsp;provided Samples</h3>
  </div>
  <p>Basically this will include all the Interoptest Samples and calculator sample.</p>
  <br>
  <p>
  <strong>cd $AXISCPP_HOME/samples/server</strong>
  </p>
  <p>
  <strong>$ sh autogen.sh</strong>
  </p>
  <p>
  <strong>$ sh runconfig</strong>
  </p>
  <p>
  <strong>$ make</strong>
  </p>
  <p>
  <strong>$ make install<br>
  </strong>
  </p>
  <p>
  <strong>OR<br>
  </strong>
  </p>
  <p>
  <strong>$ sh build.sh&nbsp;<br>
  </strong>
  </p>
  <p>Once you type the above command all the samples will be deployed in $AXIS_HOME/webservices folder.<br>you also have sample $AXIS_HOME/conf/server.wsdd_linux file which you should rename to server.wsdd,<br>which contain all the neccessary entries for these sevices.<br>
  <br>
  </p>
  <strong>Restart Apache</strong>
  <br>
  <p>
  <a name="scls"></a>
  </p>
  <br>
  <div class="h3">
  <h3>Building Client Side of the provided samples</h3>
  </div>
  <p>
  <strong>cd $AXISCPP_HOME/samples/client</strong>
  </p>
  <p>
  <strong>$ sh autogen.sh</strong>
  </p>
  <p>
  <strong>$ sh runconfig</strong>
  </p>
  <p>
  <strong>$ make</strong>
  </p>
  <p>
  <strong>$ make install<br>
  </strong>
  </p>
  <p>
  <strong>OR<br>
  </strong>
  </p>
  <strong>$ sh build.sh</strong>
  <br>
  <br>
  <p>sample executables will be created in your current folder.<br>to run samples one by one</p>
  <p>
  <strong><strong>$ ./base localhost 80 &nbsp;</strong></strong>
  </p>
  <p>
  <strong><strong>
  <br>
  </strong></strong>
  </p>
  <p>to run all the samples at once<br>sh run_interoptests.sh (Note: local host and port 80 is assumed)</p>
  <p>
  <strong></strong>
  </p>
  <br>
  <p>
  <strong><strong></strong></strong>
  </p>
  <p>
  <a name="handlers"></a>
  </p>
  <div class="h3">
  <h3>Handlers</h3>
  </div>
  <p>Handlers are pluggable components to Axis C++. We have included a set of sample handlers for your reference. You could write your own handlers by following the instructions which are given for the sample Handlers.</p>
  <p>Note: If you are using Client side Handlers you need to enter the following entry in the AXIS_HOME/axiscpp.conf configuration file.</p>
  <p>CLIENTWSDDFILEPATH:Axis\conf\client.wsdd</p>
  <p>After entering this entry your AXIS_HOME/axiscpp.conf configuration file will look like:</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;AXISLOGPATH:Axis\logs\AxisLog.txt</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;WSDDFILEPATH:Axis\conf\server.wsdd</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;CLIENTWSDDFILEPATH:Axis\conf\client.wsdd</p>
  <br>
  <p>
  <strong><strong>Testing the sample Handlers</strong></strong>
  </p>
  <p>We have included the following sample Handlers for your reference.</p>
  <p>1) echoStringHeaderHandler (A server side handler sample)</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;This sample handler will simply echo (i.e send back) the string which you send in the SOAP request.</p>
  <p>2) testHandler (A client side handler sample)</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;This sample handler will simply add a SOAP Header to the generated SOAP request.</p>
  <br>
  <p>Please note that these are very primitive sample handlers and are presented here to give you an idea about writing your own Handlers.</p>
  <br>
  <p>
  <strong><strong>echoStringHeaderHandler</strong></strong>
  </p>
  <p>
  <strong><strong>Building the Sample Handlers in RedHat linux</strong></strong>
  </p>
  <br>
  <p>
  <strong><strong>Building echoStringHeaderHandler (A server side handler sample)</strong></strong>
  </p>
  <p>The build files are available at AXISCPP_HOME/samples/server/echoStringHeaderHandler. Change your current directory to this direcotory and then you could execute the following.</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; sh autogen.sh</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; sh runconfig</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; make</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; make install</p>
  <p>The handler so file will be created at $AXIS_HOME/handlers/custom/echoStringHeaderHandler.</p>
  <p>
  <strong><strong>Configuring the Handler</strong></strong>
  </p>
  <p>Now edit the AXIS_HOME/conf/server.wsdd to include the handler for a particular service.</p>
  <br>
  <p>&lt;service name="Calculator" provider="CPP:RPC" description="Simple Calculator Axis C++ Service "&gt;</p>
  <p>&lt;requestFlow name="CalculatorHandlers"&gt;</p>
  <p>&lt;handler name="ESHHandler" type="AXIS_HOME/handlers/custom/echoStringHeaderHandler/libeshhandler.so"&gt;</p>
  <p>&lt;/handler&gt;</p>
  <p>&lt;/requestFlow&gt;</p>
  <p>&lt;responseFlow name="CalculatorHandlers"&gt;</p>
  <p>&lt;handler name="ESHHandler" type="AXIS_HOME/handlers/custom/echoStringHeaderHandler/libeshhandler.so"&gt;</p>
  <p>&lt;/handler&gt;</p>
  <p>&lt;/responseFlow&gt;</p>
  <p>&lt;parameter name="allowedMethods" value="add sub mul div "/&gt;</p>
  <p>&lt;parameter name="className" value="Axis\webservices\Calculator.dll" /&gt;</p>
  <p>&lt;/service&gt;</p>
  <br>
  <p>Note: Make sure you specify the correct path of the handler so in the server.wsdd file. Replace the AXIS_HOME with the exact relative path which AXIS_HOME points to. (eg: type="/usr/local/apache2/Axis/handlers/custom/echoStringHeaderHandler/libeshhandler.so )</p>
  <p>Now you are almost done to run your server side handler.</p>
  <p>Restart the Apache server and that is it.</p>
  <p>
  <strong><strong>Running the Handler</strong></strong>
  </p>
  <p>Since this Handler is configured to the Calculator web service in the above step, this Handler will be executed when a client send a SOAP request to the Calculator web service.</p>
  <br>
  <p>
  <strong><strong>testHandler</strong></strong>
  </p>
  <p>
  <strong><strong>Building the Sample Handlers in RedHat linux</strong></strong>
  </p>
  <br>
  <p>
  <strong><strong>Building testHandler (A client side handler sample)</strong></strong>
  </p>
  <p>The build files are available at AXISCPP_HOME/samples/client/testHandler. Change your current directory to this direcotory and then you could execute the following.</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; sh autogen.sh</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; sh runconfig</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; make</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; make install</p>
  <p>The handler so file will be created at $AXIS_HOME/handlers/client/test_handler.</p>
  <p>
  <strong><strong>Configuring the Handler</strong></strong>
  </p>
  <p>Now edit the AXIS_HOME/conf/client.wsdd to include the handler for a particular service.</p>
  <br>
  <p>&lt;service name="Calculator" provider="CPP:DOCUMENT" description="Calculator web service"&gt;</p>
  <p>&lt;requestFlow name="CalculatorHandlers"&gt;</p>
  <p>&lt;handler name="TestHandler" type="AXIS_HOME/handlers/client/test_handler/libtest_client_handler.so"&gt;</p>
  <p>&lt;/handler&gt;</p>
  <p>&lt;/requestFlow&gt;</p>
  <p>&lt;/service&gt;</p>
  <br>
  <p>Note: Make sure you specify the correct path of the handler so in the client.wsdd file. Replace the AXIS_HOME with the exact relative path which AXIS_HOME points to. (eg: type="/usr/local/apache2/Axis/handlers/client/test_handler/libtest_client_handler.so)</p>
  <p>Now you are almost done to run your client side handler.</p>
  <p>Note: If you are using Client side Handlers you need to enter the CLIENTWSDDFILEPATH entry in the AXIS_HOME/axiscpp.conf configuration file. (See above)</p>
  <p>
  <strong><strong>Running the Handler</strong></strong>
  </p>
  <p>Since this Handler is configured to the Calculator web service in the above step, this Handler will be executed when you run the calculator web service client. (It is at AXISCPP_HOME/samples/client/simple/calculator)</p>
  <br>
  <p>
  <strong><strong>Handler Notes:</strong></strong>
  </p>
  <p>1) You can see the Handler behavior through the TCP Monitor. (TCP Monitor is a Axis Java tool)</p>
  <p>2) To get an idea of Handlers look at the Handler sample source files.</p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; a. echoStringHeaderHandler (AXISCPP_HOME/samples/server/echoStringHeaderHandler)</p>
  <p></p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp; b. testHandler (AXISCPP_HOME/samples/client/testHandler)</p>
  <p>
  <br>
  <br>
  </p>
  <p>
  <strong><strong><a name="Getting"></a></strong></strong>
  </p>
  <div class="h3">
  <h3>Getting a CVS checkout</h3>
  </div>
  <p>
  <strong><strong>Visit <a href="http://ws.apache.org/">http://ws.apache.org/</a> click on "axis" and then on</strong> "CVS Repository"</strong> to find details on accessing the CVS Repository. It will have instructions similar to the following."Anyone can checkout source code from our anonymous CVS server. To do so, simply use the following commands (if you are using a GUI CVS client, configure it appropriately):</p>
  <p>
  <strong><strong><strong>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login</strong></strong></strong>
  </p>
  <p>
  <strong><strong><strong>password: anoncvs</strong></strong></strong>
  </p>
  <p>
  <strong><strong><strong>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout -d &lt;your local folder&gt; ws-axis/c"</strong></strong></strong>
  </p>
  <br>
  <br>
  <div id="pdf" align="right">
  <a href="linuser-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
            PDF</a>
  </body>
  </html>
  
  
  1.1                  ws-axis/c/docs/windev-guide.html
  
  Index: windev-guide.html
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html">
    <title>Axis C++ Windows Developers Guide</title>
  </head>
  
  <body>
  <h1>Axis C++ Windows Developers Guide</h1>
  
  <p><a href="#buildaxis">Building and Deploying Axis C++</a><br>
  <a href="#cvscheckout">Getting a cvs checkout</a>
  
  <br>
  <a href="#getapacheexpat">Getting necessary third party software</a>
  
  <br>
  <a href="#installapacheexpat">Installing Apache and Expat</a>
  
  <br>
  <a href="#setupandbuildaxis">Setting up the build environment and building
  Axis</a>
  
  <br>
  <a href="#deployaxis">Deploying Axis in Apache</a>
  
  <br>
  <a href="#deploywebservice">Deploying a web service in Axis C++</a><br>
  
  <a href="#generatefiles">Generating Serverside Skeletons/ wrappers and client
  side stubs</a><br>
  
  <a href="#eclipse">Using eclipse to build and run WSDL2Ws</a>
  <br>
  <a href="#commandline">Building and running WSDL2Ws on the command line</a>
  
  <br><a href="#builddeployws">Building and Deploying the web service</a>
  <br><a href="#providedservices">Building and deploying the provided interop web services samples</a>
  <br><a href="#providedclients">Building and deploying the provided interop client applications</a>
  
  <br>
  <a href="#consumews">Consuming the web service with Axis C++ client</a><br>
  
  
  <a href="#runclient">Coding and Running the client</a>
  
  <br>
  <a href="#transport">Creating and Building your own transport layer</a>
  <br>
  <a href="#parser">Creating and Building your own parser</a>
  
  </p>
  <p> <b>Before going through this guide, please go through the </b><a href="winuser-guide.html"><b>Windows User Guide</b></a> <b> and also be familiar with how to use binaries.</b></p>
  
  <p>
  <a name="buildaxis"></a></p>
  
  <h1>
   Axis C++</h1>
  
  <p>
  <a name="cvscheckout"></a></p>
  
  
  <h2>Getting a cvs checkout</h2>
  
  
  <p>Visit <a href="#http://ws.apache.org/">http://ws.apache.org/</a> Click on �axis� and then on �CVS Repository�
  to find details on how to access the CVS Repository. It will have instructions
  similar to the following.<br>
  <br>
  �Anyone can checkout the source code from our anonymous CVS server. To do so,
  simply use the following commands (if you are using a GUI CVS client,
  configure it appropriately): <br>
  
  <br>
  cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login<br>
  
  password: anoncvs<br>
  <br>
  cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ws-axis<br>
  <br>
  The examples given below are based on these lines of instructions.<br>
  <br>
  To use the command line cvs client go to http://www.cvshome.org, click on the
  "CVS Downloads" link.In the resulting page under the heading "CVS downloads",there will be a link named
  "historical download pages", where you can
  download the cvs binaries for Windows. Download the Windows cvs binaries.
  Extract the cvs binaries from the downloaded zip file.When this is extracted there will be a
  �cvs.exe� file . Set the PATH environment variable to
   �cvs.exe� <br> <br>
  You would have to do the following to get a checkout from the command line
  cvs client.<br>
  <br>
  cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login<br>
  Now you will be prompted for the password. Enter the password.<br>
  <br>
  password: anoncvs<br>
  <br>
  Now enter the following cvs command to checkout the axis Repository.<br>
  cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ws-axis <br>
  <br>
  The checkout of the repository will be created in the current directory in a
  folder named �ws-axis�<br>
  <br>
  The checked out folder ws-axis will be referred to as [CHECKOUT_HOME] from
  this point on.<br></p>
  
  <p><a name="getapacheexpat"></a></p>
  
  <h2>Getting necessary third party software</h2>
  
  
  <P><b>Expat XML Parser</b></p>
  
  <p><br>You can get expat binaries from the url http://sourceforge.net/projects/expat/
  <br>
  This documentation was tested with the expat 1.95.7  which is
  distributed as expat_win32bin_1_95_7.exe.<br></p>
  
  <p> (Axis Cpp Developers can use either Xerces-c or the Expat XML Parsers to build the Axis Cpp.
  The Source in CVS supports expat out of the box.)</p>
  
  
  <P><b>Apache Web Server</b></p>
  <br>
  <p>Download the Apache web server from www.apache.org. Currently Axis supports
  apache 1.3.x and 2.X. This documentation was tested with Apache 1.3.28 and
  Apache 2.0.44.</p>
  
  
  <p><a name="installapacheexpat"></a></p>
  
  <h2>Installing Apache and Expat </h2>
  
  <br>
  <p><b>Xerces</b></p>
  <br>
  <p>Run the file
  xerces-c2_2_0-win32.The folder to which Xerces is unzipped will be
  referred to as [XERCES_EXTRACT] from this point onwards.</p>
  
  <br>
  
  <p><b>Expat</b></p>
  <br>
  <p>Run the file
  expat_win32bin_1_95_7.exe . The folder to which Expat is unzipped will be
  referred to as [EXPAT_EXTRACT] from this point onwards.</p>
  
  <br>
  <p><b>Apache</b></p>
  <br>
  <p>Install the Apache web server. By default Apache 1.3.X is installed in
  "C:\Program Files\Apache Group\Apache" and Apache 2.X in "C:\Program
  Files\Apache Group\Apache2". These locations will be referred to as [APACHE_HOME]
  from this point onwards.</p>
  
  
  <p><br>
  
  
  <p><a name="setupandbuildaxis"></a></p>
  
  <h2>Setting up the build environment and building Axis</h2>
  <br>
  <P><b>For Expat Parser</b></p>
  <p>1) Copy [EXPAT_EXTRACT]\source\lib\expat.h from expat binary distribution to [CHECKOUT_HOME]\c\include\expat\ directory <br>
  <br>
  2) Copy [EXPAT_EXTRACT]\lib\libexpat.lib to [CHECKOUT_HOME]\c\lib\expat\ directory.</p>
  
  <p>3) Copy libexpat.dll file from [EXPAT_EXTRACT]\Libs  to %AXISCPP_DEPLOY%/lib/  </p>
  <br> <br>
  <p><b>For Xerces Parser</b></p>
  <p>1) Copy [XERCES_EXTRACT]\lib\xerces-c_2.lib to [CHECKOUT_HOME]\c\lib\xerces\ directory.</p>
  <p>2) Copy xerces-c_2_2_0.dll file from [XERCES_EXTRACT]\bin  to %AXISCPP_DEPLOY%/lib/ </p>
  <p>3) Copy [XERCES_EXTRACT]\include\xercesc to [CHECKOUT_HOME]\c\include\xerces\ directory. </p>
  
  
  <p><b>For apache 1.3.X:</b></p>
  
  
  <p>1) Copy the include files in "[APACHE_HOME]\include" directory to
  "[CHECKOUT_HOME] \c\include\apache1_3\"
  
  <br><br>
  2) Copy the ApacheCore.lib file from [APACHE_HOME]\libexec
  to [CHECKOUT_HOME]\c\lib\apache1_3.</p>
  <br>
  
  <p><b>For apache 2.X:</b></p>
  
  
  
  <p>1) Copy the include files in "[APACHE_HOME]\include" directory to
  "[CHECKOUT_HOME]\c\include\apache2_0\"<br><br>
  
   2) Copy the following lib files libapr.lib, libhttpd.lib files from
  "[APACHE_HOME]\lib" to "[CHECKOUT_HOME]\c\lib\apache2_0".<br>
  </p>
  <br>
  
  <p><b>Building the AxisServer and AxisClient dlls </b> </p>
  <br>
  <p>Build the AxisServer and AxisClient projects.(Click on file in Visual C++ ,open Visual C++ Distribution workspace (Distribution.dsw) at [CHECKOUT_HOME]\c\vc\.
  In the workspace window, File View, right click on  the AxisServer project and AxisClient project ).Which will build the AxisServer.dll and AxisClient.dll </p>
  
  <br>
  <p><b>Building Apache Modules (Apache 1.3.X and Apache 2.X) </b> </p>
  <p>
   In Visual C++ (The version used for this documentation was Visual C++ 6.0)
  click on file ,open Visual C++ Distribution workspace (Distribution.dsw) at
  [CHECKOUT_HOME]\c\vc\.
  In the workspace window, File View, right click on either the project "Apache1_3Module files" or
  "Apache2_0Module files" and click on the "Set as Active Project" to make it the Active
  Project.<br> <br>
  
   Again in Visual C++ right click on either the project "Apache1_3Module" or
  "Apache2_0Module" in the workspace window, File View, and then click on Settings in
  the popup menu. Select the link tab. Select General from the Category drop
  down list. In the Output file name text box put the value
  [APACHE_HOME]\modules\mod_axis.dll and click OK.(To build a Apache Module, AxisServer.lib should be in the settings Link tab ) </p>
  
  <p>Build either Apache1_3Module or Apache2_0Module project.
  In Visual C++ right click on either the project "Apache1_3Module" or
  "Apache2_0Module" in the workspace window, File View and click "build (selection only)"
  to build mod_axis.dll for Apache1_3Module or mod_axis2.dll for Apache2_0Module.
  <br><br>
  (From here onwards we refer to these modules as APACHE_MODULE. Replace it 
  with the correct module for the Apache server version that you have installed). Then build SimpleAxisServer.  
  
  &nbsp;</p>
  <br>
  <p><b>Axis Transport Library</b></p>
  <p>In VC++ distribution workspace build AxisTransport project.Then AxisTransport.dll will be built.</p> <br>
  <p><b>Xerces Parser Library and Expat Parser Library</b></p>
  <p>In VC++ distribution workspace build either AxisXMLParserXerces project or AxisXMLParserExpat project. Then AxisXMLParser.dll will be built.</p>  
  
  <br>
  <p><b> Building AxisTransport.dll  and AxisXMLParser.dll</b>
  <br>Build the AxisTransport and AxisXMLParser projects. Which will build the AxisTransport.dll and AxisXMLParser.dll in [CHECKOUT_HOME]\c\bin. </p>
  <p>(When the projects are built in Debug mode then the Dlls will appear as AxisTransport_D and AxisXMLParser_D.dll)</p> 
  <p><a name="deployaxis"></a></p>
  
  
  <h2>Deploying Axis in Apache</h2>
  <br>
  <p>1) Create a directory structure called "Axis" inside [APACHE_HOME] as
  follows.
  <br>
  (Instead, you can copy the folder [CHECKOUT_HOME]\c\deploy to [APACHE_HOME] and rename it to 
  "Axis" and you will find some of the files that you are asked to create in this guide,
  already existing in that folder)
  <br>
  <br>
  Axis<br>
  |__ lib (Copy [EXPAT_EXTRACT]\Libs\libexpat.dll or <br> &nbsp &nbsp [XERCES_EXTRACT]\bin\xerces-c_2_2_0.dll and paste it inside)<br>
  |__ logs (log files are located here)<br>
  |__ conf (server.wsdd file is located here)<br>
  |__ webservices (The place to put webservice dlls)<br>
  |__ wsdls (wsdl files of the deployed web services are located here)<br>
  
  <br>
  2) Set an environment variable named AXISCPP_DEPLOY and give [APACHE_HOME]\Axis as
  the value.
  <br>
  
  <br>
  i)You will find AxisServer.dll and APACHE_MODULE in [CHECKOUT_HOME]\c\bin directory.
  <br>
  ii)Copy APACHE_MODULE to [APACHE_HOME]\modules directory of your apache installation.
  <br>
  <p>Copy AxisServer.dll ,AxisTransport.dll and AxisXMLParser.dll to [AXISCPP_DEPLOY]\lib\ directory and add that directory to your PATH environment variable.Or to any location specified by your PATH environment variable.</p>    
  
  <br> <br>
  <p>3) Set the "PATH" environment variable to the following directories.
  
  <br>
  [APACHE_HOME]<br>
  [APACHE_HOME]\Axis\lib<br>
  <br> 
  
  4) Include the following lines at the bottom of the apache configuration file [APACHE_HOME]\conf\httpd.conf 
  <br>
  
  
  <br>
  LoadModule axis_module modules/APACHE_MODULE
  
  <br>
  &lt;Location /axis&gt;
  
  <br>
  SetHandler axis
  
  <br>
  &lt;/Location&gt;
  <br>
  <br>
  5) Create a file in [APACHE_HOME]\Axis named "axiscpp.conf" which should
  contain the following lines.
  
  <br>
  
  
  <br>
  LogPath:XXXX<br>
  WSDDFilePath:YYYY<br>
  Transport_http:ZZZZ (Not necessary)<br>
  XMLParser:WWWW<br>
  
  <br>
  XXXX is the path to a file named AxisLog (The log file)and YYYY 
  is the path to the server.wsdd file.ZZZZ is the path to AxisTransport.dll if it's a HTTP(if the selected transport is SMTP then should give that path.)WWWW is the path to AxisXMLParser.dll<br>
  <br>
  i.e.<br>
  LogPath:[APACHE_HOME]\Axis\logs\AxisLog.log  
  
  <br>
  WSDDFilePath:[APACHE_HOME]\Axis\conf\server.wsdd <br>
  Transport_http:[APACHE_HOME]\Axis\lib\AxisTransport.dll <br>
  XMLParser:[APACHE_HOME]\Axis\lib\AxisXMLParser.dll</p>  
  
  <p><b>Note:If the AxisTransport.dll and AxisXMLParser.dll paths are not given in axiscpp.conf then the hardcoded values will be used.For that set the path of these two in the PATH environment variable or copy them to the same location as the Client.exe.</b></p>
  <br>
  <p>6) Select start-&gt;programs-&gt;Apache HTTP server-&gt;Control Apache
  Server-&gt;stop to stop the apache server
  
  <br>
  (This is because apache will be started automatically by the installation
  program)
  <br>
  <br>
  Open up a DOS terminal and give the command "apache -k start" to start
  apache (If Apache 2.0 server does not respond when started this way, try "apache -X").
  
  
  <br>
  open a browser and verify whether you can browse http://localhost/ (or give
  the machines ip as http://xxx.xxx.xxx.xxx/). If apache is running you will
  see the Apache start page in the browser.&nbsp;</p>
  <p><a name="deploywebservice"></a></p>
  
  
  
  <h1>Deploying a web service in Axis C++</h1>
  
  
  <p><a name="generatefiles"></a></p>
  
  <h2>Generating Serverside Skeletons/ wrappers and client side stubs</h2>
  
  
  
  <p><a name="eclipse"></a></p>
  
  <h3>Using eclipse to build and run WSDL2Ws</h3>
  
  
  
  <p>In the checked out source code there is a
  
   "wsdl2ws" (i.e. wsdl-to-web
  services) written in java that generates server side Skeletons/wrappers and
  client side stubs using a given WSDL file. This Section describes how this is
  done.
  
  <br>
  To build and run the java tool this section uses the eclipse platform. For
  this documentation eclipse 2.1.0 was used and the jdk version used was
  j2sdk1.4.1_01. You will not be able to build the java tool with jdk versions
  below 1.4.0.<br>
  
  
  <br>
  1) Start the eclipse platform IDE.<br>
  Go to File-&gt;New-&gt;Project.<br>
  
  <br>
  Select java in the "New Project" dialog and click "Next".<br>
  
  <br>
  In the "New" dialog that appears give a project Name (e.g. test). In the "New
  dialog" keep the "use default" Tick Box checked.
  <br>
  Note down the path in the "Directory" Text Box. This location will be
  referred to as [SKELSTUB_HOME] from this point onwards. Click "Next".<br>
  
  
  <br>
  Another dialog named "New� will appear. Select the �Source� tab. Select the
  project that you created (i.e. test).<br>
  Click on �Add Folder��. In the �Source Folder Selection� dialog that appears
  select the project that you created (i.e. test) and click �Create New
  Folder��. In the �New Folder� dialog that appears give a folder name as �src�
  and click �OK�. Click �OK� in the �Source Folder Selection� dialog. Click
  �Yes� on the confirmation message box that pops up. <br>
  
  
  <br>
  Click �Libraries� in the �New� dialog. Click �Add External JARs��. In the
  �JAR Selection� dialog that appears browse to  the location where the latest jars are and select the following JARs.<br>
  <br>
  <b>Note:</b> The latest jars are in <a href="http://apache.towardex.com/ws/axis/1_2beta/">http://apache.towardex.com/ws/axis/1_2beta/</a>
  <br> <br>
  axis.jar
  <br>
  commons-discovery.jar
  <br>
  commons-logging.jar
  <br>
  jaxrpc.jar<br>
  saaj.jar
  <br>
  wsdl4j.jar
  <br>
  xml-apis.jar<br>
  <br>
  Click �Open�.<br>
  <br>
  Click �Finish� on the �New� dialog.<br>
  <br>
  2) Copy the �org� folder inside [CHECKOUT_HOME]\c\src\wsdl to
  [SKELSTUB_HOME]\src. The �org� folder contains the package structure for the
  WSDL2Ws java tool.<br><br>
  3) Go to eclipse and right click on the �Package Explorer� window and click
  on �Refresh� in the popup menu that appears. Now you should be able to see
  the source that was copied, in the �Package Explorer� window. By now eclipse
  would have built the WSDL2Ws tool.<br>
  
  
  <br>
  For this demonstration we will use a Calculator web service and the WSDL file
  the web service is located at [CHECKOUT_HOME]\c\samples\server\simple.<br>
  
  <br>
  Copy the Calculator.wsdl to [SKELSTUB_HOME]<br>
  
  
  <br>
  In eclipse go to �Run-&gt;Run��.
  
  <br>
  In the Java Application item select the New_Configuration.Then select the �Main� tab. In �Project� text box give the
  name of the project you created (i.e. test).
  <br>
  In the �Main Class� text box give the class as
  �org.apache.axis.wsdl.wsdl2ws.WSDL2Ws�.
  
  <br>
  &nbsp;</p>
  
  <p><img border="0" src="images/c/main_class.jpg" width="627" height="340"></p>
  
  <p>Select the �Arguments� tab.</p>
  
  <p>In the �Program Arguments� text
  box give the following argument.</p>
  
  <p>�Calculator.wsdl -o./ServerOut
  -lc++ -sserver�.</p>
  
  <p><img border="0" src="images/c/argument.jpg" width="626" height="272"></p>
  
  <p><b>NOTE: These are the arguments for the java tool WSDL2Ws. The usage of the
  WSDL2Ws is as follows.</b><br>
  Java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws &lt;wsdl file&gt; -o&lt;output
  directory&gt; <br>
  -l&lt;c|c++&gt; -s&lt;(server|client)&gt;.<br>
  Also note that there cannot be any spaces after a switch (i.e. -o, -l).<br>
  <br>
  Click �Run�.<br>
  Now the Skeletons/Wrappers will be generated and you will see messages in the
  eclipse console displaying the generated files. The generated
  Skeletons/Wrappers will be created in a folder named
  [SKELSTUB_HOME]\ServerOut as given in the arguments when you  run the tool.<br>
  <br>
  Similarly to generate the client stubs use the following arguments in eclipse
  and run.<br>
  �Calculator.wsdl -o./ClientOut -lc++ -sclient�.<br>
  The generated Stubs will be created in a folder named
  [SKELSTUB_HOME]\ClientOut.<br>
  &nbsp;</p>
  
  <p><a name="commandline"></a></p>
  
  
  
  <h3>Building and running WSDL2Ws on the command line</h3>
  
  <p>To build the WSDL2Ws java tool on the command line you require jdk1.4 or
  above.<br>
  <br>
  To build WSDL2Ws java tool set the CLASSPATH Environment Variable
  to point to the following jar files.Create a New Folder called wsdl2wsTool\lib and put the above mentioned jars in it. You can find 
  the latest jars in <a href="http://apache.towardex.com/ws/axis/1_2beta/">http://apache.towardex.com/ws/axis/1_2beta/</a> 
  
  <br>
  
  <br>
  axis.jar
  <br>
  commons-discovery.jar
  <br>
  commons-logging.jar
  <br>
  jaxrpc.jar<br>
  saaj.jar
  <br>
  wsdl4j.jar<br>
  xml-apis.jar
  <br><br>
  Open a command window.<br> <br>
  Change directory to [CHECKOUT_HOME]\c\src\wsdl.<br>
  We will refer to this directory as [SKELSTUB_HOME] as we did during generating Skeletons/Wrappers and Stubs with eclipse.
  <br> <br>
  Run the following command to build the java tool.
  <br><b>
  javac -sourcepath . org\apache\axis\wsdl\wsdl2ws\*.java</b>
  <br> <br>
  <b>NOTE: Notice the spaces between the "dot" after the -sourcepath switch</b>
  
  <br>
  If the command finishes without any output then the java tool has been
  built.<br>
  <br>
  Now copy the Calculator.wsdl file in [CHECKOUT_HOME]\c\samples\server\simple, 
  which we use in this example to [SKELSTUB_HOME]<br>
  <br>
  Now run the following command to generate the server side skeletons and
  wrappers in the same [SKELSTUB_HOME].<br>
  <br>
  Java -classpath .;%classpath% org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -o./ServerOut -lc++ -sserver<br>
  <br>
  Give the class path exactly the same order as given above. 
  <br><br>
  If the tool is successful it will display the files it has
  generated. The skeletons and stubs will be generated in
  [SKELSTUB_HOME]\ServerOut.<br>
  <br>
  Run the following command to generate the client stubs.<br>
  <br>
  Java -classpath .;%classpath% org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -o./ClientOut -lc++ -sclient<br>
  <br>
  The generated client stubs will be in [SKELSTUB_HOME]\ClientOut<br>
  
  </p>
  
  <p><a name="builddeployws"></a></p>
  
  <h2>Building and Deploying the web service</h2>
  
   <p>1) If you have followed the above instructions correctly you would have been able to generate the Server 
  side Skeletons and Wrappers for the Calculator.wsdl
  <br><br> 2) Start Visual C++.<br>
  
  <br>
  3) Go to File->New�<br>
  <br>
  4) Select the �Projects� tab.<br>
  
  <br>
  5) Select �Win 32 Dynamic-Link Library�.<br>
  <br>
  6) Give a project name (e.g. ws1), give a folder (say "deployws") as the "location" of the project, select the "create new workspace" radio button, and click �OK�.When this procedure is followed the "ws1" project files are created in a folder named "ws1" inside the "deployws" folder. <br>
  
  <br>
  7) In the dialog that appears select �An empty DLL project� click �Finish� and then �OK�.<br>
  <br>
  8) Right click on the project that you created (i.e. ws1) and click �Add
  Files to Project�� on the menu that appears. In the �Insert Files into
  Project� dialog select the generated .cpp and .h files in
  [SKELSTUB_HOME]\ServerOut and click �OK�.<br>
  <br>9) Right click on the project (i.e. ws1)again and click on �Settings�� on
  the menu that appears. Click the C/C++ tab and select �Preprocessor� from the
  �Category� Drop down list.
  Add Axis include directory [CHECKOUT_HOME]c\include\ to the project In the 
  �Additional include directories�<br>
  
  <br>10) Now add the business logic to the generated Skeletons. The Skeletons in this case are Calculator.h
  and Calculator.cpp
  <br><br>
  11) We will implement two methods that are in Calculator.cpp as follows.
  <br>
  int Calculator::add(int Value0, int Value1)<br>
  {<br>
  return Value0+Value1; //business logic<br>
  }<br>
  int Calculator::subtract(int Value0, int Value1)<br>
  {<br>
  return Value0-Value1; //business logic<br>
  }<br><br>
  12) Right click on the project (i.e. ws1) and click �Build� on the menu that
  appears. Visual C++ should be able to build the project without any errors
  now.<br>
  <br>
  13) The ws1.dll will be built in "ws1\Debug" by Visual
  C++<br><br>
  14) Place the built ws1.dll file in [APACHE_HOME]\Axis\webservices<br><br>
  15) In addition to this create server.wsdd file in
  [APACHE_HOME]\Axis\conf<br>
  <br>
  The server.wsdd file for this example is
  given below</p>
  
  
  <pre>&lt;deployment&gt;
  &lt;service name="Calculator"&gt;
  &lt;parameter name="className"
  value="[APACHE_HOME]\Axis\webservices\ws1.dll"/&gt;
  &lt;parameter name="allowedMethods" value="subtract add "/&gt;
  &lt;/service&gt;
  &lt;/deployment&gt;</pre>
  
  <p>In this file [APACHE_HOME] has to be replaced with the actual value of
  [APACHE_HOME] (i.e. In this case "C:\Program Files\Apache Group\Apache" for
  apache 1.3.x and "C:\Program Files\Apache Group\Apache2" for apache 2.x)<br>
  <br>
  <b>Description of the server.wsdd file</b><br>
  <br>
  The service element specifies the service name.<br>
  &lt;service name="Calculator"&gt;<br>
  <br>
  In this parameter element we specify the parameter className and for it�s value we specify 
  the location of the webservice dll.<br>
  &lt;parameter name="className" value="C:\Program Files\Apache
  Group\Apache\Axis\webservices\ws1.dll"/&gt;<br>
  <br>
  In this parameter element we specify the parameter allowedMethods and for its
  value we specify the methods exposed by the web service (i.e. subtract and add).<br> <br>
  <b>Note: A trailing space should be inserted after every allowed method.</b><br>
  &lt;parameter name="allowedMethods" value="subtract add "/&gt;<br>
  <br>
  16) Now start the Apache web server by typing �apache -k start�. If the Apache server is
  running type �apache -k restart�<br>
  <br>
  17) Now type http://localhost/axis/ in a browser and you will see the
  �Welcome to Axis C++� page with a listing of deployed services and  Calculator service .<br>
  &nbsp;</p>
  
  <p><a name="consumews"></a></p>
  
  
  <h1>Consuming the web service with Axis c++ client</h1>
  
  <p><a name="runclient"></a></p>
  
  <h2>Coding and Running the client</h2>
  
  
  
  <p>1) If you have followed the above instructions you would have been able to generate the Server 
  side Skeletons and Wrappers for the Calculator.wsdl.<br>
  
  <br> 2) Start Visual C++.<br> <br>
  3) Go to File->New�
  <br> <br>
  4) Select the �Projects� tab<br> <br>
  5) Select �Win 32 Console Application�
  <br> <br>
  6) Give a project name (e.g. calclient) and click �OK�. 
  
  Give a project name (e.g. calclient), give a folder ( For e.g: "wsclient") as the "location" of the project, select the "create new workspace" radio button, and click �OK�.When this procedure is followed the "calclient" project files are created in a folder named "calclient" inside the "wsclient" folder. <br>
  
  
  </p>
  
  
  <p>7) In the dialog that appears select �An empty project� click �Finish� and
  then �OK�.
  <br> <br>
  8) Right click on the project that you created (i.e. ws1) and click �Add
  Files to Project�� on the menu that appears.Then Add the generated .cpp and .h files from the [SKELSTUB_HOME]\ClientOut to the project and click �OK�.
  
  <br> <br>
  9) Right click on the project (i.e. calclient) again and click on
  �Settings�� on the menu that appears. Click the �C/C++� tab and select
  �Preprocessor� from the �Category� Drop down list.<br>
  In the �Additional include directories� give [CHECKOUT_HOME]c\include as the include path.<br>
  </p>
  
  
  <p>10) Click the �Link� tab and select �Input� from the �Category� Drop down
  list.
  
  
  <br>Add AxisClient.lib to the �Object/library modules� and in the �Additional library path� give the path.
  AxisClient.lib can be found in [CHECKOUT_HOME]\c\bin once you build the AxisClient,AxisTransport,AxisXMLParserXerces or AxisXMLParserExpat  projects
  of the "Distribution" VC workspace.
  <br>
  
  <br>
  &nbsp;</p>
  
  
  <p>Now the client should be coded. Basically this will be a main method. We
  will write the main method in the file Calculator.cpp of the VC project "calclient". This is the stub
  generated by the java tool in the stub generation step.<br>
  <br>
  Add the following main method to Calculator.cpp<br>
  </p>
  <pre>void main()
  {
  Calculator cal;
  int result = cal.add(22, 33);
  printf("The result is : %d", result);
  }</pre>
  <br>
  
  <p>It is better to have the path to your AxisXMLParser.dll and AxisTransport.dll in axiscpp.conf or have the dlls where the client exe is.</p>
  <p>Right click on the project and click �Build� on the menu that appears.
  
  <p>When the XMLParser is running these steps would occur.<br>
  1. Locate Parser dll.<br>
  2. Create Parser instance by CreateInstance() method.<br>
  3. Give the stream to parser by setInputStream() method.<br>
  4. Call next() method multiple times.<br>
  5. getStatus() to see if the streams are properly passed.<br>
  6. Destroy parser object by DestroyInstance().<br>
  </p>
  <p>If Visual C++ complains about missing libs go to Build-&gt;Rebuild All (Please
  make sure that the apache server is stopped). Now the client exe is built.<br> <br>
  
  Start the Apache server by typing apache -k start and run the exe from Visual C++ by
  going to Build-&gt;Execute calclient.exe. If all goes well, now you would see the SOAP Request,
  SOAP Response and the result printed by calclient.exe.</p>
  
  
  <P><a name="providedservices"></a></p>
  <h2>Building and deploying the provided samples of interop web services</h2>
  <p>
  <br>1) Open the Visual C++ workspace (interoptests.dsw) at [CHECKOUT_HOME]\c\vc\samples\server\interoptests\  and do a batch build of all projects.<br>
  <br>2) You will find the built dynamic libraries at [CHECKOUT_HOME]\c\bin directory. Following are the built DLLs.<br>
  <br>base.dll
  <br>cbase.dll
  <br>cGroupB.dll
  <br>doclitbase.dll
  <br>doclitgroupB.dll
  <br>groupB.dll <br>
  <br>3) Copy these dlls to [APACHE_HOME]\Axis\webservices <br>
  <br>4) Add the required entries to the server.wsdd file in [APACHE_HOME]\Axis\conf to deploy these
  interop services.
  You can find the required entries in the [CHECKOUT_HOME]\c\deploy\conf\server.wsdd_win file.
  You will need to modify the "value" of the "classname" parameter of each service to point to
  the relevant web service dll given above in [APACHE_HOME]\Axis\webservices.
  </p>
  
  <p><a name="providedclients"></a></p>
  <h2>Building and running the provided interop client applications</h2>
  <p>
  <br>1) Open the Visual C++ workspace (interoptests.dsw) at [CHECKOUT_HOME]\c\vc\samples\client\interoptests\ and do a batch build of all projects.<br>
  <br>2) You need to build the AxisClient project in the "Distribution" workspace at [CHECKOUT_HOME]\c\vc\, because you need the AxisClient.lib to compile client applications and AxisClient.dll to run them.<br>
  <br>3) You will find the built console applications and AxisClient.dll at [CHECKOUT_HOME]\c\bin directory. Following are the built .exe files. <br> <br>
  	base.exe <br>
  	cbase.exe<br>
  	cgroupB.exe<br>
  	doclitbase.exe<br>
  	doclitgroupB.exe<br>
  	groupB.exe<br>
  <br>4) In order to run these samples you should have AxisClient.dll in the PATH environment variable or in the same directory where the .exe is.
  </p>
  
  <p><a name="transport"></a></p>
  <h2>Creating and Building your own transport layer</h2>
  <img border="0" src="images/c/parserd/transport.jpg">
  
  <p>When creating your own transport layer refer  SoapTransport.h header file for API.To see an example implementation refer AxisTransport.h and AxisTransport.cpp</p>
  <p>Implement SoapTransport.h interface according to rules described in the header file.
  <br>Transport layer is built separately from Axis. Then Axis loads transport dynamic library through following export functions which you also have to implement. 
  <p>CreateInstance (SoapTransport *pOut)- Used by Axis to create an instance of your transport class<br>
     DestroyInstance (SoapTransport *pIn) - Used by Axis to destroy the created transport class instance</p>
  <p>Compile your transport code and build a dynamic library. Add the name of your transport library to axis configuration file (axiscpp.conf) so that Axis can find your library at runtime.</p>
  
  <p><a name="parser"></a></p>
  <h2>Creating and Building your own parser</h2>
  <img border="0" src="images/c/parserd/parser.jpg">
   
  <p><b>Note:Implement XMLParser.h interface according to the rules described in the header file.</b><br>
  <p>When creating your own parser refer  XMLParser.h header file for API. To see an example implementation refer SoapParserExpat.h,SoapParserExpat.cpp, SoapParserXerces.h and SoapParserXerces.cpp.
  <p>Axis loads the parser dynamic library through following export functions which you also have to implement.</p>
  <p>CreateInstance() - Used by Axis to create an instance of your parser class<br>
     DestroyInstance() - Used by Axis to destroy the created parser class instance </p>
  <p> Compile your parser code and build a dynamic library. Add the name of your parser library to Axis configuration file (axiscpp.conf) so that Axis can find your library at runtime</p>
  
  </body>
  </html>
  
  
  1.1                  ws-axis/c/docs/wininstall-guide.html
  
  Index: wininstall-guide.html
  ===================================================================
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html">
    <title>Axis C++ Windows Installation Guide</title>
  </head>
  
  <body>
  <h1>Axis C++ Windows Installation Guide</h1>
  
  <p>This document contains how to use the binary distribution of Axis C++. These binaries have been tested on following Microsoft platforms, <br>
  Windows 2000 Professional<br> 
  Windows XP 2002 Professional<br></p>
  
  <h1>Contents</h1>
  1. <a href="#dist">What binary distribution contains</a>
  <br>
  2. <a href="#apache">Installation with Apache 1.3.x/2.x web server</a>
  <br>
  3. <a href="#simpleaxis">Installation with Simple Axis Server</a>
  <br>
  4. <a href="#samples">Running Provided Samples</a>
  <br>
  5. <a href="#playsamples">Using Visual C++ to play with provided samples.
  </a>
  <br>
  6. <a href="#writews">Writing your web services and client applications using
  Axis C++.</a><br>
  
  <p><a name="dist"></a></p>
  
  <h1>What binary distribution contains</h1>
  
  <p>1. The binary distribution contains the following folders
  <br>
  
  -&gt; bin<br>
  -&gt; deploy<br>
  -&gt; docs <br>
  -&gt; include<br>
  -&gt; lib<br>
  -&gt; samples<br>
  
  <br>
  2.The folder �bin� contains sample clients and other dlls needed to run the Axis c++ server
  <br> <br>
  
  3.Inside the "deploy" folder following sub folders exist 
  <br>
  
  -&gt; conf (This includes the server.wsdd, which is the deployment descriptor used for deploying services.) <br>
  -&gt; handlers (This includes sample handler dlls) <br>
  -&gt; libs (Contains dlls which are needed by axis.) <br>
  -&gt; logs (Directory for logs) <br>
  -&gt; webservices (Contains sample web services that can be deployed with Axis C++) <br>
  -&gt; wsdls (Contains sample wsdls)<br>
  
  <br>
  4. The "include" folder contains all the include files which are necessary for building Axis c++ clients. <br> <br>
  
  5. "lib" folder contains jars needed to use the wsdl2ws tool. <br>
  <br>
  
  6. "samples" folder contains sources of all the server and client samples including interop tests.</p>
  
  <p><a name=#apache"></a></p>  
  <h1> Installation with Apache 1.3.X/2.X web server</h1>
  
  <p>Steps: <br>
  <br>
  
  1. Install apache web server and locate the installation folder(For the default installation (apache 1.3.X) the path is "C:\Program Files\Apache Group\Apache"  and for apache 2.X the path is  "C:\Program Files\Apache Group\Apache2" ). Lets say this folder is APACHE_FOLDER. <br>
  <br>
  
  2. Unzip the binary distribution to a folder of your choice. Say this folder is AXIS_EXTRACT.<br>
  <br>
  
  3. Inside the extracted folder AXIS_EXTRACT there is a sub folder called deploy. Copy the whole deploy folder to APACHE_FOLDER.<br>
  <br>
  
  4. Rename copied "deploy" folder to "Axis". Lets say this folder is  AXIS_FOLDER.<br>
  <br>
  
  5. Set environment variable AXISCPP_DEPLOY to point to above folder.<br>
  <br>
  
  6. Add AXIS_FOLDER/libs to the PATH environment variable.<br>
  <br>
  
  7. Edit Apache configuration file httpd.conf located in APACHE_FOLDER/conf and add following lines at the end.<br> 
  <br>
  LoadModule axis_module modules/AXISMODULE<br>
  &lt;Location&gt;<br>
  SetHandler axis <br>
  &lt;\Location&gt;<br> <br>
  
  Where AXISMODULE is either mod_axis.dll for apache 1.3.X or mod_axis2.dll for apache 2.X. <br>
  <br>
  
  8. Copy AXISMODULE from the AXIS_EXTRACT/bin folder to APACHE_FOLDER/modules folder.<br> <br>
  
  9. Copy AxisServer.dll and AxisTransport.dll from the AXIS_EXTRACT/bin folder  to AXIS_FOLDER/libs <br>
  <br>
  
  10.If you want to use the Expat parser with Axis C++,rename AxisXMLParser_Expat.dll from AXIS_EXTRACT/bin folder to AxisXMLParser.dll and copy it to AXIS_FOLDER/libs <br>
  <br> </p>
  
  <p><b>Installing the Expat XML parser </b></p>
  
  <p>If you decide to use the Expat parser you need to install the Expat parser. Download the Expat-1.95.7 binary version from <a href="http://sourceforge.net/projects/expat/">http://sourceforge.net/projects/expat/</a> <br>
  Extract the Expat binaries to a folder Called Expat ,we will refer to this folder as [EXPAT_EXTRACT]. <br>
  Copy libexpat.dll file from [EXPAT_EXTRACT]\Libs to [AXISCPP_DEPLOY]/libs/ <br> <br>
  If you want to use the Xerces parser with Axis C++, rename AxisXMLParser_Xerces.dll from AXIS_EXTRACT/bin folder to AxisXMLParser.dll and copy it to AXIS_FOLDER/libs </p>
  
  <p><b>Installing the Xerces XML parser</b>
  <br> 
  If you decide to use the Xerces parser you need to install the Xerces parser. Download the Xerces-C 2.2.0( 32 bit binary release)from:
  <a href="http://xml.apache.org/xerces-c/download.cgi">http://xml.apache.org/xerces-c/download.cgi</a> <br>
  <br>
  Extract the Xerces-C 2.2.0 binary version. We will refer to this folder as [XERCES_EXTRACT]. Copy xerces-c_2_2_0.dll from [XERCES_EXTRACT]/bin/ to [AXISCPP_DEPLOY]/libs/ <br>
  <br> <br>
  
  11. Open the AXIS_FOLDER/axiscpp.conf_win for editing. The contents of the file will look as follows.<br> <br>
  
  LogPath:XXXX <br>
  WSDDFilePath:YYYY <br>
  
  <br>
   XXXX is the path to a file named AxisLog (The log file)and YYYY is the path to the server.wsdd file. Give the appropriate values for XXXX and YYYY as follows.<br> <br>
  
  i.e. <br> <br>
  
  LogPath: [APACHE_HOME]\Axis\logs\AxisLog <br>
  WSDDFilePath: [APACHE_HOME]\Axis\conf\WSDDFILE <br>
  
  <br>
  WSDDFILE is [APACHE_HOME]\Axis\conf\server.wsdd for Apache 1.3 and Apache 2. (There will be three wsdd files in the [APACHE_HOME]\Axis\conf\ rename the relevant wsdd file of your platform to server.wsdd).<br>
  
  Also in order to run the provided samples do the following.<br>
  Open server.wsdd for editing. For each service element, locate the element "parameter", having the value "classname" for the "name" attribute.
  Change the value of the "value" attribute, to have the absolute path to the indicated webservice.dll in that value. <br>  <br>
  
  Rename AXIS_FOLDER/axiscpp.conf_win to AXIS_FOLDER/axiscpp.conf <br> <br>
  
  12. Restart the apache web server. If you have done correctly apache server should start without giving any error.</p> 
  <br> 
  
  <p><b>apache 1.3.X : </b> <br> <br>
  It is recommended to start apache 1.3.X  as "apache -k start" on the command line <br> <br>
  
  <b>apache 2.X :</b> <br> <br>
  While testing the apache 2 module a problem was noted with the apache 2 web server, in that the webserver takes about 98% of CPU time and the server does not even serve the startup page. The workaround for this is to start the apache web server as "apache -X" to make it run single threaded. While this is sufficient to test the apache 2 module this problem needs to be investigated further. <br> <br>
  
  10. Open an internet browser and check http://localhost/axis. If the module has loaded properly then you should get the axis welcome page with a listing of deployed web services.<br> <br>
  
  <p><a name=#simpleaxis"></a></p>
  
  <h1>Installation with Simple Axis Server</h1>
  
  <p>STEPS:</p>
  <p>
  1. Create a folder of your choice. We will call this folder as SIMPLE_AXIS_SERVER_FOLDER. <br> <br>
  2. Unzip axis-c-1.1-win32.zip to a folder of your choice. Say this folder is AXIS_EXTRACT.<br> <br>
  3. Inside the extracted folder AXIS_EXTRACT there is a sub folder called deploy. Copy whole deploy folder to SIMPLE_AXIS_SERVER_FOLDER.<br> <br>
  4. Rename copied "deploy" folder to "Axis". Lets say this folder to be AXIS_FOLDER.<br> <br>
  5. Set environment variable AXISCPP_DEPLOY to point to above folder.<br> <br>
  6. Copy the exe SimpleAxisServer.exe from AXIS_EXTRACT/bin to the SIMPLE_AXIS_SERVER_FOLDER. <br> <br>
  7. Copy the content of AXIS_FOLDER/libs to the SIMPLE_AXIS_SERVER_FOLDER.<br> <br>
  8. Start the SimpleAxisServer by providing the port to which operate. (eg: c:\SimpleAxisServer>SimpleAxisServer 80) </p>
  
  <p><a name="#samples"></a></p>
  <h1>Running Provided Samples</h1>
  
  <p>If Axis installation is a complete success, following sample web services and handlers have already been installed successfully.<br> <br>
  
  You will find the built console applications at AXIS/c/bin directory. Following are the built .exe files. <br> <br>
  1.base.exe <br>
  2.cbase.exe <br>
  3.doclitbase.exe <br>
  4.doclitgroupB.exe <br>
  5.groupB.exe <br>
  6.cgroupB <br>
  
  <br>
  In order to run these samples you should have AxisClient.dll in the PATH environment variable or in the same directory where the client .exe is located.<br> <br>
  
  You can run the provided client programs to confirm whether the Axis cpp server and clients are working fine. To run this sample client applications you need to have the path to libexapt.dll in the "PATH" environment variable or libexapt.dll should be placed where the apache.exe is.<br>
  <b> Note: These sample clients are compiled with the assumption that server is running at localhost port 80.</b><br>
  <br>
  
  <p><a name="#playsamples"></a></p>
  
  <h1>Using Visual C++ to play with provided samples.</h1>
  
  <p>In your AXIS_EXTRACT/samples folder you have the samples. If you are using Visual C++ you can open the workspace file for client applications AXIS_EXTRACT\c\samples\client\interoptests\interoptests.dsw and For Deployable webservices, AXIS_EXTRACT\c\samples\server\interoptests\interoptests.dsw and play with them. There are seven projects in the workspace.
  <br> <br>
  
  <p><a name="#writews"></a></p>
  
  <h1>Writing your web services and client applications using Axis C++.</h1>
  
  <p>For writing your own web services and client applications see the <a href="winuser-guide.html"><b>Windows User Guide</a></b>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  1.1                  ws-axis/c/docs/winuser-guide.html
  
  Index: winuser-guide.html
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html">
    <title>Axis C++ Windows User Guide</title>
  </head>
  
  <body>
  <h1>Axis C++ Windows User Guide</h1>
  
  <h2>Creating And Deploying your own Web Service</h2>
  
  <p><a href="#create">Creating the web service</a><br>
  <a href="#wsdl2ws">How to use the WSDL2WS tool on the command line</a><br>
  
  <a href="#deploy">Deploying your web service</a>
  <br><a href="#deploy">Deploying your web service using AdminClient Tool</a>
  
  
  <br>
  <a href="#client">Coding the client</a>
  
  <br>
  <a href="#sample">Running your sample</a><br>
  
  <a href="#transport">Axis Transport and Parser Library</a><br>
  
  <a href="#handlers">Handlers</a><br><br>
  
  <b>Before you follow this guide, please make sure that you have followed the</b> <a
  href="wininstall-guide.html"><b>Windows Installation guide</b>
  </p>
  
  <p>
  </a>
  <b>Definitions:</b> <br>
  AXIS_EXTRACT -> The folder to which the Axis c++ binary distribution is extracted <br>
  AXIS_FOLDER -> The deploy folder of the binary distribution which is copied to the apache installation
  </p>
  
  
  
  
  <p><a name="create"></a></p>
  
  <h2>Creating the web service</h2>
  <br>
  
  
  <p>Currently axis supports two methods to create and deploy a Web Service.
  <br>
  Method 1) A top down approach where you start with a WSDL. <br>
  Method 2) A bottom up approach where you start with a pre-written web
  service. <br>
  
  
  <br>
  Here we discuss the first approach since the tool to support Method 2 (i.e
  wcg.exe) is in a primitive and frozen state.<br>
  Here the document is written with the idea that the user uses Visual C++
  (VC). But the user could use this guide with a different IDE of his choice. 
  
  <br>
  
  
  <br>
  <b>Method 1</b> <br> <br>
  This method assumes that the user has written the wsdl of the service which he
  needs to deploy. In this method user will start with this wsdl and the tool
  will generate the web service skeleton and other required files. 
  <br>
  <br>
  1) There is a folder called "simple" inside the samples/server folder in your axiscpp binary distribution.  Inside this you can find the relevant wsdl for the calculator sample. Get the wsdl (eg:<a href="../sample/server/simple/Calculator.wsdl">Calculator.wsdl</a>)
  
  
  <br> <br>
  2) Run the WSDL2WS tool (refer the section below 'to use the WSDL2WS tool
  on the command line') and generate the server side skeletons and wrappers.
  These files will be in two new folders which are generated from the tool
  called 'ServerOut' and 'ClientOut'. 
  <br> <br>
  3) Create a VC workspace. 
  
  <br> <br>
  4) Create a 'Win32 Static Library' project in this workspace. 
  <br> <br>
  5) From the generated 'ServerOut'folder, add the following files to this project. <br> Calculator.cpp Calculator.h 
  <br> <br>
  6) Set the include path to the include directory of the binary distribution
  (These include files are in AXIS_EXTRACT/include/). 
  <br> <br>
  7) Fill the empty methods of the generated skeletons.
  <br> <br>
  8) Generate the lib (eg: MyCalculator.lib) 
  <br> <br>
  9) Now create a 'Win32 Dynamic-Link Library' project. 
  <br> <br>
  10) From the generated 'ServerOut'folder,add the following files to this project. <br> CalculatorService.cpp, CalculatorWrapper.cpp and CalculatorWrapper.h 
  
  <br> <br>
  11) Set the include path to the include directory of the binary distribution.
  
  <br> <br>
  12) Add the above created lib (Calculator.lib) as the input library of this
  project. <br> <br>
  13) Build and create the DLL. (Calculator.dll)</p>
  
  <p><a name="wsdl2ws"></a></p>
  
  
  
  <h2>How to use the WSDL2WS tool on the command line</h2>
  
  
  <br>
  
  
  <p>To use WSDL2Ws java tool on the command line you require jdk1.4 or
  above. <br>
  <br>
  To use WSDL2Ws java tool you have to set the CLASSPATH Environment Variable to
  point to the following latest jar files.<br> <br>
  
  <b>Note:</b> The latest jar files are in <a href="http://apache.towardex.com/ws/axis/1_2beta/">http://apache.towardex.com/ws/axis/1_2beta/</a>
  <br> <br>
  
  <br>
  axis.jar
  
  <br>
  commons-discovery.jar
  <br>
  commons-logging.jar
  <br>
  jaxrpc.jar
  <br>
  saaj.jar
  <br>
  wsdl4j.jar
  <br>
  xml-apis.jar
  
  <br> <br>
  The CLASSPATH Environment Variable should have the absolute paths of the jars
  (including the jar file name) given as a semicolon separated list.
  <br>
   <br>
  <br>
  Open a command window. Change directory to AXIS_EXTRACT\lib\axis. Create a folder of your choice and we will
  call this folder as WSDL2WS_FOLDER. <br>
  <br>
  Now copy the wsdl file (eg.Calculator.wsdl) which you use, to the folder
  WSDL2WS_FOLDER.
  <br>
  Copy the file wsdl2ws.jar from AXIS_EXTRACT\lib\axis to  WSDL2WS_FOLDER
  <br>
  Then change the directory to WSDL2WS_FOLDER and run the following command to generate the server side skeletons and
  wrappers.
  
  <br>
  <br>
  Java -classpath %classpath%;.\wsdl2ws.jar
  org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -o./ServerOut -lc++
  -sserver
  
  <br>
  <br>
  If the file generation is successful the tool will display the files that it has
  generated. The skeletons and wrappers will be generated in
  [WSDL2WS_FOLDER]\ServerOut. <br>
  <br>
  Run the following command to generate the client stubs.
  <br>
  <br>
  Java -classpath %classpath%;.\wsdl2ws.jar
  org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -o./ClientOut -lc++
  -sclient
  <br>
  <br>
  The generated client stubs will be in [WSDL2WS_FOLDER]\ClientOut</p>
  
  
  <p><a name="deploy"></a></p>
  
  <h2>Deploying your web service</h2>
  
  <br>
  
  <p>Axis cpp user can use the AdminClient tool to deploy a service or can manually deploy. The first section
  shows you how to deploy your Web Service manually, without using the
  AdminClient tool.
  
  <br> <br>
  Lets say that the apache installation folder is APACHE_FOLDER.
  <br>
  (The default installation is apache 1.3.X and the path is "C:\Program Files\Apache Group\Apache"
   and the path for apache 2.X is "C:\Program Files\Apache Group\Apache2")
  
  <br>
  <br>
  1) Copy the above Calculator.dll to the folder
  APACHE_FOLDER/Axis/webservices.
  
  <br>
  2) Add the following to the server.wsdd at the service level. Please make
  sure you add these lines at the correct place, i.e at service level.
  (APACHE_FOLDER/Axis/conf/server.wsdd)
  
  <br>
  <br>
  &lt;service name="Calculator" provider="CPP:RPC" description="Calculator Web
  Service"&gt;
  
  <br>
  &lt;parameter name="className"
  value="APACHE_FOLDER\Axis\webservices\Calculator.dll"/&gt;
  <br>
  &lt;parameter name="allowedMethods" value="add subtract "/&gt;<br>
  &lt;/service&gt; <br>
  <br>
  Now you have deployed your web service</p>
  
  <p><a name="admin"></a></p>
  
  <h2>Deploying your web service Using AdminClient Tool</h2>
  
  <p>The wsdl2ws Tool generates the deploy.wsdd and the undeploy.wsdd files which are needed for the AdminClient. Once we have these files, we have to deploy the web service (in this case the calculator service) with the AdminClient. We do this with the  AdminClient.exe which comes with axiscpp binary distribution. A typical invocation of the AdminClient looks like this.
  </p>
  <p>
  <b>AdminClient  &lt;server&gt; &lt;Port&gt; &lt;wsddfile&gt;</b>
  </p>
  <p>
  <b>AdminClient localhost 80 deploy.wsdd</b> </p>
  <p>
  where local host would be the server where the Axis cpp server is hosted and 80 would be the port at which it runs.
  </p>
  
  <p><a name="client"></a></p>
  <h2>Coding the client</h2>
  
  <br>
  
  <p>With the WSDL2WS tool you have almost developed your client. What you have
  to do next is write a file which has a main method and create an object of the
  stub and invoke your methods on that. <br> <br>
  1) Create a vc workspace. <br>
  2) Create a 'Win32 Console Application'. <br>
  3) Add files to this project from the above generated 'ClientOut' folder.
  <br>
  4) Set the include path to the include directory of the binary distribution.
  <br>
  5) Add the following libs to the library modules path of this project.
  <br>
  <br>
  AXIS_EXTRACT/lib/axis/
  <br>
  Axisclient.lib
  <br>
  
  <br>
  6) Create a file with a main method which looks similar to the following
  and add this file to this project.
  <br>
  </p>
  
  <pre>#include "Calculator.h"
  int main()
  {
          Calculator c;
          int result = c.add(40, 20);
          printf("result = %d", result);
          return 0;
  }</pre>
  
  <p>7) Now build and create the Client.exe</p>
  
  <p><a name="sample"></a></p>
  
  <h2>Running your sample</h2>
  
  <p>1) Restart Apache. <br>
  2) Run the Calculator.exe
  
  <p><a name="caluculatorsample"></a></p>
  
  <br>
  <p>SUCCESS ! If you get the result, you are done.</p>
  
  <p><a name="transport"></a></p>
  
  <h2>Transport Library and Parser Library</h2>
  <p>AxisTransport.dll (Which can be found at AXIS_EXTRACT/bin) should be placed in the path, and should be specified as the value to the key "Transport_http" in axiscpp.conf (AXIS_FOLDER/axiscpp.conf) Or in the same place as the client.exe. </p> 
  <p>Rename either AxisXMLParser_Expat.dll or AxisXMLParser_Xerces.dll to AxisXMLParser.dll (depending on the parser you use), 
   and give the path of the AxisXMLParser.dll as the value of the key XMLParser in axiscpp.conf Or in the  same place as the client.exe. 
  <br>
  If you want to use Expat parser then libexpat.dll should be given in the path.
  <br>
  If you want to use the Xerces parser then xerces-c_2_2_0.dll should be given in the path.
  <br>
  
  </p>
  
  <p><b>Axiscpp.conf file contains the following paths</b><br> <br>
  LogPath:XXXX<br>
  WSDDFilePath:YYYY<br>
  Transport_http:ZZZZ (Not necessary)<br>
  XMLParser:WWWW<br>
  
  <br>
  XXXX is the path to a file named AxisLog (The log file)and YYYY
  is the path to the server.wsdd file.<br>
  <br>
  i.e.<br>
  LogPath:[APACHE_HOME]\Axis\logs\AxisLog.log  
  
  <br>
  WSDDFilePath:[APACHE_HOME]\Axis\conf\server.wsdd <br>
  Transport_http:[APACHE_HOME]\Axis\libs\AxisTransport_D.dll <br>
  XMLParser:[APACHE_HOME]\Axis\libs\AxisXMLParser_D.dll <br></p>
  
  <p><a name="handlers"></a></p>
  
  <h2>Handlers</h2>
  <p>Handlers are pluggable components in Axis C++. We have included a set of sample handlers for your reference. You could write your own handlers by following the instructions  given for the sample Handlers.</p>
  <p><b>Note: If you are using Client side Handlers you need to enter the following entry to the AXIS_FOLDER/axiscpp.conf configuration file.</b></p>
  <p>ClientWSDDFilePath:Axis\conf\client.wsdd</p>
  <p>After entering this entry  to your AXIS_FOLDER/axiscpp.conf configuration file will look like:</p>
  <p>ClientWSDDFilePath:Axis\conf\client.wsdd <br> <br>
  Keep in mind that you have to give the absolute path to the client.wsdd file. <br>
  for example : C:\Program Files\Apache Group\Apache2\Axis\conf\client.wsdd </p>
  <b>Testing the sample Handlers</b>
  <p>We have included the following sample Handlers for your reference.</p>
  <p>1)	echoStringHeaderHandler (A server side handler sample)
        This sample handler will simply echo (i.e send back) the string which you send in the SOAP request.
  <br>2)testHandler (A client side handler sample)</p> 
  <p>This sample handler will simply add a SOAP Header to the generated SOAP request.</p>
  <p>Please note that these are very primitive sample handlers and are presented here to give you an idea about writing your own Handlers.</p>
  <p><b>echoStringHeaderHandler</b></p>
  <p><b>Building the Sample Handlers in VC</b></p>
  <br>
  <b>Building echoStringHeaderHandler (A server side handler sample)</b>
  <br>
  <p>The VC dsw file (ServerHandlers.dsw) is available at AXIS_EXTRACT/vc/samples/server/ ServerHandlers.dsw. Open this file and build the project echoStringHeaderHandler. Once the build is successful you will find the DLL (echoStringHeaderHandler.dll) at AXIS_EXTRACT/bin. If you see this DLL at the above location you are done with the first step.</p>
  <p><b>Configuring the Handler</b></p>
  <p>Now edit the AXIS_FOLDER /conf/server.wsdd to include the handler for a particular service.</p>
  <p>&lt;service name="Calculator" provider="CPP:RPC" description="Simple Calculator Axis C++ Service "&gt
  <br>
  &lt;requestFlow name="CalculatorHandlers"&gt
  <br>  
  &lt;handler name="ESHHandler" type=" AXIS_EXTRACT/bin/echoStringHeaderHandler.dll"&gt
  <br>
  &lt;/handler&gt
  <br>  
  &lt;/requestFlow&gt
  <br> 
  &lt;responseFlow name="CalculatorHandlers"&gt
  <br>      
  &lt;handler name="ESHHandler" type=" AXIS_EXTRACT/bin/echoStringHeaderHandler.dll"&gt 
  <br>    
  &lt;/handler&gt
  <br> 
  &lt;/responseFlow&gt
  <br> 
  &lt;parameter name="allowedMethods" value="add sub mul div "/&gt
  <br>
  &lt;parameter name="className" value="Axis\webservices\Calculator.dll" /&gt
  <br>
  &lt;/service&gt</p>
  <p><b>Note: Make sure you specify the correct path of the handler dll in the server.wsdd file.</b></p>
  <p>Now you are almost done to run your server side handler.
  <br>
  Restart the Apache server.</p>
  <br>
  <br>
  <b>Running the Handler</b>
  <p>Since this Handler is configured to the Calculator web service in the above step, this Handler will be executed when a client send a SOAP request to the Calculator web service.</p>
  <p><b>testHandler</b></p>
  <p><b>Building the Sample Handlers in VC</b></p>
  <p>Building testHandler (A client side handler sample)</p>
  <p>The VC dsw file (ClientHandlers.dsw) is available at AXIS_EXTRACT/vc/samples/client/ClientHandlers.dsw. Open this file and build the project TestHandler. Once the build is successful you will find the DLL (testHandler.dll) at AXIS_EXTRACT/bin. If you see this DLL at the above location you are done with the first step.</p>
  <p><b>Configuring the Handler</b></p>
  <p>Now edit the AXIS_FOLDER /conf/client.wsdd to include the handler for a particular service.</p>
  <p>&lt;service name="Calculator" provider="CPP:DOCUMENT" description="Calculator web service"&gt
  <br>
  &lt;requestFlow name="CalculatorHandlers"&gt 
  <br>       
  &lt;handler name="TestHandler" type=" AXIS_EXTRACT/bin/testHandler.dll"&gt
  <br>
  &lt;/handler&gt
  <br>  
  &lt;/requestFlow&gt
  <br>
  &lt;/service&gt</p>
  <p><b>Note: Make sure you specify the correct path of the handler dll in the client.wsdd file.</b></p>
  <p>Now you are almost done to run your client side handler.</p>
  <p><b>Note: If you are using Client side Handlers you need to enter the ClientWSDDFilePath  entry in the AXIS_FOLDER/axiscpp.conf configuration file. (See above)</b></p>
  <p><b>Running the Handler</b></p>
  <p>Since this Handler is configured to the Calculator web service in the above step, this Handler will be executed when you run the calculator web service client. (It is at AXIS_EXTRACT/bin/Calculator.exe)</p>
  <p>Handler Notes:</p>
  <p>1)	You can see the Handler behavior through the TCP Monitor. (TCP Monitor is a Axis Java tool)
  <br>
  2)	To get an idea of Handlers look at the Handler sample source files.
  <br>
  a.	echoStringHeaderHandler (AXIS_EXTRACT/samples/server/echoStringHeaderHandler)
  <br>
  b.	testHandler
  (AXIS_EXTRACT/samples/client/testHandler)</p>
  </body>
  </html>