ws-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dami...@apache.org
Subject cvs commit: ws-site/targets/axis/cpp lininstall-guide.ihtml linuser-guide.ihtml
Date Wed, 11 Feb 2004 05:52:50 GMT
damitha     2004/02/10 21:52:50

  Added:       targets/axis/cpp lininstall-guide.ihtml linuser-guide.ihtml
  Log:
  
  
  Revision  Changes    Path
  1.1                  ws-site/targets/axis/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 expat</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>expat parser</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), Mandrake8.0(2.4.8-26)</li>
    <li>Apache 1.3 [apache_1.3.27.tar .gz, apache_1.3.28.tar.gz)] (Source), Apache2.0 (source)</li>
    <li>expat [expat-1.95.7.tar.gz](Source) &gt;(Source)</li>
  </ul>
  
  <p></p>
  
  <p><b>Downloading the source or binary from the mirror site and setting the
  environment variables</b></p>
  
  <p>You can download the Axis C++ source or binary from one of the apache
  mirror sites<a href="http://ws.apache.org/axis/cpp/download.html">http://ws.apache.org/axis/cpp/download.html</a></p>
  
  <p></p>
  
  <p>Your downloaded distribution is axis-c-src-1_0-linux.tar.gz. After you
  extracting it for example as,
  <strong>/home/axisuser/projects/axis-c-src-1_0-linux</strong> you can
  rename it as <strong>axis_c</strong></p>
  
  <p></p>
  
  <p>You have to set the environment variable $AXISCPP_HOME to the directory where you extracted the tar ball.. We further assume that the user dose the
  installation and has the linux user account axisuser. For example I have my
  &lt;AXISCPP_HOME&gt; as following.</p>
  
  <p>/home/axisuser/projects</p>
  <p><a name="Installing"></a></p>
  <h1>Installing expat</h1>
  
  <p>You can get expat from
  the uri <a href="http://sourceforge.net/projects/expat/">http://sourceforge.net/projects/expat/</a></p>
  
  <p></p>
  
  <p>You have to follow the expat installation guide to install it </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" is 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 expat.h include file</p>
  
  <p><strong>$ cp -f &lt;expat  instdirectory&gt;/include/expat.h/*
  $AXISCPP_HOME /include/expat/</strong></p>
  
  <p>Copy the expat libraries</p>
  
  <p><strong>$ cp -f &lt;expatinstdirectory&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>
  <p>
  -----------------------------------------------------------------------
  </p>
  <strong>NOTE: </strong>If you use apache2.0 following two small changes has to be done in $AXISCPP_HOME/configure.ac and $AXISCPP_HOME/src/server/Makefile.am)
  </p>
  <p>
  in $AXISCPP_HOME/configure.ac
  </p>
  <p>
  comment
  </p>
  <p>
  <strong>
  AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/engine/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/server/Makefile src/server/apache/Makefile)
  </strong>
  </p>
  <p>
  and uncomment
  </p>
  <p>
  <strong>
  #AC_OUTPUT(Makefile src/Makefile src/common/Makefile src/engine/Makefile src/soap/Makefile src/wsdd/Makefile src/xml/Makefile src/server/Makefile src/server/apache2/Makefile)
  </strong>
  </p>
  <p>
  in $AXISCPP_HOME/src/server/Makefile.am
  </p>
  <p>
  change
  SUBDIRS = apache
  to
  SUBDIRS = apache2
  </p>
  <p>
  -----------------------------------------------------------------
  </p>
  
  <p>Now libaxiscpp_mod.so (If you built for apache2 this is libaxiscpp_mod2.so) should have been created in $AXISCPP_HOME/bin directory. Note:- you can give the install path inside the runconfigure
  script.</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 (in apache2 replace libexec with modules and libaxiscpp_mod.so with libaxiscpp_mod2.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 $AXISCPP_HOME/bin/libaxiscpp_mod.so into
  /usr/local/Apache/libexec/ (in apache2 replace libexec with modules and libaxiscpp_mod.so with libaxiscpp_mod2.so)</p>
  
  <p><strong>$cp -f $AXISCPP_HOME/bin/libaxiscpp_mod.so
  /usr/local/apache/libexec (in apache2 replace
  libexec with modules and libaxiscpp_mod.so with libaxiscpp_mod2.so)</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-site/targets/axis/cpp/linuser-guide.ihtml
  
  Index: linuser-guide.ihtml
  ===================================================================
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html">
    <title>Axis C++ User Guide</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 (or Apache2.0)</p>
  
  <p>- expat</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/samples/client/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/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>$AXISCPP_HOME/</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 $AXISCPP_HOME/deploy
  /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>Note that inside $AXIS_HOME directory there is a file called axiscpp.conf.
  Make sure that it has read permissions. This file contains key, value pairs
  of paths used by the Axis Soap Engine. You can change the WSDDFILEPATH and
  AXISLOGPATH inside this file according to your choice.</p>
  
  <p></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/samples/server/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/expat</strong></p>
  
  <p><strong>-lexpat -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 has to be 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><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/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><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>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/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 $AXISCPP_HOME/lib/axis/libaxiscpp_client.a $AXISCPP_HOME/bin/libaxiscpp_mod.a -L$AXISCPP_HOME/lib/expat -lexpat -ldl</strong><br>
  
  </p>
  
  <p></p>
  <p>
  Note that in the above command replace libaxiscpp_mod.a with libaxiscpp_mod2.a if you work with
  apache2
  </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>$ cd $AXISCPP_HOME/samples/client/interoptests/base
  </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. 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
  $AXISCPP_HOME/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>$AXIS_HOME/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/server/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>$AXISCPP_HOME/</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 $AXISCPP_HOME/deploy
  /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/samples/server/introptests/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/expat -lexpat -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 has to be 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>
  <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 $AXISCPP_HOME/lib/axis/libaxiscpp_client.a
  $AXISCPP_HOME/lib/axis/libaxiscpp_mod.a -L$AXISCPP_HOME/lib/expat -lexpat -ldl $AXISCPP_HOME/lib/axis/libaxiscpp_client.a $AXISCPP_HOME/lib/axis/libaxiscpp_mod.a
  -L$AXISCPP_HOME/lib/expat -lexpat -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>$ cd $AXISCPP_HOME/samples/client/interoptests/base
  </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>$(AXISCPP_HOME)/src/server/handlers</strong> folder. 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>
  
  
  

Mime
View raw message