You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sa...@apache.org on 2003/10/31 21:41:55 UTC

cvs commit: ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp winuser-guide.ihtml wininstall-guide.ihtml windev-guide.ihtml who.ihtml linuser-guide.ihtml lininstall-guide.ihtml index.ihtml download.ihtml documentation.ihtml

sanjaya     2003/10/31 12:41:55

  Added:       contrib/axisdocs/src/documentation/content/xdocs/cpp
                        winuser-guide.ihtml wininstall-guide.ihtml
                        windev-guide.ihtml who.ihtml linuser-guide.ihtml
                        lininstall-guide.ihtml index.ihtml download.ihtml
                        documentation.ihtml
  Log:
  adding new web pages for axis c++
  
  Revision  Changes    Path
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/winuser-guide.ihtml
  
  Index: winuser-guide.ihtml
  ===================================================================
  <html>
  <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="#client">Writing the client</a><br>
  <a href="#sample">Running your sample</a><br>
  <br>
  <b>Before you follow this guide, make sure that you have followed the</b>
  <a href="wininstall-guide.html"><b>Windows Installation guide</b></a>
  </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 apporach where you start with a pre-written web service.
  
  <br>
  <br>
  Here we discuss the first apporach since the tool to support Method 2 (i.e wcg.exe) is still at its primitive stage in this Alpaha Release.
  
  <br>
  Here the document is written with the idea that the user uses Visual C++ (VC). But user could use this guide with a different IDE of his choice.
  
  <br>
  <br>
  <b>Method 1</b> <br>
  
  This method assums that the user has written the wsdl of the service which he needs to deploy. In this methods user will start with this wsdl and the tool will generate the web service skeleton and other required files.
  
  <br>
  1) Get your wsdl (eg:<a href="../cfiles/Calculator.wsdl">Calculator.wsdl</a>)
  <br>
  2) Run the WSDL2WS tool (refer the section below 'How to use the WSDL2WS tool on the command line') and generate the server side skeletons and wrappers. These files will be in two new folder which are gentrated from the tool called 'ServerOut' and 'ClientOut'.
  <br>
  3) Create a VC workspace.
  <br>
  4) Create a 'Win32 Static Library' project in this workspace.
  <br>
  5) Add the following files to this project, from the generated 'ServerOut' folder.
  	Calculator.cpp
  	Calculator.h <br>
  6) Set the include path to the include directory of the binary distribution (These include files are in AXIS_EXTRACT/include/).
  <br>
  7) Fill the empty methods of the generated skelitons. Here the idea is 
  <br>
  8) Generate the lib (eg: MyCalculator.lib)
  <br>
  9) Now create a 'Win32 Dynamic-Link Library' project.
  <br>
  10) Add the following files to this project, from the generated 'ServerOut' folder.
  	CalculatorService.cpp
  	CalculatorWrapper.cpp
  	CalculatorWrapper.h <br>
  11) Set the include path to the include directory of the binary distribution.
  <br>
  12) Add the above created lib (Calculator.lib) to the library modules of this project.
  <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>
  For using WSDL2Ws java tool on the command line you require jdk1.4 or above.
  
  <br>
  <br>
  To use WSDL2Ws java tool you should set the CLASSPATH Environment Variable to point to the following jar files in AXIS_EXTRACT\lib\axisjava.
  
  <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 Variabe should have the absolute paths of the jars (including the jar file name) given as a semicolon separated list.
  
  <br>
  <br>
  Open a command window.
  
  Change directory to AXIS_EXTRACT\lib\axis. 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>
  <br>
  Now 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 tools is successful the tool will display the files the 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>
  Currently the AdminClient tool is having some known bugs. So this section shows you how to deploy your Web Service manually, without using the AdminClient tool.
  
  <br>
  1) Copy the above Calculator.dll to the folder APACHE_FOLDER/Axis/webservices.
  <br>
  2) Go and add the following in the server.wsdd at the service level. Make sure you add these line at the correct place, i.e at service level. (APACHE_FOLDER/Axis/conf/server.wsdd)
  
  <br>
  <br>
  &lt;service name=&quot;Calculator&quot; provider=&quot;C:RPC&quot; description=&quot;Calculator Web 
  Service&quot;&gt;<br>
  &lt;parameter name=&quot;className&quot; value=&quot;Axis\webservices\Calculator.dll&quot;/&gt;<br>
  &lt;parameter name=&quot;allowedMethods&quot; value=&quot;add subtract &quot;/&gt;<br>
  &lt;/service&gt; <br>
  <br>
  SUCCESS ! Now you have deployed your web service
  </p>
  <p><a name="client"></a></p>
  <h2>Writing 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 a object of the stub and invoke your methods on that.
  
  <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>
  client.lib <br>
  		Common.lib <br>
  		engine.lib <br>
  		Soap.lib <br>
  		WSDD.lib <br>
  		XML.lib <br>
  <br>
  
  	AXIS_EXTRACT/lib/xerces-c
  		<br>
  xerces-c_2.lib 
  
  	<br>
  wsock32.lib
  <br>
  6) Create a file with the 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 Client.exe <br>
  <br>
  
  SUCCESS ! If you get the result, you are done.
  </p>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/wininstall-guide.ihtml
  
  Index: wininstall-guide.ihtml
  ===================================================================
  <html>
  <body>
  <h1>Windows Installation guide for Axis C++ (Alpha Release)</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
  <p>
  <h1>Contents</h1>
  1. <a href="#dist">What binary distribution contains</a><br>
  2. <a href="#apache">Installation with Apache 1.3.27 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. There is a folder called &quot;binary&quot;.<br>
  <br>
  2. In side this there are several folders named as follows, <br>
  -&gt; bin<br>
  -&gt; deploy<br>
  -&gt; docs <br>
  -&gt; include<br>
  -&gt; lib<br>
  -&gt; samples<br>
  <br>
  3. The folder &quot;bin&quot; contains following executables and dll's<br>
  Executables<br>
  -&gt; AdminClient.exe (soap client to Deploy or Undeploy a web service)<br>
  -&gt; base.exe (soap client for Interop base tests)<br>
  -&gt; groupB.exe (soap client for Interop groupB tests)<br>
  -&gt; wcg.exe (wrapper class generation tool)<br>
  -&gt; SimpleAxisServer.exe (axis with a simple http server)<br>
  <br>
  DLL's<br>
  -&gt; mod_axis.dll (axis module for apache http server)<br>
  <br>
  4. In side the &quot;deploy&quot; folder follwing sub folders are exists <br>
  -&gt; conf - This includes the server.wsdd, which contains service names and 
  methods.<br>
  -&gt; handlers - This includes following DLL's,<br>
  - loghandler.dll(sample handler for logging number of requests)<br>
  - testhandler1.dll(sample global handler)<br>
  - testhandler2.dll(sample transport handler)<br>
  <br>
  -&gt; libs - Contains following dll which are needed by axis.<br>
  - xerces-c_2_2_0.dll<br>
  <br>
  -&gt; logs - Log file used by loghandler handler<br>
  - LogAccessCountFile <br>
  <br>
  -&gt; webservices - <br>
  - interopbase.dll (interop base test web service)<br>
  - interopGroupB.dll (interop groupb test web service)<br>
  - webservicedeployer.dll (web service for deploying web services in axis)<br>
  <br>
  -&gt; wsdl - Contains the wsdl files used for interop testing.<br>
  - InteropBase<br>
  - InteropGroupB<br>
  5. The &quot;include&quot; folder contains all the include files which are necessary for 
  this binary to work.<br>
  6. &quot;lib&quot; folder contains all the lib files for xercess-c and axisjava.<br>
  7. &quot;samples&quot; folder contains all the server and client samples for interop 
  tests.
  </p>
  <p><a name="apache"></a></p>
  <h1>Installation with Apache 1.3.27 web server</h1>
  <p>STEPS:</p>
  
  
  <p>1. Install apache 1.3.27 and locate the installation folder(folder where Apache.exe is). 
     Let say this folder to be APACHE_FOLDER.
  </p>
  <p>2. Unzip axis-c-alpha-win32.zip to a folder of your choice. Say this folder AXIS_EXTRACT.
  </p>
  <p>3. Inside the extracted folder AXIS_EXTRACT you have a sub folder called deploy. Copy 
     whole deploy folder to APACHE_FOLDER.
  </p>
  <p>4. Rename copied "deploy" folder to "Axis". Lets say this folder to be AXIS_FOLDER. 
  </p>
  <p>5. Set environment variable AXIS_HOME to point to above folder.
  </p>
  <p>6. Add AXIS_FOLDER/libs to the PATH environment variable.
  </p>
  <p>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/mod_axis.dll<br>
  &lt;Location /axis&gt;<br>
  SetHandler axis<br>
  &lt;/Location&gt;<br>
  <br>
  8. Copy mod_axis.dll from the AXIS_EXTRACT/bin folder to APACHE_FOLDER/modules folder.
  </p>
  <p>9. Restart apache web server. If you have done correctly apache server should start without 
     giving any error.
  </p>
  <p>10. Open a internet browser and check http://localhost/axis. If you get the Axis C++ welcome 
     page you are done. 
  
  <p><a name="simpleaxis"></a></p>
  <h1>Installation with Simple Axis Server</h1>
  <p>
  <b>(For the Alpha release we recommend installing Axis with the Apache web 
  server. The simple Axis Server is still under development and presented here for 
  testing purposes.)</b></p>
  <br>
  
  <p>STEPS:</p>
  
  
  <p>1. Create a folder of your choice. We will call this folder as SIMPLE_AXIS_SERVER_FOLDER.
  </p>
  <p>2. Unzip axis-c-alpha-win32.zip to a folder of your choice. Say this folder AXIS_EXTRACT.
  </p>
  <p>3. Inside the extracted folder AXIS_EXTRACT you have a sub folder called deploy. Copy 
     whole deploy folder to SIMPLE_AXIS_SERVER_FOLDER.
  </p>
  <p>4. Rename copied "deploy" folder to "Axis". Lets say this folder to be AXIS_FOLDER. 
  </p>
  <p>5. Set environment variable AXIS_HOME to point to above folder.
  </p>
  <p>6. Copy the exe SimpleAxisServer.exe from AXIS_EXTRACT/bin to the SIMPLE_AXIS_SERVER_FOLDER.
  </p>
  <p>7. Copy the content of AXIS_FOLDER/libs to the SIMPLE_AXIS_SERVER_FOLDER.
  </p>
  <p>8. Start the SimpleAxisServer by providing the port to which operate. (eg: c:\SimpleAxisServer>SimpleAxisServer 80)
  
  <p><a name="samples"></a></p>
  </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.
  </p>	
  <p>1. InteropBase service</p>
  <p>&nbsp;2. InteropGroupB service
  </p>
  <p>You can run the provided client programs to confirm whether they are working fine. The two
  corresponding client applications are located in your AXIS_EXTRACT/bin as base.exe and groupB.exe.
  to run this sample client applications you need to have the xerces-c_2_2_0.dll in the DLLPATH or 
  current folder.
  
  Note: These sample clients are compiled with assumption that server is running at localhost 
  port 80.
  <p><a name="playsamples"></a></p>
  </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 AXIS_EXTRACT/samples/projects/vc6/interoptests/interoptests.dsw. There
  are four projects in the workspace. Out of them "base" and "GroupB" are client applications and other two are web services.
  </p>
  <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">windows user guide</a>.
  </p>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/windev-guide.ihtml
  
  Index: windev-guide.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html">
    <title></title>
  </head>
  
  <body>
  <h1>Axis C++ Windows Developers Guide (Alpha)</h1>
  
  <p><a href="#buildaxis">BUILDING AND DEPLOYING AXIS C++</a><br>
  <a href="#cvscheckout">Getting a cvs checkout</a><br>
  <a href="#getapachexerces">Getting Apache and Xerces-C</a><br>
  <a href="#installapachexerces">Installing Apache and extracting
  Xerces-C</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="#consumews">CONSUMING THE WEB SERVICE WITH AXIS C++ CLIENT</a><br>
  <a href="#runclient">Coding and Running the client</a></p>
  
  <p><a name="buildaxis"></a></p>
  
  <h1>Building and Deploying Axis C++</a></h1>
  
  <p><a name="cvscheckout"></a></p>
  
  <h2>Getting a cvs checkout</a></h2>
  
  <p>Visit http://ws.apache.org/ click on �axis� and then on �CVS Repository�
  to find details on accessing the CVS Repository. It will have instructions
  similar to the following.<br>
  <br>
  �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): <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 will be 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 there will be link named
  "historical download pages", under the heading "CVS downloads", where you can
  download the cvs binaries for Windows. Download the Windows cvs binaries.
  Extract the cvs binaries from the downloaded zip file. There will be a
  �cvs.exe� file when this is extracted. Set the PATH environment variable to
  where �cvs.exe� is.<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>
  &nbsp;</p>
  
  <p><a name="getapachexerces"></a></p>
  
  <h2>Getting Apache and Xerces-C</h2>
  
  <p><b>Xerces-C</b><br>
  Download the Xerces-C ( 32 bit binary release)from:
  http://xml.apache.org/xerces-c/download.cgi<br>
  <br>
  <b>Apache web server</b><br>
  Download the Apache web server from www.apache.org. Currently Axis
  supports apache 1.3.x Web server and not versions 2.0 or above. This
  documentation was tested with Apache1.3.28 and it is recommended that you
  download this version.</p>
  
  <p><a name="installapachexerces"></a></p>
  
  <h2>Installing Apache and extracting Xerces-C</h2>
  
  <p>Install Apache1.3.28.By default Apache is installed in C:\Program
  Files\Apache Group\Apache. This location will be referred as [APACHE_HOME]
  from this point onwards.</p>
  
  <p><br>
  This documentation was tested with the xerces version 2.3.0 which is
  distributed as xerces-c_2_3_0-win32.zip . Unzip the file
  xerces-c_2_3_0-win32.zip. The folder to which xerces is unzipped will be
  referred to as [XERCES_EXTRACT] from this point onwards. <br>
  &nbsp;</p>
  
  <p><a name="setupandbuildaxis"></a></p>
  
  <h2>Setting up the build environment</h2>
  
  <p>1)copy the contents inside the "[XERCES_EXTRACT] \include\xercesc � <br>
  to [CHECKOUT_HOME]\c\include\xercesc<br>
  2) Copy the content of the [APACHE_HOME] \ include directory to
  [CHECKOUT_HOME] \c\include\apache1_3\<br>
  3) Copy the lib files from �[XERCES_EXTRACT] \lib� to
  �[CHECKOUT_HOME]\c\lib\win32\xercesc�<br>
  4) Copy the lib files from the �[APACHE_HOME] \libexec� to
  �[CHECKOUT_HOME]\c\lib\win32\apache1_3�<br>
  5) In Visual C++ (The version used for this documentation was Visual C++
  6.0)open the file Axis.dsw which is in [CHECKOUT_HOME]\ws-axis \c\ vc. In the
  workspace window �File View�, right click on the project Apache1_3 and click
  on the �Set as Active Project� to make it the Active Project.<br>
  6) Again in Visual C++ right click on the project Apache1_3 in the workspace
  window �File View� and then click on �Settings�� on 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�.</p>
  
  <p><img border="0" src="images/c/mod_axis.jpg" width="577" height="372"></p>
  
  <p>7) In Visual C++ Go to �Build -&gt; Rebuild All � to build mod_axis.dll<br>
  &nbsp;</p>
  
  <p><a name="deployaxis"></a></p>
  
  <h2>Deploying Axis in Apache</h2>
  
  <p>1) Create a directory structure called �Axis� inside [APACHE_HOME] as
  follows<br>
  <br>
  Axis<br>
  |__ libs ( Copy the two dll file from xerces-c-x.x-win32/bin 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 (The directory for the wsdl files of the deployed web services)<br>
  <br>
  NOTE: If you copy xerces dll files to [APACHE_HOME]\Axis\libs from a version
  other than the one you used to build the Axis source with, you may have
  trouble starting up the Apache web server.<br>
  <br>
  2) Set the �PATH� environment variable to the following directories.<br>
  [APACHE_HOME]<br>
  [APACHE_HOME]\Axis\libs<br>
  <br>
  3) Change the apache configuration file [APACHE_HOME]\conf\httpd.conf to
  include the following lines at the bottom.<br>
  <br>
  LoadModule axis_module modules/mod_axis.dll<br>
  &lt;Location /axis&gt;<br>
  SetHandler axis<br>
  &lt;/Location&gt;<br>
  <br>
  <br>
  4)create a file in [APACHE_HOME]\Axis named �axiscpp.conf � which should
  contain the following lines.<br>
  <br>
  AXISLOGPATH:XXXX<br>
  WSDDFILEPATH:YYYY<br>
  <br>
  Where XXXX will be the path to a file named AxisLog (The log file)and YYYY
  will be the path to the server.wsdd file.<br>
  <br>
  i.e.<br>
  AXISLOGPATH: [APACHE_HOME]\Axis\logs\AxisLog // <br>
  WSDDFILEPATH: [APACHE_HOME]\Axis\conf\server.wsdd // <br>
  <br>
  5)Set an environment variable named AXIS_HOME and give [APACHE_HOME]\Axis as
  the value.<br>
  <br>
  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<br>
  (IT IS IMPORTANT TO START APACHE THIS WAY.)<br>
  <br>
  (NOTE:If a 126 error occurs check whether the �path� variable has been set
  correctly as mentioned <br>
  before and whether the correct versions of the xerces dlls have been copied
  as instructed before)<br>
  <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 tool �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 [CHECKOUT_HOME]\
  contrib\wss4j\lib and select the following JARs.<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>
  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
  for that web service is <a
  href="../cfiles/Calculator.wsdl">Calculator.wsdl</a>.<br>
  <br>
  Copy the Calculator.wsdl to [SKELSTUB_HOME]<br>
  <br>
  In eclipse go to �Run-&gt;Run��.<br>
  In the �Run� dialog 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 style="margin:0in;margin-bottom:.0001pt">Select the �Arguments� tab.</p>
  
  <p style="margin:0in;margin-bottom:.0001pt">In the �Program Arguments� text
  box give the following argument.</p>
  
  <p style="margin:0in;margin-bottom:.0001pt">�Calculator.wsdl -o./ServerOut
  -lc++ -sserver�.</p>
  
  <p><img border="0" src="images/c/argument.jpg" width="626" height="272"></p>
  
  <p>NOTE: These are the arguments for the java tool WSDL2Ws. The usage of the
  WSDL2Ws is as follows.<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 the tool was run.<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>For building WSDL2Ws java tool on the command line you require jdk1.4 or
  above.<br>
  <br>
  To build WSDL2Ws java tool you should set the CLASSPATH Environment Variable
  to point to the following jar files in [CHECKOUT_HOME]\ contrib\wss4j\lib.<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>
  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>
  Open a command window.<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>
  Run the following command to build the java tool.<br>
  Javac -sourcepath . org\apache\axis\wsdl\wsdl2ws\WSDL2Ws.java<br>
  <br>
  If the command finishes without any output then the java tool has been
  built.<br>
  <br>
  Now copy the <a href="../cfiles/Calculator.wsdl">Calculator.wsdl</a> file
  which we use in this example to [SKELSTUB_HOME]<br>
  <br>
  Now run the following command to generate the server side skeletons and
  wrappers.<br>
  <br>
  Java -classpath %classpath%;. org.apache.axis.wsdl.wsdl2ws.WSDL2Ws
  Calculator.wsdl -o./ServerOut -lc++ -sserver<br>
  <br>
  If the tools is successful the tool will display the files the 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>
  &nbsp;</p>
  
  <p><a name="builddeployws"></a></p>
  <h2>Building and Deploying the web service</h2>
  <p>
  1) Start Visual C++.<br>
  2) Go to File-&gt;Open and open the workspace file �Axis.dsw� in
  [CHECKOUT_HOME]\ \c\vc.<br>
  3) Go to Project-&gt;Add To Project-&gt;New�<br>
  4) Select the �Projects� tab<br>
  5) Select �Win 32 Dynamic-Link Library�<br>
  6) Give a project name (e.g. ws1) and click �OK�.<br>
  7) In the dialog that appears select �An empty DLL project� click �Finish�
  and then �OK�.<br>
  8) When this procedure is followed the ws1 project files are created in
  [CHECKOUT_HOME]\c\vc\ws1.<br>
  9) 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>
  10) 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.<br>
  In the �Additional include directories� give �../../include�<br></p>
  <img border="0" src="images/c/new_config_include.jpg" width="577"
  height="372">
  
  <p style="margin:0in;margin-bottom:.0001pt">11) Now business logic should be
  added to the generated Skeletons. The Skeletons in this case are Calculator.h
  and Calculator.cpp<br>
  12) Two methods are available for implementation in Calculator.cpp we shall
  implement them 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>
  13) 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>
  14) The ws1.dll will be build in [CHECKOUT_HOME]\c\vc\ws1\Debug by Visual
  C++<br>
  15) Place the built ws1.dll file in [APACHE_HOME] \ Axis \webservices<br>
  16) In addition to this you have to create sever.wsdd file in
  [APACHE_HOME]\Axis\conf<br>
  <br>
  The <a href="../cfiles/server.wsdd">server.wsdd</a> file for this example is
  given below</p>
  <br>
  
  <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>
  <br>
  
  
  <p>In this file [APACHE_HOME] should
  be replaced with the actual value of [APACHE_HOME] (i.e. For this case
  C:\Program Files\Apache Group\Apache )<br>
  <br>
  Description of the server.wsdd file<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 it�s value,
  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 its
  value, the methods exposed by the web service (i.e. subtract and add).<br>
  <b>Note: A trailing space should be put after every allowed method.</b><br>
  &lt;parameter name="allowedMethods" value="subtract add "/&gt;<br>
  <br>
  17) Now start the apache web server by typing �apache �k start�. If it is
  running type �apache �k restart�<br>
  <br>
  18) Now type http://localhost/axis/ in a browser and you will see the
  �Welcome to Axis C++� page with a listing of deployed services (In this case
  the Calculator service only).<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) Start Visual C++. 2) Go to File-&gt;Open and open the workspace file
  �Axis.dsw� in [CHECKOUT_HOME]\ \c\vc.<br>
  
  3) Go to Project-&gt;Add To
  Project-&gt;New�<br>
  
  4) Select the �Projects� tab<br>
  
  5) Select �Win 32 Console Application�<br>
  
  6) Give a project
  name (e.g. calclient) and click �OK�.
  </p>
  
  <p><img src="images/c/new_config_clientEXE.jpg"></p>
  <p>
  7) In the dialog that appears select �An empty project� click �Finish� and
  then �OK�.<br>
  <br>
  8) When this procedure is followed the calclient project files are created in
  [CHECKOUT_HOME]\c\vc\calclient.<br>
  9) 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]\ClientOut and click �OK�.<br>
  10) 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 �../../include�<br>
  </p>
  
  <p><img border="0" src="images/c/new_config_client_include.jpg" width="577"
  height="372"></p>
  
  <p>
  11) Click the �Link� tab and select �Input� from the �Category� Drop down
  list. <br>
  Remove the contents of the �Object/library modules� and add the following
  libs to it.<br>
  <br>
  Common_D.lib Soap_D.lib wsdd_D.lib Engine_D.lib xerces-c_2D.lib client_D.lib
  ws2_32.lib<br>
  <br>
  In the �Additional library path� text box give the following, comma separated
  list of paths.<br>
  <br>
  ../../lib/win32/axis, ../../lib/win32/xercesc<br>
  <br>
  Click �OK�.<br>
  &nbsp;</p>
  
  <p><img border="0" src="images/c/new_config_client_lib.jpg" width="577"
  height="372"></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. 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>
  Right click on the project and click �Build� on the menu that appears.<br>
  If Visual C++ complains about missing libs go to Build-&gt;Rebuild All (Do
  make sure that the apache server is stopped). Now the client exe is built.<br>
  Start the apache by typing apache �k start and run the exe from Visual C++ by
  going to Build-&gt;Execute calclient.exe. Now you will see the SOAP Request,
  SOAP Response and the result printed by the main method that we coded.</p>
  </body>
  </html>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/who.ihtml
  
  Index: who.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>The Axis C++ team</title>
    <meta name="generator" content="amaya 8.1b, see http://www.w3.org/Amaya/">
  </head>
  
  <body>
  <h1>Who are the Axis C++ team?</h1>
  
  <p>Axis C++ is developed by a Group of Programmers from <strong>Sri
  Lanka</strong>. They are sponsored by Sri Lankan Software companies to work
  in the <a href="http://www.opensource.lk/">Lanka Sofware Foundation</a> for
  the Axis C++ project, as a non profit venture.</p>
  
  <h2>Core team</h2>
  
  <p>Susantha Kumara &lt;susantha@opensource.lk&gt;,</p>
  
  <p>Damitha Kumarage &lt;damitha@opensource.lk&gt;,</p>
  
  <p>Roshan Weerasuriya &lt;roshan@opensource.lk&gt;,</p>
  
  <p>Sanjaya Singharage &lt;sanjayas@opensource.lk&gt;,</p>
  
  <p>Lilantha Darshana &lt;Lilantha@virtusa.com&gt;,</p>
  
  <p>Nadika Ranasinghe &lt;nadika@opensource.lk&gt;<br>
  </p>
  
  <h2>Additional Contributors</h2>
  
  <p>Chaminda Divitotawela &lt;chadiv@opensource.lk&gt;,</p>
  
  <p>Nuwan Gurusinghe &lt;nuwan@opensource.lk&gt;,</p>
  
  <p>Chamindra de Silva &lt;Chamindra@virtusa.com&gt;,</p>
  
  <p>Kanchana Welagedara &lt;kanchana@opensource.lk&gt;,</p>
  
  <p>Srinath Perera &lt;hemapani@opensource.lk&gt;,</p>
  
  <p>Thushantha Ravipriya De Alwis &lt;ravi@opensource.lk&gt;,</p>
  
  <p>Dimuthu Leelarathne &lt;muthulee@opensource.lk&gt;,</p>
  
  <p>Jeyakumaran.C &lt;jkumaran@opensource.lk&gt;,</p>
  
  <p>Vairamuthu Thayapavan &lt;vtpavan@opensource.lk&gt;,</p>
  
  <p>Satheesh Thurairajah</p>
  
  <p>ThiruChelvan</p>
  
  <p>Dharmeehan</p>
  
  <p>Selvan</p>
  
  <p>Sanjiva Weerawarana &lt;sanjiva@opensource.lk&gt;</p>
  
  <p></p>
  
  <p></p>
  </body>
  </html>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/linuser-guide.ihtml
  
  Index: linuser-guide.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html">
    <title>Axis C++ User Guide (Alpha)</title>
  </head>
  
  <body>
  <h1>Contents</h1>
  <dl>
    <dt><a href="#Introducti">Introduction</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="#What1">What's Missing</a></dt>
    <dt><a href="#Installing">Installing Axis and Using this Guide</a></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="#Handler">Handler Sample</a></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="#Handler1">Handler Sample</a></dd>
    <dt><a href="#Getting">Getting a CVS checkout</a></dt>
  </dl>
  
  <p><a name="Introducti"></a></p>
  
  <h1>Introduction</h1>
  
  <p>Welcome to Axis C++, the opensource c++ implementation of SOAP ! What is
  SOAP? 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></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>
  
  <h1>What's in this release?</h1>
  
  <p>- Soap engine with both client and server support</p>
  
  <p>- Partial 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 &#x2013; Skeletons and Wrappers</p>
  
  <p>- Client side &#x2013; Stubs</p>
  
  <p>- WSDL2WS tool that generates wrappers, which perform the following
  functions. These wrappers act as RPC 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; (Linux/Windows)</p>
  
  <p>- Basic Wrapper Class Generator tool with following functionalities.</p>
  
  <p>- Wrapping existing systems as web services</p>
  
  <p>- WSDL generation</p>
  
  <p>- Web interface to the deployed services and their WSDL s.</p>
  
  <p>- Sample web services and client applications.</p>
  
  <p><a name="Axis"></a></p>
  
  <h1>Axis C++ now delivers the following key features</h1>
  
  <p>- Speed: Axis uses SAX (event-based) parsing to acheive significantly
  greater speed than earlier versions of Apache</p>
  
  <p>SOAP.</p>
  
  <p>- Flexibility</p>
  
  <p>- Stability , Component oriented Deployment</p>
  
  <p>- Transport Framework</p>
  
  <p>- WSDL support</p>
  
  <p></p>
  
  <p>AxisC++ 1.0supports 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.0. 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>
  
  <h1>What's Missing ?</h1>
  
  <p>Full SOAP 1.2 support.</p>
  
  <p><a name="Installing"></a></p>
  
  <h1>Installing Axis and Using this Guide</h1>
  
  <p>See the Axis Installation Guide for instructions on installing Axis C++</p>
  
  <p></p>
  
  <p><strong>Sample tests using InteropBase.wsdl: for Linux Users</strong></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></p>
  
  <p>- Axis C++</p>
  
  <p>- Apache1.3</p>
  
  <p>- xerces-C</p>
  
  <p>- j2SDK1.4</p>
  
  <p></p>
  
  <p>installed and configured.</p>
  
  <p><a name="Download"></a></p>
  
  <h1>Download Source Distribution</h1>
  
  <p>Let's take a look at a sample InteropBase service client that will call
  methods of a InteropBase service deployed on Axis C++. You can find the
  <strong>InteropBase.wsdl</strong> for this example at</p>
  
  <p></p>
  
  <p><strong>$AXISCPP_HOME/src/server/samples/interoptests/base</strong></p>
  
  <p></p>
  
  <p></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></p>
  
  <p><strong>$axiscpp_home/src/wsdl</strong></p>
  
  <p></p>
  
  <p>You need the following jar files included in the
  <strong>CLASSPATH</strong> .</p>
  
  <p></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></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></p>
  
  <p>Here is a sample <strong>/home/axisuser/.bash_profile</strong> file where
  we specified those</p>
  
  <p></p>
  
  <p><strong>AXIS_JARS_HOME="$AXISCPP_HOME/lib/axisjava"</strong></p>
  
  <p></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></p>
  
  <p><strong>JAVA_HOME="/usr/java"</strong></p>
  
  <p></p>
  
  <p><strong>PATH="$PATH:$JAVA_HOME/bin:."</strong></p>
  
  <p></p>
  
  <p><strong>CLASSPATH="$CLASSPATH:./:$JAVA_HOME/lib:$AXIS_JARS:"</strong></p>
  
  <p></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></p>
  
  <p>Now</p>
  
  <p></p>
  
  <p><strong>$ cd $AXISCPP_HOME/c/src/wsdl/</strong></p>
  
  <p></p>
  
  <p><strong>$ mkdir temp</strong></p>
  
  <p></p>
  
  <p><strong>$javac -d ./temp -sourcepath .
  ./org/apache/axis/wsdl/wsdl2ws/*.java</strong></p>
  
  <p></p>
  
  <p><strong>$cd temp</strong></p>
  
  <p></p>
  
  <p><strong>$jar -cvf wsdl2ws.jar org</strong></p>
  
  <p></p>
  
  <p><strong>$cp -f wsdl2ws.jar $AXISCPP_HOME/lib/axis</strong></p>
  
  <p></p>
  
  <p>add this jar to the classpath as well.</p>
  
  <p><a name="Server"></a></p>
  
  <h1>Server side Skeleton And Wrappers Generated by the wsdl2ws Tool</h1>
  
  <p>We use the sample at</p>
  
  <p></p>
  
  <p><strong>$AXISCPP_HOME/src/server/samples/interoptests/base.</strong></p>
  
  <p></p>
  
  <p>We use this sample to demonstrate the generation of serverside skeletons
  and how to deploy a web service using it.</p>
  
  <p></p>
  
  <p>Inside this folder you will find InteropBase.wsdl file using which we
  generate skeleton and Wrappers. Here is the command line arguments to
  generate the skeleton.</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/server/samples/interoptests/base</strong></p>
  
  <p></p>
  
  <p><strong>% java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws InteropBase.wsdl -lc++
  -sserver</strong></p>
  
  <p></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></p>
  
  <p>In this sample it generates</p>
  
  <p></p>
  
  <p>- ArrayOffloat.h</p>
  
  <p>- ArrayOfint.h</p>
  
  <p>- ArrayOfSOAPStruct.h</p>
  
  <p>- ArrayOfstring.h</p>
  
  <p>- InteropTestPortType.h</p>
  
  <p>- InteropTestPortTypeWrapper.h</p>
  
  <p>- SOAPStruct.h</p>
  
  <p>- InteropTestPortType.cpp</p>
  
  <p>- InteropTestPortTypeService.cpp</p>
  
  <p>- InteropTestPortTypeWrapper.cpp</p>
  
  <p>- SOAPStruct.cpp</p>
  
  <p></p>
  
  <p>You can fill skeltons with your business logic. In this example it is done
  for you in <strong>InteropTestPortType.Cpp</strong></p>
  
  <p></p>
  
  <p><strong>////////////////////////////////////</strong></p>
  
  <p><strong>//This is the Service implementation CPP file genarated by
  theWSDL2Ws.</strong></p>
  
  <p><strong>// InteropTestPortType.cpp: implemtation for the
  InteropTestPortType.</strong></p>
  
  <p><strong>//</strong></p>
  
  <p><strong>////////////////////////////////////</strong></p>
  
  <p><strong>#include "InteropTestPortType.h"</strong></p>
  
  <p><strong>InteropTestPortType::InteropTestPortType()</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>InteropTestPortType::~InteropTestPortType()</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>string InteropTestPortType::echoString(string Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOfstring InteropTestPortType::echoStringArray(ArrayOfstring
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>int InteropTestPortType::echoInteger(int Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOfint InteropTestPortType::echoIntegerArray(ArrayOfint
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>float InteropTestPortType::echoFloat(float Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOffloat InteropTestPortType::echoFloatArray(ArrayOffloat
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>SOAPStruct* InteropTestPortType::echoStruct(SOAPStruct*
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOfSOAPStruct
  InteropTestPortType::echoStructArray(ArrayOfSOAPStruct Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>void InteropTestPortType::echoVoid()</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_Base64Binary
  InteropTestPortType::echoBase64(Axis_Base64Binary Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_DateTime InteropTestPortType::echoDate(Axis_DateTime
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_HexBinary InteropTestPortType::echoHexBinary(Axis_HexBinary
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_Decimal InteropTestPortType::echoDecimal(Axis_Decimal
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_Boolean InteropTestPortType::echoBoolean(Axis_Boolean
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><a name="Deploying"></a></p>
  
  <h1>Deploying the Service</h1>
  
  <p></p>
  
  <p>The Folder called deploy in the
  <strong>/home/axisuser/projects/axis_c/</strong> should be copied to apache
  root folder .Rename the deploy folder as <strong>"Axis"</strong>. Give all
  permissions to this folder.</p>
  
  <p></p>
  
  <p><strong>$ cp &#x2013;rf /home/axisuser/projects/axis_c/deloy
  /usr/local/apache</strong></p>
  
  <p><strong>$ cd /usr/local/apache</strong></p>
  
  <p><strong>$ mv deploy Axis</strong></p>
  
  <p><strong>$ chmod -R 777 Axis</strong></p>
  
  <p></p>
  
  <p>Now set the environment variable <strong>AXIS_HOME</strong> pointing to
  this directory.</p>
  
  <p></p>
  
  <p><strong>AXIS_HOME="/usr/local/apache/Axis"</strong></p>
  
  <p></p>
  
  <p>Type the Following Command to build the service(You can always use
  makefiles instead of the following commands to build.)</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/src/server/samples/introptests/base</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -DHAVE_CONFIG_H -I. -I. -I.. -I$AXISCPP_HOME/include
  -Wshadow -Wall</strong></p>
  
  <p><strong>-pedantic -ansi -g -O2 -c ./*.cpp -fPIC</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -shared -Wl,--whole-archive -Wl,--no-whole-archive -I. -I..
  -L$AXISCPP_HOME/lib/xerces-c</strong></p>
  
  <p><strong>-lxerces-c -Wl,-soname -Wl,libinteropbase.so.0 -o
  libinteropbase.so ./*.o</strong></p>
  
  <p></p>
  
  <p>By typing this in the command line the dynamic library (
  <strong>libinteropbase.so</strong> for example) is created which is used for
  the deployment. This library is automatically is placed in</p>
  
  <p></p>
  
  <p><strong>$AXIS_HOME/webservices where $AXIS_HOME =
  /usr/local/apache/Axis</strong></p>
  
  <p></p>
  
  <p>Modify the <strong>server.wsdd</strong>. Modify the server.wsdd
  appropriate for your service. (You have a sample server.wsdd file given below
  appropriately filled for this service).</p>
  
  <p></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;globalConfiguration&gt;</strong><br>
  <strong>&lt; service name="InteropBase" provider="C:RPC"
  description="SOAPBuilders Interoperability Lab Round 2 base test suite
  described at http://www.whitemesa.com/interop/proposal2.html
  "&gt;</strong><br>
  <strong>&lt; parameter name="allowedMethods" value="echoString EchoInt
  echoStringArray echoInteger echoIntegerArray echoFloat echoFloatArray
  echoStruct echoStructArray echoVoid echoBase64 echoDate echoHexBinary
  echoDecimal echoBoolean "/&gt;</strong><br>
  <strong>&lt; parameter name="className"
  value="/usr/local/apache/Axis/webservices/libinteropbase.so"/&gt;</strong><br>
  <strong>&lt; /service&gt;</strong><br>
  <strong>&lt;/deployment&gt;</strong></p>
  
  <p></p>
  
  <p><strong>Note:</strong> You should make a backup of
  <strong>$AXIS_HOME/conf/server.wsdd</strong> and edit the original file so
  that it is exactly as above.</p>
  
  <p></p>
  
  <p>server.wsdd should be in</p>
  
  <p><strong>/usr/local/apache/Axis/conf/</strong></p>
  
  <p></p>
  
  <p>Start the Apache server</p>
  
  <p><strong>$ /usr/local/apache/bin/apachectl start</strong></p>
  
  <p></p>
  
  <p>Now open a browser and enter the link http://localhost:80/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>
  
  <h1>Client side Stubs Generated by the wsdl2ws Tool</h1>
  
  <p></p>
  
  <p>WSDL2Ws tools will generate the stubs for the client side. You will have
  C++ Client class and header file.</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/src/client/samples/interoptests/base</strong></p>
  
  <p></p>
  
  <p><strong>$ java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws InteropBase.wsdl -lc++
  -sclient</strong></p>
  
  <p></p>
  
  <p><strong>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 InteropTestPortType instance is created and its methods are called.</p>
  
  <p></p>
  
  <p><strong>// InteropBaseClient.cpp : Defines the entry point for the console
  application.</strong></p>
  
  <p><strong>//</strong></p>
  
  <p><strong>#include "InteropTestPortType.h"</strong></p>
  
  <p><strong>#define ARRAYSIZE 2</strong></p>
  
  <p><strong>int main(int argc, char* argv[])</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>int x;</strong></p>
  
  <p><strong>char buffer[100];</strong></p>
  
  <p><strong>InteropTestPortType ws;</strong></p>
  
  <p><strong>printf("invoking echoString...\n");</strong></p>
  
  <p><strong>//testing echoString</strong></p>
  
  <p><strong>if (ws.echoString("hello world") == "hello world")</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoStringArray</strong></p>
  
  <p><strong>ArrayOfstring arrstr;</strong></p>
  
  <p><strong>arrstr.m_Array = new string[ARRAYSIZE];</strong></p>
  
  <p><strong>arrstr.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>sprintf(buffer, "%dth element of string array", x);</strong></p>
  
  <p><strong>arrstr.m_Array[x] = buffer;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>printf("invoking echoStringArray...\n");</strong></p>
  
  <p><strong>if (ws.echoStringArray(arrstr).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoInteger</strong></p>
  
  <p><strong>printf("invoking echoInteger...\n");</strong></p>
  
  <p><strong>if (ws.echoInteger(56) == 56)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoIntegerArray</strong></p>
  
  <p><strong>ArrayOfint arrint;</strong></p>
  
  <p><strong>arrint.m_Array = new int[ARRAYSIZE];</strong></p>
  
  <p><strong>arrint.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>arrint.m_Array[x] = x;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>printf("invoking echoIntegerArray...\n");</strong></p>
  
  <p><strong>if (ws.echoIntegerArray(arrint).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoFloat</strong></p>
  
  <p><strong>printf("invoking echoFloat...\n");</strong></p>
  
  <p><strong>if (ws.echoFloat(1.4214) &gt; 1.42)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoFloat</strong></p>
  
  <p><strong>ArrayOffloat arrfloat;</strong></p>
  
  <p><strong>arrfloat.m_Array = new float[ARRAYSIZE];</strong></p>
  
  <p><strong>arrfloat.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>arrfloat.m_Array[x] = 1.1111*x;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>printf("invoking echoFloatArray...\n");</strong></p>
  
  <p><strong>if (ws.echoFloatArray(arrfloat).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echo Struct</strong></p>
  
  <p><strong>SOAPStruct stct;</strong></p>
  
  <p><strong>stct.varFloat = 12345.7346345;</strong></p>
  
  <p><strong>stct.varInt = 5000;</strong></p>
  
  <p><strong>stct.varString = "This is string in SOAPStruct";</strong></p>
  
  <p><strong>printf("invoking echoStruct...\n");</strong></p>
  
  <p><strong>if (ws.echoStruct(&amp;stct) != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo Array of Struct</strong></p>
  
  <p><strong>ArrayOfSOAPStruct arrstct;</strong></p>
  
  <p><strong>arrstct.m_Array = new SOAPStruct[ARRAYSIZE];</strong></p>
  
  <p><strong>arrstct.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>arrstct.m_Array[x].varFloat = 1.1111*x;</strong></p>
  
  <p><strong>arrstct.m_Array[x].varInt = x;</strong></p>
  
  <p><strong>sprintf(buffer, "varString of %dth element of SOAPStruct array",
  x);</strong></p>
  
  <p><strong>arrstct.m_Array[x].varString = buffer;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>//testing echo Struct Array</strong></p>
  
  <p><strong>printf("invoking echoStructArray...\n");</strong></p>
  
  <p><strong>if (ws.echoStructArray(arrstct).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo void</strong></p>
  
  <p><strong>printf("invoking echoVoid...\n");</strong></p>
  
  <p><strong>ws.echoVoid();</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>//testing echo base 64 binary</strong></p>
  
  <p><strong>printf("invoking echoBase64...\n");</strong></p>
  
  <p><strong>if (ws.echoBase64("</strong></p>
  
  <p><strong>BCDF675E234242WHRTKMJDGKGUEJ898636JFJFHEJDGWTDHFJRURYGBCDHTWRSG")</strong></p>
  
  <p><strong>=="BCDF675E234242WHRTKMJDGKGUEJ898636JFJFHEJDGWTDHFJRURYGBCDHTWRSG")
  <br>
  printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>time_t tim;</strong></p>
  
  <p><strong>time(&amp;tim);</strong></p>
  
  <p><strong>tm* lt = gmtime(&amp;tim);</strong></p>
  
  <p><strong>printf("invoking echoDate...\n");</strong></p>
  
  <p><strong>if (memcmp(&amp;ws.echoDate(*lt), lt, sizeof(tm)) ==
  0)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo hex binary</strong></p>
  
  <p><strong>printf("invoking echoHexBinary...\n");</strong></p>
  
  <p><strong>if
  (ws.echoHexBinary("CCCFFA46552BC7D5A09BC5F23DE9E0FE7862AD45BC87D02FEE")
  ==</strong></p>
  
  <p><strong>"CCCFFA46552BC7D5A09BC5F23DE9E0FE7862AD45BC87D02FEE")</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo decimal</strong></p>
  
  <p><strong>printf("invoking echoDecimal...\n");</strong></p>
  
  <p><strong>if (ws.echoDecimal(1234.567890) &gt; 1234.56)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo boolean</strong></p>
  
  <p><strong>printf("invoking echoBoolean...\n");</strong></p>
  
  <p><strong>if (ws.echoBoolean(1) == 1)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>getchar();</strong></p>
  
  <p><strong>return 0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p></p>
  
  <p>Copy from <strong>$AXISCPP_HOME/bin/libaxiscpp_mod.a</strong> to
  <strong>$AXISCPP_HOME/lib/axis</strong></p>
  
  <p></p>
  
  <p>Creating the client library</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/src/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</strong></p>
  
  <p></p>
  
  <p>This will automatically create <strong>libaxiscpp_client.so</strong> and
  copy it to the <strong>$AXISCPP_HOME/lib/axis</strong> (as configured in
  runconfig script)</p>
  
  <p></p>
  
  <p>Now</p>
  
  <p><strong>cd $AXISCPP_HOME/src/client/samples/interoptests/base</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -DHAVE_CONFIG_H -I. -I. -I.. -I$AXISCPP_HOME/include
  -Wshadow -Wall -pedantic<br>
  </strong><strong>- ansi -g -O2 -c ./*.cpp -fPIC</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -g -O2 -o interopbase InteropBaseClient.o SOAPStruct.o
  InteropTestPortType.o</strong></p>
  
  <p><strong>$AXISCPP_HOME/lib/axis/libaxiscpp_client.a
  $AXISCPP_HOME/lib/axis/libaxiscpp_mod.a-</strong><strong>L$AXISCPP_HOME/lib/xerces-c
  -lxerces-c -ldl<br>
  </strong><strong>$AXISCPP_HOME/src/client/lib/libaxiscpp_client.a
  </strong><strong>$AXISCPP_HOME/release/libaxiscpp_mod.a<br>
  -L$AXISCPP_HOME/lib/xerces-c -lxerces-c -ldl</strong></p>
  
  <p></p>
  
  <p>Start the Apache Server(Assuming base service is deployed.)</p>
  
  <p><strong>$ /usr/local/apache/bin/apachectl start</strong></p>
  
  <p>to run</p>
  
  <p><strong>$ ./interopbase</strong></p>
  
  <p><a name="Handler"></a></p>
  
  <h1>Handler Sample</h1>
  
  <p></p>
  
  <p>If you want to test handlers go into the
  <strong>$AXISCPP_HOME/src/server/handlers</strong> folder where example
  handlers are included (If you use the binary download sample handler
  libraries are included in <strong>$(AXIS_HOME)/handlers</strong>
  folder(assuming that you created this folder as described in installation
  guide). Several sample handlers are included there covering the concepts of
  service specific, global and transport handlers. We will show you the detail
  of running a service specific handler named loghandler. The task of this
  handler is writing to a file the number of times the service is accessed.</p>
  
  <p></p>
  
  <p><strong>cd
  /home/axisuser/projects/axis_c/src/server/handlers/custom/loghandler</strong></p>
  
  <p><strong>$sh autogen.sh</strong></p>
  
  <p><strong>$sh runconfig</strong></p>
  
  <p><strong>$make</strong></p>
  
  <p><strong>$make install</strong></p>
  
  <p></p>
  
  <p>The handler library will be installed at
  <strong>$(AXIS_HOME)/handlers/custom/loghandler</strong> Now edit the
  <strong>$(AXIS_HOME)/conf/server.wsdd</strong> to include the handler for a
  particular service.</p>
  
  <p></p>
  
  <p><strong>&lt;service name="InteropBase" provider="C:RPC"
  description="SOAPBuilders Interoperability Lab Round</strong><br>
  <strong>2 base test suite described at
  http://www.whitemesa.com/interop/proposal2.html "&gt;</strong><br>
  <strong>&lt;requestFlow name="calchandlers"&gt;</strong><br>
  <strong>&lt;handler name="LogAccessCount"</strong><br>
  <strong>type="/usr/local/apache/Axis/handlers/custom/loghandler/libloghandler.so"&gt;</strong><br>
  <strong>&lt;parameter name="logAccessCountFile"</strong><br>
  <strong>value="/usr/local/apache/Axis/handlers/custom/loghandler/LogAccessCountFile"/&gt;</strong><br>
  <strong>&lt;/handler&gt;</strong><br>
  <strong>&lt;/requestFlow&gt;</strong><br>
  <strong>&lt;parameter name="allowedMethods" value="echoString EchoInt
  echoStringArray</strong><br>
  <strong>echoInteger echoIntegerArray echoFloat echoFloatArray echoStruct
  echoStructArray echoVoid</strong><br>
  <strong>echoBase64 echoDate echoHexBinary echoDecimal echoBoolean
  "/&gt;</strong><br>
  <strong>&lt;parameter name="className"
  value="/usr/local/apache/Axis/webservices/libinteropbase.so"/&gt;</strong><br>
  <strong>&lt;/service&gt;</strong></p>
  
  <p></p>
  
  <p>Restart the apache web server and test your handler using the web service
  client for InteropBase webservice. When the client is run an entry will be
  added to
  <strong>/usr/local/apache/Axis/handlers/custom/loghandler/LogAccessCountFile</strong>
  Note that the folder in which the LogAccessCountFile is created should have
  write access. You can test the global handlers and transport handlers in a
  similar manner. Note the change you have to make in server.wsdd. You can see
  how this is done in the specimen folder
  <strong>$AXISCPP_HOME/deploy/conf/server.wsdd</strong>.</p>
  
  <p><a name="Download1"></a></p>
  
  <h1>Download Binary Distribution</h1>
  
  <p>Let's take a look at a sample InteropBase service client that will call
  methods of a InteropBase service deployed on Axis C++. You can find the
  <strong>InteropBase.wsdl</strong> for this example at</p>
  
  <p></p>
  
  <p><strong>$AXISCPP_HOME/deploy/wsdls</strong></p>
  
  <p></p>
  
  <p>You need the following jar files included in the
  <strong>CLASSPATH</strong> .</p>
  
  <p></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></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></p>
  
  <p>Here is a sample <strong>/home/axisuser/.bash_profile</strong> file where
  we specified those</p>
  
  <p></p>
  
  <p><strong>AXIS_JARS_HOME="$AXISCPP_HOME/lib/axisjava"</strong></p>
  
  <p></p>
  
  <p><strong>AXIS_JARS="$AXIS_JARS_HOME/axis-</strong><br>
  <strong>ant.jar:$AXIS_JARS_HOME/axis.jar:$AXIS_JARS_HOME/commons-</strong><br>
  <strong>discovery.jar:$AXIS_JARS_HOME/commons-</strong><br>
  <strong>logging.jar:$AXIS_JARS_HOME/jaxrpc.jar:$AXIS_JARS_HOME/log4j-</strong><br>
  <strong>1.2.4.jar:$AXIS_JARS_HOME/saaj.jar:$AXIS_JARS_HOME/wsdl4j.jar"</strong></p>
  
  <p></p>
  
  <p><strong>JAVA_HOME="/usr/java"</strong></p>
  
  <p></p>
  
  <p><strong>PATH="$PATH:$JAVA_HOME/bin:."</strong></p>
  
  <p><strong>CLASSPATH="$CLASSPATH:./:$JAVA_HOME/lib:$AXIS_JARS:$AXISCPP_HOME/lib/axis/wsdl2ws.jar"</strong></p>
  
  <p></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><a name="Server1"></a></p>
  
  <h1>Server side Skeleton And Wrappers Generated by the wsdl2ws Tool .</h1>
  
  <p>We use the sample at</p>
  
  <p></p>
  
  <p><strong>$AXISCPP_HOME/samples/interoptests/base</strong>.</p>
  
  <p></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 InteropBase.wsdl file using which we
  generate skeleton and Wrappers. Here is the command line arguments to
  generate the skeleton.</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/samples/server/interoptests/base</strong></p>
  
  <p></p>
  
  <p><strong>% java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws InteropBase.wsdl -lc++
  -sserver</strong></p>
  
  <p></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></p>
  
  <p>In this sample it generates</p>
  
  <p></p>
  
  <p>- ArrayOffloat.h</p>
  
  <p>- ArrayOfint.h</p>
  
  <p>- ArrayOfSOAPStruct.h</p>
  
  <p>- ArrayOfstring.h</p>
  
  <p>- InteropTestPortType.h</p>
  
  <p>- InteropTestPortTypeWrapper.h</p>
  
  <p>- SOAPStruct.h</p>
  
  <p>- InteropTestPortType.cpp</p>
  
  <p>- InteropTestPortTypeService.cpp</p>
  
  <p>- InteropTestPortTypeWrapper.cpp</p>
  
  <p>- SOAPStruct.cpp</p>
  
  <p></p>
  
  <p>You can fill skeltons with your business logic. In this example it is done
  for you in <strong>InteropTestPortType.Cpp</strong></p>
  
  <p></p>
  
  <p><strong>/////////////////////////////////</strong></p>
  
  <p><strong>//This is the Service implementation CPP file genarated by
  theWSDL2Ws.</strong></p>
  
  <p><strong>// InteropTestPortType.cpp: implemtation for the
  InteropTestPortType.</strong></p>
  
  <p><strong>//</strong></p>
  
  <p><strong>////////////////////////////////</strong></p>
  
  <p><strong>#include "InteropTestPortType.h"</strong></p>
  
  <p><strong>InteropTestPortType::InteropTestPortType()</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>InteropTestPortType::~InteropTestPortType()</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>string InteropTestPortType::echoString(string Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOfstring InteropTestPortType::echoStringArray(ArrayOfstring
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>int InteropTestPortType::echoInteger(int Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOfint InteropTestPortType::echoIntegerArray(ArrayOfint
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>float InteropTestPortType::echoFloat(float Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOffloat InteropTestPortType::echoFloatArray(ArrayOffloat
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>SOAPStruct* InteropTestPortType::echoStruct(SOAPStruct*
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>ArrayOfSOAPStruct
  InteropTestPortType::echoStructArray(ArrayOfSOAPStruct Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>void InteropTestPortType::echoVoid()</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_Base64Binary
  InteropTestPortType::echoBase64(Axis_Base64Binary Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_DateTime InteropTestPortType::echoDate(Axis_DateTime
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_HexBinary InteropTestPortType::echoHexBinary(Axis_HexBinary
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_Decimal InteropTestPortType::echoDecimal(Axis_Decimal
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>Axis_Boolean InteropTestPortType::echoBoolean(Axis_Boolean
  Value0)</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>//Following line is not generated. You have to fill it. Here it is
  filled for you.</strong></p>
  
  <p><strong>return Value0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><a name="Deploying1"></a></p>
  
  <h1>Deploying the Services</h1>
  
  <p></p>
  
  <p>The Folder called deploy in the
  <strong>/home/axisuser/projects/axis_c/</strong> should be copied to apache
  root folder .Rename the deploy folder as <strong>"Axis"</strong>. Give all
  permissions to this folder.</p>
  
  <p></p>
  
  <p><strong>$ cp &#x2013;rf /home/axisuser/projects/axis_c/deloy
  /usr/local/apache</strong></p>
  
  <p><strong>$ cd /usr/local/apache</strong></p>
  
  <p><strong>$ mv deploy Axis</strong></p>
  
  <p><strong>$ chmod -R 777 Axis</strong></p>
  
  <p></p>
  
  <p>Now set the environment variable <strong>AXIS_HOME</strong> pointing to
  this directory.</p>
  
  <p></p>
  
  <p><strong>AXIS_HOME="/usr/local/apache/Axis"</strong></p>
  
  <p></p>
  
  <p>Type the Following Command to build the service(You can always use
  makefiles instead of the following commands to build.)</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/src/server/samples/introptest/base</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -DHAVE_CONFIG_H -I. -I. -I.. -I$AXISCPP_HOME/include
  -Wshadow -Wall<br>
  </strong><strong>-pedantic -ansi -g -O2 -c ./*.cpp -fPIC</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -shared -Wl,--whole-archive -Wl,--no-whole-archive -I. -I..
  -L$AXISCPP_HOME/lib/xerces-c<br>
  </strong><strong>-lxerces-c -Wl,-soname -Wl,libinteropbase.so.0 -o
  libinteropbase.so ./*.o</strong></p>
  
  <p></p>
  
  <p>By typing this in the command line the dynamic library (
  <strong>libinteropbase.so</strong> for example) is created which is used for
  the deployment. This library is automatically is placed in</p>
  
  <p></p>
  
  <p><strong>$AXIS_HOME/webservices where $AXIS_HOME =
  /usr/local/apache/Axis</strong></p>
  
  <p></p>
  
  <p>Modify the <strong>server.wsdd</strong>. Modify the server.wsdd
  appropriate for your service. (You have a sample server.wsdd file given below
  appropriately filled for this service).</p>
  
  <p></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></p>
  
  <p><strong>&lt;globalConfiguration&gt;</strong><br>
  <strong>&lt; service name="InteropBase" provider="C:RPC"
  description="SOAPBuilders Interoperability Lab Round 2 base test suite
  described at http://www.whitemesa.com/interop/proposal2.html
  "&gt;</strong><br>
  <strong>&lt; parameter name="allowedMethods" value="echoString EchoInt
  echoStringArray echoInteger echoIntegerArray echoFloat echoFloatArray
  echoStruct echoStructArray echoVoid echoBase64 echoDate echoHexBinary
  echoDecimal echoBoolean "/&gt;</strong><br>
  <strong>&lt; parameter name="className"
  value="/usr/local/apache/Axis/webservices/libinteropbase.so"/&gt;</strong><br>
  <strong>&lt; /service&gt;</strong><br>
  <strong>&lt;/deployment&gt;</strong></p>
  
  <p></p>
  
  <p><strong>Note:</strong> You should make a backup of
  <strong>$AXIS_HOME/conf/server.wsdd</strong> and edit the original file so
  that it is exactly as above.</p>
  
  <p></p>
  
  <p>server.wsdd should be in</p>
  
  <p><strong>usr/local/apache/Axis/conf/</strong></p>
  
  <p></p>
  
  <p>Start the Apache server</p>
  
  <p><strong>$ usr/local/apache/bin/apachectl start</strong></p>
  
  <p></p>
  
  <p>Now open a browser and enter the link http://localhost:80/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="Client1"></a></p>
  
  <h1>Client side Stubs Generated by the wsdl2ws Tool</h1>
  
  <p></p>
  
  <p>WSDL2Ws tools will generate the stubs for the client side. You will have
  C++ Client class and header file.</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/samples/client/interoptests/base</strong></p>
  
  <p></p>
  
  <p><strong>$ java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws InteropBase.wsdl -lc++
  -sclient</strong></p>
  
  <p></p>
  
  <p>Note: again if you specify <strong>-o./GenClassesClient</strong> you will
  have source generated inside <strong>GenClassClient</strong> 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 InteropTestPortType
  instance is created and its methods are called.</p>
  
  <p></p>
  
  <p><strong>// InteropBaseClient.cpp : Defines the entry point for the console
  application.</strong></p>
  
  <p><strong>//</strong></p>
  
  <p><strong>#include "InteropTestPortType.h"</strong></p>
  
  <p><strong>#define ARRAYSIZE 2</strong></p>
  
  <p><strong>int main(int argc, char* argv[])</strong></p>
  
  <p><strong>{</strong></p>
  
  <p><strong>int x;</strong></p>
  
  <p><strong>char buffer[100];</strong></p>
  
  <p><strong>InteropTestPortType ws;</strong></p>
  
  <p><strong>printf("invoking echoString...\n");</strong></p>
  
  <p><strong>//testing echoString</strong></p>
  
  <p><strong>if (ws.echoString("hello world") == "hello world")</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoStringArray</strong></p>
  
  <p><strong>ArrayOfstring arrstr;</strong></p>
  
  <p><strong>arrstr.m_Array = new string[ARRAYSIZE];</strong></p>
  
  <p><strong>arrstr.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>sprintf(buffer, "%dth element of string array", x);</strong></p>
  
  <p><strong>arrstr.m_Array[x] = buffer;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>printf("invoking echoStringArray...\n");</strong></p>
  
  <p><strong>if (ws.echoStringArray(arrstr).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoInteger</strong></p>
  
  <p><strong>printf("invoking echoInteger...\n");</strong></p>
  
  <p><strong>if (ws.echoInteger(56) == 56)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoIntegerArray</strong></p>
  
  <p><strong>ArrayOfint arrint;</strong></p>
  
  <p><strong>arrint.m_Array = new int[ARRAYSIZE];</strong></p>
  
  <p><strong>arrint.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>arrint.m_Array[x] = x;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>printf("invoking echoIntegerArray...\n");</strong></p>
  
  <p><strong>if (ws.echoIntegerArray(arrint).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoFloat</strong></p>
  
  <p><strong>printf("invoking echoFloat...\n");</strong></p>
  
  <p><strong>if (ws.echoFloat(1.4214) &gt; 1.42)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echoFloat</strong></p>
  
  <p><strong>ArrayOffloat arrfloat;</strong></p>
  
  <p><strong>arrfloat.m_Array = new float[ARRAYSIZE];</strong></p>
  
  <p><strong>arrfloat.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>arrfloat.m_Array[x] = 1.1111*x;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>printf("invoking echoFloatArray...\n");</strong></p>
  
  <p><strong>if (ws.echoFloatArray(arrfloat).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>// testing echo Struct</strong></p>
  
  <p><strong>SOAPStruct stct;</strong></p>
  
  <p><strong>stct.varFloat = 12345.7346345;</strong></p>
  
  <p><strong>stct.varInt = 5000;</strong></p>
  
  <p><strong>stct.varString = "This is string in SOAPStruct";</strong></p>
  
  <p><strong>printf("invoking echoStruct...\n");</strong></p>
  
  <p><strong>if (ws.echoStruct(&amp;stct) != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo Array of Struct</strong></p>
  
  <p><strong>ArrayOfSOAPStruct arrstct;</strong></p>
  
  <p><strong>arrstct.m_Array = new SOAPStruct[ARRAYSIZE];</strong></p>
  
  <p><strong>arrstct.m_Size = ARRAYSIZE;</strong></p>
  
  <p><strong>for (x=0;x {</strong></p>
  
  <p><strong>arrstct.m_Array[x].varFloat = 1.1111*x;</strong></p>
  
  <p><strong>arrstct.m_Array[x].varInt = x;</strong></p>
  
  <p><strong>sprintf(buffer, "varString of %dth element of SOAPStruct array",
  x);</strong></p>
  
  <p><strong>arrstct.m_Array[x].varString = buffer;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p><strong>//testing echo Struct Array</strong></p>
  
  <p><strong>printf("invoking echoStructArray...\n");</strong></p>
  
  <p><strong>if (ws.echoStructArray(arrstct).m_Array != NULL)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo void</strong></p>
  
  <p><strong>printf("invoking echoVoid...\n");</strong></p>
  
  <p><strong>ws.echoVoid();</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>//testing echo base 64 binary</strong></p>
  
  <p><strong>printf("invoking echoBase64...\n");</strong></p>
  
  <p><strong>if (ws.echoBase64("</strong></p>
  
  <p><strong>BCDF675E234242WHRTKMJDGKGUEJ898636JFJFHEJDGWTDHFJRURYGBCDHTWRSG")</strong></p>
  
  <p><strong>=="BCDF675E234242WHRTKMJDGKGUEJ898636JFJFHEJDGWTDHFJRURYGBCDHTWRSG")
  <br>
  printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>time_t tim;</strong></p>
  
  <p><strong>time(&amp;tim);</strong></p>
  
  <p><strong>tm* lt = gmtime(&amp;tim);</strong></p>
  
  <p><strong>printf("invoking echoDate...\n");</strong></p>
  
  <p><strong>if (memcmp(&amp;ws.echoDate(*lt), lt, sizeof(tm)) ==
  0)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo hex binary</strong></p>
  
  <p><strong>printf("invoking echoHexBinary...\n");</strong></p>
  
  <p><strong>if (ws.echoHexBinary("<br>
  CCCFFA46552BC7D5A09BC5F23DE9E0FE7862AD45BC87D02FEE") ==</strong></p>
  
  <p><strong>"CCCFFA46552BC7D5A09BC5F23DE9E0FE7862AD45BC87D02FEE")</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo decimal</strong></p>
  
  <p><strong>printf("invoking echoDecimal...\n");</strong></p>
  
  <p><strong>if (ws.echoDecimal(1234.567890) &gt; 1234.56)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>//testing echo boolean</strong></p>
  
  <p><strong>printf("invoking echoBoolean...\n");</strong></p>
  
  <p><strong>if (ws.echoBoolean(1) == 1)</strong></p>
  
  <p><strong>printf("successful\n");</strong></p>
  
  <p><strong>else</strong></p>
  
  <p><strong>printf("failed\n");</strong></p>
  
  <p><strong>getchar();</strong></p>
  
  <p><strong>return 0;</strong></p>
  
  <p><strong>}</strong></p>
  
  <p></p>
  
  <p>You will find the client libraries required to run the sample client
  installed in <strong>$AXISCPP_HOME/lib/axis</strong></p>
  
  <p></p>
  
  <p>Now</p>
  
  <p></p>
  
  <p><strong>cd $AXISCPP_HOME/samples/client/interoptests/base</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -DHAVE_CONFIG_H -I. -I. -I.. -I$AXISCPP_HOME/include
  -Wshadow -Wall -pedantic<br>
  </strong><strong>- ansi -g -O2 -c ./*.cpp -fPIC</strong></p>
  
  <p></p>
  
  <p><strong>$ g++ -g -O2 -o interopbase InteropBaseClient.o SOAPStruct.o
  InteropTestPortType.o<br>
  </strong><strong>$AXISCPP_HOME/lib/axis/libaxiscpp_client.a
  $AXISCPP_HOME/lib/axis/libaxiscpp_mod.a <br>
  -</strong><strong>L$AXISCPP_HOME/lib/xerces-c -lxerces-c -ldl <br>
  </strong><strong>$AXISCPP_HOME/src/client/lib/libaxiscpp_client.a <br>
  </strong><strong>$AXISCPP_HOME/release/libaxiscpp_mod.a
  -L$AXISCPP_HOME/lib/xerces-c -lxerces-c -ldl</strong></p>
  
  <p></p>
  
  <p>Start the Apache Server(Assuming base service is deployed.)</p>
  
  <p></p>
  
  <p><strong>$ /usr/local/apache/bin/apachectl start</strong></p>
  
  <p></p>
  
  <p>To Run</p>
  
  <p><strong>$ ./interopbase</strong></p>
  
  <p><a name="Handler1"></a></p>
  
  <h1>Handler Sample</h1>
  
  <p></p>
  
  <p>Sample handler libraries are included in
  <strong>$(AXIS_HOME)/handlers</strong> folder(assuming that you created this
  folder as described in installation guide). Several sample handlers are
  included there covering the concepts of service specific, global and
  transport handlers. We will show you the detail of running a service specific
  handler named loghandler. The task of this handler is writing to a file the
  number of times the service is accessed.</p>
  
  <p></p>
  
  <p><strong>cp -rf $AXISCPP_HOME/deploy/handlers $(AXIS_HOME)/</strong></p>
  
  <p></p>
  
  <p><strong>&lt;service name="InteropBase" provider="C:RPC"
  description="SOAPBuilders Interoperability Lab Round</strong><br>
  <strong>2 base test suite described at
  http://www.whitemesa.com/interop/proposal2.html "&gt;</strong><br>
  <strong>&lt;requestFlow name="calchandlers"&gt;</strong><br>
  <strong>&lt;handler name="LogAccessCount"</strong><br>
  <strong>type="/usr/local/apache/Axis/handlers/custom/loghandler/libloghandler.so"&gt;</strong><br>
  <strong>&lt;parameter name="logAccessCountFile"</strong><br>
  <strong>value="/usr/local/apache/Axis/handlers/custom/loghandler/LogAccessCountFile"/&gt;</strong><br>
  <strong>&lt;/handler&gt;</strong><br>
  <strong>&lt;/requestFlow&gt;</strong><br>
  <strong>&lt;parameter name="allowedMethods" value="echoString EchoInt
  echoStringArray</strong><br>
  <strong>echoInteger echoIntegerArray echoFloat echoFloatArray echoStruct
  echoStructArray echoVoid </strong><br>
  <strong>echoBase64 echoDate echoHexBinary echoDecimal echoBoolean
  "/&gt;</strong><br>
  <strong>&lt;parameter name="className"
  value="/usr/local/apache/Axis/webservices/libinteropbase.so"/&gt;</strong><br>
  <strong>&lt;/service&gt;</strong></p>
  
  <p></p>
  
  <p>Restart the apache web server and test your handler using the web service
  client for InteropBase webservice. When the client is run an entry will be
  added to
  <strong>/usr/local/apache/Axis/handlers/custom/loghandler/LogAccessCountFile</strong>
  Note that the folder in which the LogAccessCountFile is created should have
  write access. You can test the global handlers and transport handlers in a
  similar manner. Note the change you have to make in server.wsdd. You can see
  how this is done in the specimen folder
  <strong>$(AXISCPP_HOME)/deploy/conf/server.wsdd</strong>.</p>
  
  <p></p>
  
  <p><strong>TODO:</strong> document how the users can write their own handlers
  and webservices. For the time being users can refer to the samples given and
  follow their example to write their own handlers and webservices. This task
  is fairly easy if you follow the examples.</p>
  
  <p></p>
  
  <p>You can use the tcpmon program of Axis Java to view what goes on the wire
  when a soap transaction is taking place. Please visit <a
  href="http://ws.apache.org/axis">http://ws.apache.org/axis/</a> and get Axis
  java, to obtain tcpmon.</p>
  
  <p></p>
  
  <p>Your contribution to Axis C++ as a developer, tester is highly
  appreciated. You can download the latest source from the cvs repository as
  documented below.</p>
  
  <p><a name="Getting"></a></p>
  
  <h1>Getting a CVS checkout</h1>
  
  <p>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></p>
  
  <p><strong>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic
  login</strong></p>
  
  <p><strong>password: anoncvs</strong></p>
  
  <p><strong>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout
  ws-axis"</strong></p>
  
  <p></p>
  
  <p>The examples given below will be based on these lines of instructions.</p>
  
  <p></p>
  
  <p>To use the command line cvs client go to <a
  href="http://www.cvshome.org">http://www.cvshome.org</a> and download the cvs
  binaries for windows. Extract the cvs binaries from the downloaded zip file.
  There will be a <strong>"cvs.exe"</strong> file when this is
  extracted. Set the PATH environment variable to where "cvs.exe"
  is. You would have to do the following to get a checkout from the command
  line cvs client.</p>
  
  <p></p>
  
  <p><strong>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic
  login</strong></p>
  
  <p></p>
  
  <p>Now you will be prompted for the password. Enter the password.</p>
  
  <p><strong>password: anoncvs</strong></p>
  
  <p></p>
  
  <p>Now enter the following cvs command to checkout the axis Repository.</p>
  
  <p></p>
  
  <p><strong>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout
  ws-axis</strong></p>
  
  
  <p>The checkout of the repository will be created in the current directory in
  a folder named &#x201c;ws-axis&#x201d;</p>
  </body>
  </html>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/lininstall-guide.ihtml
  
  Index: lininstall-guide.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Axis C++ Linux Installation Guide</title>
    <style type="text/css">
  
  .command {color: #B20000;
  text-indent: 60pt;
  font-family: helvetica;
  font-weight: bold}</style>
    <meta name="generator" content="amaya 8.1b, see http://www.w3.org/Amaya/">
  </head>
  
  <body>
  <h1>Installing and deploying web applications using xml-AxisC++</h1>
  
  <p></p>
  
  <h1>Contents</h1>
  <ul>
    <li><a href="#Introducti">Introduction</a></li>
    <li><a href="#What">What You Need</a></li>
    <li><a href="#Installati">Installing On Linux</a></li>
    <li><a href="#Installing">Installing Xercesc</a></li>
    <li><a href="#Installing1">Installing Apache</a></li>
    <li><a href="#Installing2">Installing AxisC++</a></li>
    <li><a href="#Validating">Validating The Installation</a></li>
  </ul>
  <p><a name="Introducti"></a></p>
  <h1>Introduction</h1>
  
  <p>This document describes how to install Apache Axis C++. It assumes you
  already know how to write and run C++/C code and not scared away by XML. You
  should also have familiarity with Web servers. This version of Axis C++ is
  tested on Apache web server.</p>
  
  <p>For more details on using Axis C++, please see the <a
  href="linuser-guide.html">user guide</a>.This will instruct you how to
  install Axis C++ on Linux and Windows</p>
  
  <p></p>
  <p><a name="What"></a></p>
  <h1>What You need</h1>
  
  <p>It needs a few helper libraries, for logging, WSDL processing and
  introspection. You need to have following in order to run Axis C++ engine.</p>
  <ul>
    <li>XercesC</li>
    <li>Apache</li>
  </ul>
  
  <p></p>
  <p><a name="Installati"></a></p>
  <h1>Installation On Linux</h1>
  
  <p>We tested with the following</p>
  <ul>
    <li>Redhat Linux 8.0(2.4.18-14) RedhatLinux9.0(2.4.20-8)</li>
    <li>Apache 1.3 [apache_1.3.27.tar .gz, apache_1.3.28.tar.gz)] (Source)</li>
    <li>Xerces C++ [xerces-c-src2_2_0.tar.gz](Source) &gt;(Source)</li>
  </ul>
  
  <p></p>
  
  <p><b>Getting the source or binary from the mirror site and setting the
  environment variables</b></p>
  
  <p>User can download the Axis C++ source or binary from one of the apache
  mirror sites</p>
  
  <p></p>
  
  <p>Your downloaded distribution is axis-c-src-alpha-linux.tar.gz. After you
  extracting it for example as,
  <strong>/home/axisuser/projects/axis-c-src-alpha-linux</strong> you can
  rename it as <strong>axis_c</strong></p>
  
  <p></p>
  
  <p>The directory where you extracted the tar ball will be called
  &lt;axiscpphome&gt; from now on. We further assume that the user dose the
  installation and has the linux user account axisuser. For example I have my
  &lt;axiscpphome&gt; as following.</p>
  
  <p>/home/axisuser/projects</p>
  <p><a name="Installing"></a></p>
  <h1>Installing Xercesc</h1>
  
  <p>You can get the Binary Version and the Source Version of xercesc2_2_0 from
  the uri <a href="http://www.xerces.org/">www.xerces.org</a></p>
  
  <p></p>
  
  <p>If it is source you need to follow the xerces_c Installation guide
  documentation.(warning: This must be strictly followed. Otherwise if you type
  usual configure,make, make install, it may not work.)</p>
  
  <p></p>
  <p><a name="Installing1"></a></p>
  <h1>Installing Apache</h1>
  
  <p>Get the apache downloadable software. (We used the source
  apache_1.3.27.tar.gz). Build it with sharable module support.</p>
  
  <p><strong>$ ./configure --enable-module=so</strong></p>
  
  <p>Note:- Here "so" are simple letters</p>
  
  <p></p>
  
  <p><strong>$ make</strong></p>
  
  <p><strong>$ make install</strong></p>
  
  <p></p>
  
  <p>Starting the Apache server</p>
  
  <p></p>
  
  <p><strong>$ usr/local/apache/bin/apachectl start</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Stopping the Apache Server</p>
  
  <p></p>
  
  <p><strong>$ usr/local/apache/bin/apachectl stop</strong></p>
  <p><a name="Installing2"></a></p>
  <h1>Installing Axis C++</h1>
  
  <p>Create an environment variable called AXISCPP_HOME.</p>
  
  <p><strong>$ cd /home/axisuser</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p><strong>[axisuser@localhost axisuser]$ vi ./.bash_profile</strong></p>
  
  <p></p>
  
  <p><strong>AXISCPP_HOME="/home/axisuser/projects/axis_c"</strong></p>
  
  <p></p>
  
  <p><strong>export AXISCPP_HOME</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Save it and back in the terminal window.</p>
  
  <p><strong>$ source ~/.bash_profile</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Verify the above change had been correctly effected by typing</p>
  
  <p></p>
  
  <p><strong>$ echo $AXISCPP_HOME</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Copy xerces_c include files</p>
  
  <p><strong>$ cp -f &lt;xercesinstdirectory&gt;/include/xercesc/*
  $AXISCPP_HOME /include/xercesc/</strong></p>
  
  <p>Copy the xercesc libraries</p>
  
  <p><strong>$ cp -f &lt;xercesinstdirectory&gt;/lib/* /usr/lib/</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Copy apache include files</p>
  
  <p><strong>$ cp -f &lt;apacheinstdirectory&gt;/include/*
  $AXISCPP_HOME/include/apache1_3/</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p><strong>$ cd $AXISCPP_HOME</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>To Build from the Axis C++ source execute these.</p>
  
  <p></p>
  
  <p><strong>$ sh autogen.sh</strong></p>
  
  <p><strong>$ sh runconfig</strong></p>
  
  <p><strong>$ make</strong></p>
  
  <p><strong>$ make install</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Now libaxiscpp_mod.so should have been created in $AXISCPP_HOME/bin
  directory. Note:- you can give the install path inside the runconfigure
  script.There will be link errors if you don't use correct version of
  xerces-c.</p>
  
  <p></p>
  
  <p>Now you need to edit /usr/local/apache/conf/httpd.conf</p>
  
  <p><strong>$ vi /usr/local/apache/conf/httpd.conf</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>At the bottom of the file you have to include following lines and save
  it.</p>
  
  <p></p>
  
  <p><strong>LoadModule axis_module libexec/libaxiscpp_mod.so</strong></p>
  
  <p><strong>&lt;Location /axis&gt;</strong></p>
  
  <p><strong>SetHandler axis</strong></p>
  
  <p><strong>&lt;/Location&gt;</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Copy /home/axisuser/projects/axis_c/bin/libaxiscpp_mod.so into
  /usr/local/Apache/libexec/</p>
  
  <p><strong>$cp -f /home/axisuser/projects/axis_c/bin/libaxiscpp_mod.so
  /usr/local/apache/libexec</strong></p>
  
  <p class="command"><span class="command"></span></p>
  
  <p>Restart apache</p>
  <p><a name="Validating"></a></p>
  <h1>Validating The Installation</h1>
  
  <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>.</p>
  
  <p></p>
  
  <p><b>Deploying a Web Service Using InteropBase.wsdl</b></p>
  
  <p>You can deploy your own web service or the sample webservices with the
  guidance in the <a href="linuser-guide.html">userguide</a></p>
  
  <p></p>
  
  <p>WSDL2Ws tool must run on a jvm.</p>
  </body>
  </html>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/index.ihtml
  
  Index: index.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html">
    <title>Axis C++ alpha Released!</title>
  </head>
  
  <body>
  <h1>Axis C++ is released (Alpha)!</h1>
  
  <p><br>
  </p>
  
  <h2>What is Axis C++?</h2>
  
  <p>Axis C++ is a SOAP implementation done in C++ which can be used as a SOAP
  messaging server or client.</p>
  
  <p>While Axis C++ has adopted the general architecture of Axis java, it
  introduces several core architectural features that is meant for increased
  performance.</p>
  
  <h2>Developer Base</h2>
  
  <p>Axis C++ was initiated and developed by a group of developers from
  <strong>Sri Lanka</strong> and is the first effort of it's kind in the
  country.</p>
  
  <p>The team consists of four active developers and other contributors
  sponsored by Sri Lankan software companies. Development is done at the <a
  href="http://www.opensource.lk/">LSF (Lanka Software Foundation)</a> which,
  launched the Axis C++ effort.</p>
  
  <p>The Axis C++ team hopes to attract a large user base and welcomes the
  participation of other developers to make Axis C++ a success.</p>
  
  <p></p>
  
  <p><a href="download.html">Try out Axis C++!</a></p>
  
  <p><br>
  </p>
  </body>
  </html>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/download.ihtml
  
  Index: download.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Axis C++ download page</title>
    <meta name="generator" content="amaya 8.1b, see http://www.w3.org/Amaya/">
  </head>
  
  <body>
  <h1>Download Axis C++</h1>
  
  <p></p>
  
  <p><a href="http://www.apache.org/dist/ws/axis-c/">Direct Link</a></p>
  
  <p>(Direct link to a Axis C++ distribution folder)</p>
  
  <p></p>
  
  <p><a href="http://www.apache.org/dyn/closer.cgi">Mirror Sites</a></p>
  
  <p>(Click on the address of a mirror. Once you are presented with the
  contents of the dist folder, click on the "ws" folder.<br>
  Then click on "axis-c" to find the distribution)</p>
  </body>
  </html>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/documentation.ihtml
  
  Index: documentation.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html">
    <title>Axis C++ Documentation</title>
  </head>
  
  <body>
  <h1>Axis c++ Documentation (Alpha)</h1>
  <br>
  
  
  <h2>Linux Documentation</h2>
  
  <p><a href="lininstall-guide.html">Linux Installation Guide</a><br>
  <a href="linuser-guide.html">Linus User Guide</a></p>
  
  <h2>Windows Documentation</h2>
  
  <p><a href="wininstall-guide.html">Windows Installation Guide</a><br>
  <a href="winuser-guide.html">Windows User Guide</a><br>
  <a href="windev-guide.html">Windows Developer's Guide</a><br>
  </p>
  </body>
  </html>