ws-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d...@apache.org
Subject cvs commit: ws-site/targets/axis/cpp architecture-guide.html developers-guide.html integration-guide.html user-guide.html architecture-guide.pdf developers-guide.pdf integration-guide.pdf user-guide.pdf
Date Fri, 24 Oct 2003 13:20:56 GMT
dims        2003/10/24 06:20:56

  Added:       targets/axis/cpp architecture-guide.html
                        developers-guide.html integration-guide.html
                        user-guide.html architecture-guide.pdf
                        developers-guide.pdf integration-guide.pdf
                        user-guide.pdf
  Log:
  axis c++ docs from tetsuya
  
  Revision  Changes    Path
  1.1                  ws-site/targets/axis/cpp/architecture-guide.html
  
  Index: architecture-guide.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
  <head>
  <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!--*** This is a generated file.  Do not edit.  ***-->
  <link rel="stylesheet" href="../skin/tigris.css" type="text/css">
  <link rel="stylesheet" href="../skin/mysite.css" type="text/css">
  <link rel="stylesheet" href="../skin/site.css" type="text/css">
  <link media="print" rel="stylesheet" href="../skin/print.css" type="text/css">
  <title>Axis Architecture Guide</title>
  </head>
  <body bgcolor="white" class="composite">
  <!--================= start Banner ==================-->
  <div id="banner">
  <table width="100%" cellpadding="8" cellspacing="0" summary="banner" border="0">
  <tbody>
  <tr>
  <!--================= start Group Logo ==================-->
  <td align="left">
  <div class="groupLogo">
  <a href="http://ws.apache.org/"><img border="0" class="logoImage" alt="The Apache WebServices Project" src="../images/project-logo.jpg"></a>
  </div>
  </td>
  <!--================= end Group Logo ==================-->
  <!--================= start Project Logo ==================--><td align="right">
  <div class="projectLogo">
  <a href="http://ws.apache.org/axis/"><img border="0" class="logoImage" alt="The Apache Axis Project" src="../images/axis.jpg"></a>
  </div>
  </td>
  <!--================= end Project Logo ==================-->
  <!--================= start Search ==================--><td valign="top" rowspan="2" align="right" class="search">
  <form target="_blank" action="http://www.google.com/search" method="get">
  <table summary="search" border="0" cellspacing="0" cellpadding="0">
  <tr>
  <td bgcolor="#a5b6c6" colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="8" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="ws.apache.org" name="sitesearch" type="hidden"><input size="10" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="GO" type="submit">
  <br>
                            Search WS</td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="7" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td class="bottom-left-thick"></td><td bgcolor="#a5b6c6"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td class="bottom-right-thick"></td>
  </tr>
  </table>
  </form>
  </td>
  <!--================= end Search ==================-->
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Banner ==================-->
  <!--================= start Main ==================-->
  <table width="100%" cellpadding="0" cellspacing="0" border="0" summary="nav" id="breadcrumbs">
  <tbody>
  <!--================= start Status ==================-->
  <tr class="status">
  <td>
  <!--================= start BreadCrumb ==================--><a href="http://www.apache.org/">Apache</a> | <a href="http://ws.apache.org/">WS</a><a href=""></a>
  <!--================= end BreadCrumb ==================--></td><td id="tabs">
  <!--================= start Tabs ==================-->
  <div class="tab">
  <span class="selectedTab"><a class="base-selected" href="../index.html">WebServices-Axis</a></span>
  </div>
  <!--================= end Tabs ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  <!--================= end Status ==================-->
  <table id="main" width="100%" cellpadding="8" cellspacing="0" summary="" border="0">
  <tbody>
  <tr valign="top">
  <!--================= start Menu ==================-->
  <td id="leftcol">
  <div id="navcolumn">
  <div class="menuBar">
  <div class="menu">
  <span class="menuLabel">Axis</span>
   
  <div class="menuItem">
  <a href="../index.html">Introduction</a>
  </div>
   
  <div class="menuItem">
  <a href="../news.html">News</a>
  </div>
  
   
  <div class="menuItem">
  <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages">FAQ/Wiki</a>
  </div>
   
  <div class="menu">
  <span class="menuLabel">Get Involved</span>
    
  <div class="menuItem">
  <a href="../overview.html">Overview</a>
  </div>
    
  <div class="menuItem">
  <a href="../cvs.html">CVS Repository</a>
  </div>
    
  <div class="menuItem">
  <a href="../mail.html">Mailing Lists</a>
  </div>
    
  <div class="menuItem">
  <a href="../ref.html">Reference Library</a>
  </div>
    
  <div class="menuItem">
  <a href="../bugs.html">Bugs</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (Java)</span>
    
  <div class="menuItem">
  <a href="../java/index.html">Documentation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/install.html">Installation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/user-guide.html">User's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/developers-guide.html">Developer's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/integration-guide.html">Integration Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/architecture-guide.html">Architecture Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reference.html">Reference Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reading.html">Reading Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/requirements.html">Requirements</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (C++)</span>
    
  <div class="menuItem">
  <a href="../cpp/user-guide.html">User's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/developers-guide.html">Developer's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/integration-guide.html">Integration Guide</a>
  </div>
    
  <div class="menuItem">
  <span class="menuSelected">Architecture Guide</span>
  </div> 
  </div>
  
  <div class="menu">
  <span class="menuLabel">Downloads</span>
    
  <div class="menuItem">
  <a href="../releases.html">Releases</a>
  </div>
    
  <div class="menuItem">
  <a href="../interim.html">Interim Drops</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/ws-axis/">Source Code</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Related Projects</span>
    
  <div class="menuItem">
  <a href="http://ws.apache.org/wsif/">WSIF</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/*checkout*/ws-wsil/java/README.htm">WSIL</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">WSDL4J</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www.uddi4j.org/">UDDI4J</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Misc</span>
    
  <div class="menuItem">
  <a href="../site.html">Whole Site</a>
  </div>
    
  <div class="menuItem">
  <a href="../who.html">Who We Are</a>
  </div>
    
  <div class="menuItem">
  <a href="../contact.html">Contact</a>
  </div>
    
  <div class="menuItem">
  <a href="../legal.html">Legal</a>
  </div>
  
    
  <div class="menuItem">
  <a href="../docs.html">Notes/Docs</a>
  </div>
  
  </div>
  
  
  </div>
  </div>
  </div>
  </td>
  <!--================= end Menu ==================-->
  <!--================= start Content ==================--><td>
  <div id="bodycol">
  <div class="app">
  <div align="center">
  <h1>Axis Architecture Guide</h1>
  </div>
  <div class="h3">
  <div class="h3">
  <h3>Axis C++ Architecture Guide</h3>
  </div>Under construction ....<br>
  <em>0.1 Version</em>
  <br>
  <em>Feedback: axis-dev@ws.apache.org</em>
  <div class="h4">
  <h4>Introduction</h4>
  </div>
  <div class="h4">
  <h4>Architectural Overview</h4>
  </div>
  <div class="h2">
  <h2>Handlers and the Message Path in Axis</h2>
  </div>
  <p>Axis C++ implementation follows how handlers and message paths work in Axis Java implementation.</p>
  <p>When the central Axis processing logic runs, a series of <strong>Handlers</strong> are each invoked in order. The order of invocation is determined by two factors - deployment configuration and whether the engine is a client or a server. The object which is passed to each Handler invocation is a <strong>MessageData</strong>. A MessageData is a structure which contains several important parts: 1) Deserializer, 2) Serializer, and 3) a bag of properties. More on this in a bit.</p>
  <div class="h2">
  <h2>Message Path on the Server</h2>
  </div>
  <strong>Chains</strong>
  <br>
  <img alt="" src="images/ServerMessagePath.jpg"><br>
  <strong>soapstream</strong><strong>soapstream</strong><strong>properties</strong>
  <p>The AxisEngine's first job is to check what the transport is. Then the MessageData object is created and populated (with Serializer, Deserializer etc). Also the Serializer and Deserializer is initialized. Then the configured handlers and the target web service handler are loaded. All transport, global and service specific handlers are loaded in to <strong>Chains.</strong> A <strong>Chain</strong> is also a Handler consisting of a sequence of Handlers which are invoked in turn -- more on Chains later.</p>
  <p>Then the loaded handler chains are invoked in the order shown passing the MessageData object into the invoke().</p>
  <div class="h4">
  <h4>Subsystems</h4>
  </div>
  <div class="h2">
  <h2>AxisEngine</h2>
  </div>
  <p>AxisEngine contains the core logic of the message flow. AxisEngine's "Process" method contains the message flow logic. Following sequence diagrams show the message flow logic.</p>
  <p>Following Diagram shows how the transport listener passes the SOAP message to the AxisEngine. AxisEngine is a singleton object for a process.</p>
  <p>
  <img alt="" src="images/translistner.jpg"></p>
  <p>Now following diagram depicts the Engine Initialization.</p>
  <p>
  <img alt="" src="images/Engineinit.jpg"></p>
  <p>Following diagram depicts the AxisEngine's message flow logic</p>
  <p>
  <img alt="" src="images/messageflow.jpg"></p>
  <div class="h2">
  <h2>HandlerPool</h2>
  </div>
  <p>AxisEngine instantiates a HandlerPool object in its constructor. HandlerPool does the following 3 tasks,</p>
  <ol>
  <li>Loads and keeps Transport and Global handlers.</li>
  <li>Loads service specific handlers when needed and unloads when needed.</li>
  <li>Loads target web service handler when needed and unloads when needed.</li>
  </ol>
  <p>To provide above functionality the HandlerPool makes use of other two classes HandlerChain and HandlerLoader. HandlerLoader loads holds and unloads the dynamic link library (or shared object) that contain either a handler or a web service. HandlerChain is used to keep a list of handlers to be invoked in order. HandlerChain itself is a handler.</p>
  <p>In order for the HandlerLoader to dynamically load a class, every DLL (or Shared object) must have following <strong>export functions</strong>.&nbsp;</p>
  <p>int GetClassInstance(DCLInterface **inst);</p>
  <p>int DestroyInstance(DCLInterface *inst);</p>
  <p>AxisEngine has no idea of any web service methods in the deployed web service class that is dynamically loaded from a DLL. Therefore in order to communicate with loaded class we have to have a known interface. This interface is known as <strong>BasicHandler</strong> and is known to AxisEngine. This interface is implemented by every webservice and a handler.</p>
  <p>
  <img alt="" src="images/handlers.jpg"></p>
  <div class="h2">
  <h2>Soap Deserializer</h2>
  </div>
  <p>Currently the Soap Deserializer is implemented using SAX2 parser. Soap Deserializer exposes and API such that the API is independent of the implementation. This API is decided with a view of using XML pull parsing for the implementation. Once the Deserializer is given a message with its SetStream(..) method its GetXXX methods can be called in sequence to get the parsed SOAP data.</p>
  <div class="h2">
  <h2> Soap Serializer</h2>
  </div>
  <p>Soap Serializer's task is to generate SOAP stream to be sent. There are a set of functions (API that is the opposite functionality with Soap Deserializer). Once the Serializer is given all the information that is required to generate a SOAP using the API, the getStream(..) function can be used to get the SOAP message.</p>
  <div class="h2">
  <h2> WSDD Module</h2>
  </div>
  <p>WSDD module is a set of classes that parses the deployment descriptor file(server.wsdd) and makes the information available to the AxisEngine.&nbsp; A WSDDDeployment object is instantiated in AxisEngine's constructor.</p>
  <div class="h2">
  <h2> Server Configuration</h2>
  </div>
  <div class="h2">
  <h2> Logger</h2>
  </div>
  <div class="h4">
  <h4>Web Service Deployment&nbsp;</h4>
  </div>
  <p>The solution is to write a wrapper class for each web service class. This wrapper class is written with full awareness of the actual web service class and the corresponding WSDD. Then this wrapper class is compiled to a DLL (Shared Library in Linux) and is deployed as the web service. Following diagram shows this process.</p>
  <p>
  <img alt="" src="images/deployprocess.jpg"></p>
  <p>&nbsp;</p>
  <div class="h4">
  <h4>Wrapper Classes and WSDL Generation</h4>
  </div>
  <p>
  <strong>WrapperClassGenerator</strong> writes the wrapper class using only the web services include file and the deployment descriptor for that web service. The corresponding WSDL too is generated.</p>
  <div class="h2">
  <h2>Web Service to Wrapper Class Mapping</h2>
  </div>
  <p>Following example shows how the Web service maps to the Wrapper class.</p>
  <p>
  <img alt="" src="images/Mappingheader.jpg"></p>
  <p>The actual web service object is instantiated in the constructor of the wrapper class and is destroyed in the destructor. The Invoke method can be written just by looking at the WSDD. Or else by looking at the exposed methods of the web service class. The Invoke method chooses what method to be called as follows.can be written just by looking at the WSDD. Or else by looking at the exposed methods of the web service class. The Invoke method chooses what method to be called as follows.</p>
  <p>
  <img alt="" src="images/invokemethod.jpg"></p>
  <p>Then each allowed method in the actual web service class is wrapped by a Wrapper method in the Wrapper class. Only a method signature is needed to write the corresponding wrapper method. This implies that following are needed,&nbsp;</p>
  <ol>
  <li>
  <p>Method Name</p>
  </li>
  <li>
  <p>No of parameters</p>
  </li>
  <li>
  <p>Sequence and types of the parameters</p>
  </li>
  <li>
  <p>Return type</p>
  </li>
  </ol>
  <p>
  <img alt="" src="images/methodimpl.jpg"></p>
  <div class="h4">
  <h4>Client Stub Generation</h4>
  </div>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <div class="h4">
  <h4>Open Issues</h4>
  </div>
  <p>1.</p>
  <div id="pdf" align="right">
  <a href="architecture-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
            PDF</a>
  </div>
  </div>
  </div>
  </div>
  </td>
  <!--================= end Content ==================-->
  </tr>
  </tbody>
  </table>
  <!--================= end Main ==================-->
  <!--================= start Footer ==================-->
  <div id="footer">
  <table summary="footer" cellspacing="0" cellpadding="4" width="100%" border="0">
  <tbody>
  <tr>
  <!--================= start Copyright ==================-->
  <td colspan="2">
  <div align="center">
  <div class="copyright">
                Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
              </div>
  </div>
  </td>
  <!--================= end Copyright ==================-->
  </tr>
  <tr>
  <td align="left">
  <!--================= start Host ==================-->
  <!--================= end Host ==================--></td><td align="right">
  <!--================= start Credits ==================-->
  <div align="right">
  <div class="credit"></div>
  </div>
  <!--================= end Credits ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Footer ==================-->
  </body>
  </html>
  
  
  
  1.1                  ws-site/targets/axis/cpp/developers-guide.html
  
  Index: developers-guide.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
  <head>
  <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!--*** This is a generated file.  Do not edit.  ***-->
  <link rel="stylesheet" href="../skin/tigris.css" type="text/css">
  <link rel="stylesheet" href="../skin/mysite.css" type="text/css">
  <link rel="stylesheet" href="../skin/site.css" type="text/css">
  <link media="print" rel="stylesheet" href="../skin/print.css" type="text/css">
  <title>Axis C++ Developer's Guide</title>
  </head>
  <body bgcolor="white" class="composite">
  <!--================= start Banner ==================-->
  <div id="banner">
  <table width="100%" cellpadding="8" cellspacing="0" summary="banner" border="0">
  <tbody>
  <tr>
  <!--================= start Group Logo ==================-->
  <td align="left">
  <div class="groupLogo">
  <a href="http://ws.apache.org/"><img border="0" class="logoImage" alt="The Apache WebServices Project" src="../images/project-logo.jpg"></a>
  </div>
  </td>
  <!--================= end Group Logo ==================-->
  <!--================= start Project Logo ==================--><td align="right">
  <div class="projectLogo">
  <a href="http://ws.apache.org/axis/"><img border="0" class="logoImage" alt="The Apache Axis Project" src="../images/axis.jpg"></a>
  </div>
  </td>
  <!--================= end Project Logo ==================-->
  <!--================= start Search ==================--><td valign="top" rowspan="2" align="right" class="search">
  <form target="_blank" action="http://www.google.com/search" method="get">
  <table summary="search" border="0" cellspacing="0" cellpadding="0">
  <tr>
  <td bgcolor="#a5b6c6" colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="8" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="ws.apache.org" name="sitesearch" type="hidden"><input size="10" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="GO" type="submit">
  <br>
                            Search WS</td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="7" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td class="bottom-left-thick"></td><td bgcolor="#a5b6c6"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td class="bottom-right-thick"></td>
  </tr>
  </table>
  </form>
  </td>
  <!--================= end Search ==================-->
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Banner ==================-->
  <!--================= start Main ==================-->
  <table width="100%" cellpadding="0" cellspacing="0" border="0" summary="nav" id="breadcrumbs">
  <tbody>
  <!--================= start Status ==================-->
  <tr class="status">
  <td>
  <!--================= start BreadCrumb ==================--><a href="http://www.apache.org/">Apache</a> | <a href="http://ws.apache.org/">WS</a><a href=""></a>
  <!--================= end BreadCrumb ==================--></td><td id="tabs">
  <!--================= start Tabs ==================-->
  <div class="tab">
  <span class="selectedTab"><a class="base-selected" href="../index.html">WebServices-Axis</a></span>
  </div>
  <!--================= end Tabs ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  <!--================= end Status ==================-->
  <table id="main" width="100%" cellpadding="8" cellspacing="0" summary="" border="0">
  <tbody>
  <tr valign="top">
  <!--================= start Menu ==================-->
  <td id="leftcol">
  <div id="navcolumn">
  <div class="menuBar">
  <div class="menu">
  <span class="menuLabel">Axis</span>
   
  <div class="menuItem">
  <a href="../index.html">Introduction</a>
  </div>
   
  <div class="menuItem">
  <a href="../news.html">News</a>
  </div>
  
   
  <div class="menuItem">
  <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages">FAQ/Wiki</a>
  </div>
   
  <div class="menu">
  <span class="menuLabel">Get Involved</span>
    
  <div class="menuItem">
  <a href="../overview.html">Overview</a>
  </div>
    
  <div class="menuItem">
  <a href="../cvs.html">CVS Repository</a>
  </div>
    
  <div class="menuItem">
  <a href="../mail.html">Mailing Lists</a>
  </div>
    
  <div class="menuItem">
  <a href="../ref.html">Reference Library</a>
  </div>
    
  <div class="menuItem">
  <a href="../bugs.html">Bugs</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (Java)</span>
    
  <div class="menuItem">
  <a href="../java/index.html">Documentation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/install.html">Installation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/user-guide.html">User's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/developers-guide.html">Developer's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/integration-guide.html">Integration Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/architecture-guide.html">Architecture Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reference.html">Reference Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reading.html">Reading Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/requirements.html">Requirements</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (C++)</span>
    
  <div class="menuItem">
  <a href="../cpp/user-guide.html">User's Guide</a>
  </div>
    
  <div class="menuItem">
  <span class="menuSelected">Developer's Guide</span>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/integration-guide.html">Integration Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/architecture-guide.html">Architecture Guide</a>
  </div> 
  </div>
  
  <div class="menu">
  <span class="menuLabel">Downloads</span>
    
  <div class="menuItem">
  <a href="../releases.html">Releases</a>
  </div>
    
  <div class="menuItem">
  <a href="../interim.html">Interim Drops</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/ws-axis/">Source Code</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Related Projects</span>
    
  <div class="menuItem">
  <a href="http://ws.apache.org/wsif/">WSIF</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/*checkout*/ws-wsil/java/README.htm">WSIL</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">WSDL4J</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www.uddi4j.org/">UDDI4J</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Misc</span>
    
  <div class="menuItem">
  <a href="../site.html">Whole Site</a>
  </div>
    
  <div class="menuItem">
  <a href="../who.html">Who We Are</a>
  </div>
    
  <div class="menuItem">
  <a href="../contact.html">Contact</a>
  </div>
    
  <div class="menuItem">
  <a href="../legal.html">Legal</a>
  </div>
  
    
  <div class="menuItem">
  <a href="../docs.html">Notes/Docs</a>
  </div>
  
  </div>
  
  
  </div>
  </div>
  </div>
  </td>
  <!--================= end Menu ==================-->
  <!--================= start Content ==================--><td>
  <div id="bodycol">
  <div class="app">
  <div align="center">
  <h1>Axis C++ Developer's Guide</h1>
  </div>
  <div class="h3">
  <div class="h3">
  <h3>Axis C++ Developer's Guide</h3>
  </div>
  <div class="h4">
  <h4>0.1 Version</h4>
  </div>
  <div class="h2">
  <h2>Table of Contents</h2>
  </div>
  <p>
  <a href="#Introduction">Introduction</a>
  <br>
  <a href="#General_Guidelines">General Guidelines</a>
  <br>
  <a href="#Development_Environment">Development Environment</a>
  <br>
  <a href="#Configuration_Properties">Configuration Properties</a>
  <br> 
  <a href="#Compile_And_Run">Compile and Run</a>
  <br>
  <a href="#Adding_Testcases">Adding Testcases</a>
  </p>
  <p>
  <a href="#ModuleAPI">Writing Transport Modules</a>
  <br>
  <a href="#TestStructure">Test and Samples Structure</a>
  <br>
  <a href="#CodeChecks">Adding Source Code Checks</a>
  <br>
  <a href="#JUnit">CUnit and Axis</a>
  <br>
  <a href="#Debugging">Debugging</a>
  <br>&nbsp;</p>
  <div class="h4">
  <h4>Introduction</h4>
  </div>
  <p>This document is intended for the developer who wish to download and compile and test the axis C++ server.</p>
  <div class="h4">
  <h4>General Guidelines</h4>
  </div>
  <ul>
  <li>TO DO ...</li>
  </ul>
  <div class="h4">
  <h4>Development Environment</h4>
  </div>
  <p>The following packages are required for axis development:</p>
  <ul>
  <li>
  <a href="http://xml.apache.org/dist/xerces-j">xerces</a> - xml processor</li>
  </ul>
  <div class="h4">
  <h4>Configuration Properties</h4>
  </div>
  <p>TO DO ...</p>
  <div class="h4">
  <h4>Compile and Run</h4>
  </div>
  <p>This document is intended for the developer who wish to download and test the axiscpp server.<br> Checkout axiscpp from cvs repository.<br>
  <br>To build axisengine library<br>==================<br>
  <br>When you download the source you have only Makfile.am's and configure.ac and autogen.sh script for building.<br>
  <br>make sure you create and set the environment variable AXISCPP_HOME to reflect the path to the directory where you downloaded the axiscpp. for example I have it as following<br>
  <br>AXISCPP_HOME="/home/damitha/projects/axiscpp/c"<br>
  <br>where c is the rood directory for axiscpp source. There you find autogen.sh, configure.ac etc.<br>
  <br>to build go to $AXISCPP_HOME dirctory.<br>
  <br>sh autogen.sh<br>
  <br>To avoid cluttering of the source with object files use the build directory to generate your object files.<br>
  <br>Now from c/build directory run<br>
  <br>sh runconfigure<br>
  <br>This will create all the Makefiles in a tree starting from build directory.<br>
  <br>make<br>then<br>make install<br>
  <br>this will install libaxiscpp_mod.so in c/release directory.<br>
  <br>copy this to /libexec directory and restart apache to load the axisengine in apache.<br>
  <br>Note: in $AXISCPP_HOME/include you have folder called xercesc apache1_3 apache2_0. Copy the corresponding include files into them.<br>
  <br>
  <br>To build samples<br>===========<br>Go to the samples folder<br>
  <br>$(AXISCPP_HOME)/src/server/samples<br>
  <br>and select the sample you want. As an example we try on simplewebservice<br>type the following commands in that order<br>
  <br>sh autogen.sh<br>sh runconfig<br>make<br>make install<br>
  <br>this will install the sample library in /usr/local/apache/Axis/webservices<br>
  <br>note: the server.wsdd file for this sample has to be put in<br>
  <br>/usr/local/apache/Axis/conf folder.<br>
  <br>This path is hardcoded in Axis.cpp file as following<br>
  <br>#define WSDDFILEPATH "/usr/local/apache/Axis/conf/server.wsdd"<br>
  </p>
  <div class="h4">
  <h4>Adding Testcases</h4>
  </div>
  <p>See Also: <a href="#TestStructure">Test and Samples Structure</a>
  </p>
  <div class="h4">
  <h4>Writing Transport Modules</h4>
  </div>
  <p>Axis C++ is plugged-in to any transport listener such as Apache Web Server or IIS through a Transport Module. Axis Engine and the Transport Module can be developed in 2 ways.</p>
  <p>They can be compiled and linked together into a single DLL (or Shared Object) which is plugged into the Transport Listener. This way reduces one level of indirection and leads to performance.</p>
  <p>They can be made 2 separate DLLs (or Shared Objects). Advantage of this method is that the 2 modules can be developed separately.</p>
  <p>Module should be written specifically for each kind of Transport Listener (Apache or IIS) whereas the AxisEngine is not specific to Transport Listener.</p>
  <p>So this API defines the way that Transport Module communicates with the AxisEngine.</p>
  <div class="h2">
  <h2>Module side API</h2>
  </div>
  <p>There is a set of functions to be implemented by each module. AxisEngine needs the module to implement them.</p>
  <p>int send_transport_information(TransportInfo*)</p>
  <p>int get_request_bytes(char*, int, int*)</p>
  <p>int send_response_bytes(char*)</p>
  <p>
  <strong>send_transport_information</strong>
  </p>
  <p>AxisEngine may call this function to send transport specific information of the response (Ex : http headers for HTTP transport).</p>
  <p>
  <strong>get_request_bytes</strong>
  </p>
  <p>AxisEngine calls this function whenever it needs more soap request bytes in the incoming stream. AxisEngine may call this function more than once.</p>
  <p>
  <strong>send_response_bytes</strong>
  </p>
  <p>AxisEngine calls this function whenever it wants to send a fragment of soap response to the Transport Listener. This function may also be called by the AxisEngine more than once depending on the size of the response. The transport listener may accumulate or send each fragment at each function call.</p>
  <div class="h2">
  <h2>AxisEngine side API</h2>
  </div>
  <p>AxisEngine has implemented following functions to be used by any Transport Module.</p>
  <p>1. int initialize_module()</p>
  <p>2. int initialize_process()</p>
  <p>3. int process_request(TransportInfo*)</p>
  <p>4. int finalize_process()</p>
  <p>
  <strong>initialize_module</strong>
  </p>
  <p>Transport Module <strong>MUST</strong> call this function when it loads the AxisEngine. If this function returns FAIL it cannot be assured that the AxisEngine works properly. Loading of all AxisEngine&rsquo;s components (DLLs) are done within this function.</p>
  <p>
  <strong>initialize_process</strong>
  </p>
  <p>As the AxisEngine is single threaded model, simultaneous requests are served by several processes spawned. So when each process is spawned, its initialization should be done. Therefore the Transport Module <strong>MUST</strong> call this API function when it spawns a new AxisEngine process.</p>
  <p>
  <strong>process_request</strong>
  </p>
  <p>Transport Module calls this function for each soap request. Transport Module should fill a TransportInfo structure with the relevant transport information and pass it to the process_request function. Returning FAIL indicates a critical error in processing the soap request (not a generation of Soap Fault).</p>
  <p>
  <strong>finalize_process</strong> <strong></strong>
  </p>
  <p>This function does the opposite of what initialize_process does and <strong>MUST</strong> be called by Transport Module for the process end.</p>
  <p>&nbsp;</p>
  <div class="h4">
  <h4>Test Structure</h4>
  </div>
  <p>&nbsp;</p>
  <div class="h4">
  <h4>Adding Source Code Checks</h4>
  </div>
  <p>&nbsp;</p>
  <div class="h4">
  <h4>CUnit and Axis</h4>
  </div>
  <p>&nbsp;</p>
  <div class="h4">
  <h4>Debugging</h4>
  </div>
  <div id="pdf" align="right">
  <a href="developers-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
            PDF</a>
  </div>
  </div>
  </div>
  </div>
  </td>
  <!--================= end Content ==================-->
  </tr>
  </tbody>
  </table>
  <!--================= end Main ==================-->
  <!--================= start Footer ==================-->
  <div id="footer">
  <table summary="footer" cellspacing="0" cellpadding="4" width="100%" border="0">
  <tbody>
  <tr>
  <!--================= start Copyright ==================-->
  <td colspan="2">
  <div align="center">
  <div class="copyright">
                Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
              </div>
  </div>
  </td>
  <!--================= end Copyright ==================-->
  </tr>
  <tr>
  <td align="left">
  <!--================= start Host ==================-->
  <!--================= end Host ==================--></td><td align="right">
  <!--================= start Credits ==================-->
  <div align="right">
  <div class="credit"></div>
  </div>
  <!--================= end Credits ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Footer ==================-->
  </body>
  </html>
  
  
  
  1.1                  ws-site/targets/axis/cpp/integration-guide.html
  
  Index: integration-guide.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
  <head>
  <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!--*** This is a generated file.  Do not edit.  ***-->
  <link rel="stylesheet" href="../skin/tigris.css" type="text/css">
  <link rel="stylesheet" href="../skin/mysite.css" type="text/css">
  <link rel="stylesheet" href="../skin/site.css" type="text/css">
  <link media="print" rel="stylesheet" href="../skin/print.css" type="text/css">
  <title>Axis System Integration Guide</title>
  </head>
  <body bgcolor="white" class="composite">
  <!--================= start Banner ==================-->
  <div id="banner">
  <table width="100%" cellpadding="8" cellspacing="0" summary="banner" border="0">
  <tbody>
  <tr>
  <!--================= start Group Logo ==================-->
  <td align="left">
  <div class="groupLogo">
  <a href="http://ws.apache.org/"><img border="0" class="logoImage" alt="The Apache WebServices Project" src="../images/project-logo.jpg"></a>
  </div>
  </td>
  <!--================= end Group Logo ==================-->
  <!--================= start Project Logo ==================--><td align="right">
  <div class="projectLogo">
  <a href="http://ws.apache.org/axis/"><img border="0" class="logoImage" alt="The Apache Axis Project" src="../images/axis.jpg"></a>
  </div>
  </td>
  <!--================= end Project Logo ==================-->
  <!--================= start Search ==================--><td valign="top" rowspan="2" align="right" class="search">
  <form target="_blank" action="http://www.google.com/search" method="get">
  <table summary="search" border="0" cellspacing="0" cellpadding="0">
  <tr>
  <td bgcolor="#a5b6c6" colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="8" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="ws.apache.org" name="sitesearch" type="hidden"><input size="10" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="GO" type="submit">
  <br>
                            Search WS</td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="7" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td class="bottom-left-thick"></td><td bgcolor="#a5b6c6"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td class="bottom-right-thick"></td>
  </tr>
  </table>
  </form>
  </td>
  <!--================= end Search ==================-->
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Banner ==================-->
  <!--================= start Main ==================-->
  <table width="100%" cellpadding="0" cellspacing="0" border="0" summary="nav" id="breadcrumbs">
  <tbody>
  <!--================= start Status ==================-->
  <tr class="status">
  <td>
  <!--================= start BreadCrumb ==================--><a href="http://www.apache.org/">Apache</a> | <a href="http://ws.apache.org/">WS</a><a href=""></a>
  <!--================= end BreadCrumb ==================--></td><td id="tabs">
  <!--================= start Tabs ==================-->
  <div class="tab">
  <span class="selectedTab"><a class="base-selected" href="../index.html">WebServices-Axis</a></span>
  </div>
  <!--================= end Tabs ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  <!--================= end Status ==================-->
  <table id="main" width="100%" cellpadding="8" cellspacing="0" summary="" border="0">
  <tbody>
  <tr valign="top">
  <!--================= start Menu ==================-->
  <td id="leftcol">
  <div id="navcolumn">
  <div class="menuBar">
  <div class="menu">
  <span class="menuLabel">Axis</span>
   
  <div class="menuItem">
  <a href="../index.html">Introduction</a>
  </div>
   
  <div class="menuItem">
  <a href="../news.html">News</a>
  </div>
  
   
  <div class="menuItem">
  <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages">FAQ/Wiki</a>
  </div>
   
  <div class="menu">
  <span class="menuLabel">Get Involved</span>
    
  <div class="menuItem">
  <a href="../overview.html">Overview</a>
  </div>
    
  <div class="menuItem">
  <a href="../cvs.html">CVS Repository</a>
  </div>
    
  <div class="menuItem">
  <a href="../mail.html">Mailing Lists</a>
  </div>
    
  <div class="menuItem">
  <a href="../ref.html">Reference Library</a>
  </div>
    
  <div class="menuItem">
  <a href="../bugs.html">Bugs</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (Java)</span>
    
  <div class="menuItem">
  <a href="../java/index.html">Documentation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/install.html">Installation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/user-guide.html">User's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/developers-guide.html">Developer's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/integration-guide.html">Integration Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/architecture-guide.html">Architecture Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reference.html">Reference Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reading.html">Reading Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/requirements.html">Requirements</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (C++)</span>
    
  <div class="menuItem">
  <a href="../cpp/user-guide.html">User's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/developers-guide.html">Developer's Guide</a>
  </div>
    
  <div class="menuItem">
  <span class="menuSelected">Integration Guide</span>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/architecture-guide.html">Architecture Guide</a>
  </div> 
  </div>
  
  <div class="menu">
  <span class="menuLabel">Downloads</span>
    
  <div class="menuItem">
  <a href="../releases.html">Releases</a>
  </div>
    
  <div class="menuItem">
  <a href="../interim.html">Interim Drops</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/ws-axis/">Source Code</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Related Projects</span>
    
  <div class="menuItem">
  <a href="http://ws.apache.org/wsif/">WSIF</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/*checkout*/ws-wsil/java/README.htm">WSIL</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">WSDL4J</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www.uddi4j.org/">UDDI4J</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Misc</span>
    
  <div class="menuItem">
  <a href="../site.html">Whole Site</a>
  </div>
    
  <div class="menuItem">
  <a href="../who.html">Who We Are</a>
  </div>
    
  <div class="menuItem">
  <a href="../contact.html">Contact</a>
  </div>
    
  <div class="menuItem">
  <a href="../legal.html">Legal</a>
  </div>
  
    
  <div class="menuItem">
  <a href="../docs.html">Notes/Docs</a>
  </div>
  
  </div>
  
  
  </div>
  </div>
  </div>
  </td>
  <!--================= end Menu ==================-->
  <!--================= start Content ==================--><td>
  <div id="bodycol">
  <div class="app">
  <div align="center">
  <h1>Axis System Integration Guide</h1>
  </div>
  <div class="h3">
  <div class="h3">
  <h3></h3>
  </div>
  <div class="h3">
  <h3>Axis C++ Integration Guide</h3>
  </div>
  <p>
  <em>0.1 Version</em>
  </p>
  <div class="h4">
  <h4>Introduction</h4>
  </div>
  <p>The primary purpose of this guide is to present how AXISCPP can be integrated into an existing web application server, such as Apache, Netscape web server for example.&nbsp; AXIS has a number of Pluggable APIs that are necessary for such an integration.</p>
  <p>The reader may find useful background information in the <a href="architecture-guide.html">Architecture Guide</a>
  </p>
  <div class="h4">
  <h4>Pluggable APIs</h4>
  </div>
  <p>The following are the points that are pluggable in order to integrate AXIS into a web application server. The first subsection details a number of pluggable components in general. More details are provided for other components in the remaining subsections.</p>
  <div class="h2">
  <h2>Handlers</h2>
  </div>
  <p>See the <a href="architecture-guide.html">Architecture Guide</a> for current information on Handlers. <!-- How can a system integrator plug in other encoding mechanisms such as SOAP
  1.2 or optimized XML-based encoding?
  <ul>
  <li>
  Justification/Rationale - why is this plug point necessary?&nbsp; Spec
  compliance?</li>
  
  <li>
  Interfaces</li>
  
  <li>
  Mechanism</li>
  
  <ul>
  <li>
  Life cycle</li>
  
  <li>
  Exception handling - in general; plug-in shouldn't throw any exceptions
  - does runtime ignore? Log?)</li>
  
  <li>
  Multiple thread support?&nbsp; Ie., is synchronization required?</li>
  </ul>
  
  <li>
  Configuration/reconfiguration</li>
  
  <li>
  Default behavior if not plugged.</li>
  
  <li>
  Example</li>
  </ul>
  --></p>
  <div class="h2">
  <h2>Configuration</h2>
  </div>
  <p>Axis C++ server can be configured to run on Aapache, Netscape web server(Not implemented yet) and Microsoft IIS(Not yet implemented. Also it is expected to run on Solaris, IBM AIX, HPUnix,FreeBSD, Linux and Windows. Currently it is tested only on RedHat Linux(8).</p>
  <p>Linux :Apache web server</p>
  <p>This document is intended for the developer who wish to download and test the axiscpp server.</p>
  <p>Checkout axiscpp from cvs repository.</p>
  <p>for simplicity assume that your axiscpp is now /usr/local/axiscpp</p>
  <p>From now on I call this &lt;axiscpp_home&gt;</p>
  <p>goto &lt;axiscpp_home&gt;/release</p>
  <p>
  <br>
  </p>
  <p>copy the libaxiscpp_mod.so file into &lt;apache home directory&gt;/libexec directory.</p>
  <p>For the apache server to load this shared module it (the apache web server) must be compiled with shareable module support (To do this, when running the configure script pass it the option "--enable-module=so") For further information on comipiling and installing the apache web server please visit http://httpd.apache.org .</p>
  <p>
  <br>
  </p>
  <p>open the httpd.conf file in &lt;apache directory&gt;/conf/</p>
  <p>add the following lines</p>
  <p>
  <br>
  </p>
  <p>LoadFile /usr/local/apache/libexec/libaxiscpp_mod.so</p>
  <p>LoadModule axis_module libexec/libaxiscpp_mod.so</p>
  <p>
  <br>
  </p>
  <p>&lt;Location /axis&gt;</p>
  <p>SetHandler axis</p>
  <p>&lt;/Location&gt;</p>
  <p>
  <br>
  </p>
  <p>where /axis is context path where the apache|axiscpp is listening to webservice requests.</p>
  <p>Now stop the apache web server if it is already started.</p>
  <p>Start the apache web server. If it starts without giving problem the module is successfully loaded.</p>
  <p>Read the userguide for information on how to test the webservices on your newly installed soap server.</p>
  <p>
  <br>
  <br>
  </p>
  <div id="pdf" align="right">
  <a href="integration-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
            PDF</a>
  </div>
  </div>
  </div>
  </div>
  </td>
  <!--================= end Content ==================-->
  </tr>
  </tbody>
  </table>
  <!--================= end Main ==================-->
  <!--================= start Footer ==================-->
  <div id="footer">
  <table summary="footer" cellspacing="0" cellpadding="4" width="100%" border="0">
  <tbody>
  <tr>
  <!--================= start Copyright ==================-->
  <td colspan="2">
  <div align="center">
  <div class="copyright">
                Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
              </div>
  </div>
  </td>
  <!--================= end Copyright ==================-->
  </tr>
  <tr>
  <td align="left">
  <!--================= start Host ==================-->
  <!--================= end Host ==================--></td><td align="right">
  <!--================= start Credits ==================-->
  <div align="right">
  <div class="credit"></div>
  </div>
  <!--================= end Credits ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Footer ==================-->
  </body>
  </html>
  
  
  
  1.1                  ws-site/targets/axis/cpp/user-guide.html
  
  Index: user-guide.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  <html>
  <head>
  <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!--*** This is a generated file.  Do not edit.  ***-->
  <link rel="stylesheet" href="../skin/tigris.css" type="text/css">
  <link rel="stylesheet" href="../skin/mysite.css" type="text/css">
  <link rel="stylesheet" href="../skin/site.css" type="text/css">
  <link media="print" rel="stylesheet" href="../skin/print.css" type="text/css">
  <title>Axis User</title>
  </head>
  <body bgcolor="white" class="composite">
  <!--================= start Banner ==================-->
  <div id="banner">
  <table width="100%" cellpadding="8" cellspacing="0" summary="banner" border="0">
  <tbody>
  <tr>
  <!--================= start Group Logo ==================-->
  <td align="left">
  <div class="groupLogo">
  <a href="http://ws.apache.org/"><img border="0" class="logoImage" alt="The Apache WebServices Project" src="../images/project-logo.jpg"></a>
  </div>
  </td>
  <!--================= end Group Logo ==================-->
  <!--================= start Project Logo ==================--><td align="right">
  <div class="projectLogo">
  <a href="http://ws.apache.org/axis/"><img border="0" class="logoImage" alt="The Apache Axis Project" src="../images/axis.jpg"></a>
  </div>
  </td>
  <!--================= end Project Logo ==================-->
  <!--================= start Search ==================--><td valign="top" rowspan="2" align="right" class="search">
  <form target="_blank" action="http://www.google.com/search" method="get">
  <table summary="search" border="0" cellspacing="0" cellpadding="0">
  <tr>
  <td bgcolor="#a5b6c6" colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="8" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="ws.apache.org" name="sitesearch" type="hidden"><input size="10" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="GO" type="submit">
  <br>
                            Search WS</td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td colspan="3"><img height="7" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
  </tr>
  <tr>
  <td class="bottom-left-thick"></td><td bgcolor="#a5b6c6"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td class="bottom-right-thick"></td>
  </tr>
  </table>
  </form>
  </td>
  <!--================= end Search ==================-->
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Banner ==================-->
  <!--================= start Main ==================-->
  <table width="100%" cellpadding="0" cellspacing="0" border="0" summary="nav" id="breadcrumbs">
  <tbody>
  <!--================= start Status ==================-->
  <tr class="status">
  <td>
  <!--================= start BreadCrumb ==================--><a href="http://www.apache.org/">Apache</a> | <a href="http://ws.apache.org/">WS</a><a href=""></a>
  <!--================= end BreadCrumb ==================--></td><td id="tabs">
  <!--================= start Tabs ==================-->
  <div class="tab">
  <span class="selectedTab"><a class="base-selected" href="../index.html">WebServices-Axis</a></span>
  </div>
  <!--================= end Tabs ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  <!--================= end Status ==================-->
  <table id="main" width="100%" cellpadding="8" cellspacing="0" summary="" border="0">
  <tbody>
  <tr valign="top">
  <!--================= start Menu ==================-->
  <td id="leftcol">
  <div id="navcolumn">
  <div class="menuBar">
  <div class="menu">
  <span class="menuLabel">Axis</span>
   
  <div class="menuItem">
  <a href="../index.html">Introduction</a>
  </div>
   
  <div class="menuItem">
  <a href="../news.html">News</a>
  </div>
  
   
  <div class="menuItem">
  <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?AxisProjectPages">FAQ/Wiki</a>
  </div>
   
  <div class="menu">
  <span class="menuLabel">Get Involved</span>
    
  <div class="menuItem">
  <a href="../overview.html">Overview</a>
  </div>
    
  <div class="menuItem">
  <a href="../cvs.html">CVS Repository</a>
  </div>
    
  <div class="menuItem">
  <a href="../mail.html">Mailing Lists</a>
  </div>
    
  <div class="menuItem">
  <a href="../ref.html">Reference Library</a>
  </div>
    
  <div class="menuItem">
  <a href="../bugs.html">Bugs</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (Java)</span>
    
  <div class="menuItem">
  <a href="../java/index.html">Documentation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/install.html">Installation</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/user-guide.html">User's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/developers-guide.html">Developer's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/integration-guide.html">Integration Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/architecture-guide.html">Architecture Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reference.html">Reference Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/reading.html">Reading Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../java/requirements.html">Requirements</a>
  </div>
   
  </div>
   
  <div class="menu">
  <span class="menuLabel">Axis (C++)</span>
    
  <div class="menuItem">
  <span class="menuSelected">User's Guide</span>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/developers-guide.html">Developer's Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/integration-guide.html">Integration Guide</a>
  </div>
    
  <div class="menuItem">
  <a href="../cpp/architecture-guide.html">Architecture Guide</a>
  </div> 
  </div>
  
  <div class="menu">
  <span class="menuLabel">Downloads</span>
    
  <div class="menuItem">
  <a href="../releases.html">Releases</a>
  </div>
    
  <div class="menuItem">
  <a href="../interim.html">Interim Drops</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/ws-axis/">Source Code</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Related Projects</span>
    
  <div class="menuItem">
  <a href="http://ws.apache.org/wsif/">WSIF</a>
  </div>
    
  <div class="menuItem">
  <a href="http://cvs.apache.org/viewcvs/*checkout*/ws-wsil/java/README.htm">WSIL</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">WSDL4J</a>
  </div>
    
  <div class="menuItem">
  <a href="http://www.uddi4j.org/">UDDI4J</a>
  </div>
  
  </div>
  
  <div class="menu">
  <span class="menuLabel">Misc</span>
    
  <div class="menuItem">
  <a href="../site.html">Whole Site</a>
  </div>
    
  <div class="menuItem">
  <a href="../who.html">Who We Are</a>
  </div>
    
  <div class="menuItem">
  <a href="../contact.html">Contact</a>
  </div>
    
  <div class="menuItem">
  <a href="../legal.html">Legal</a>
  </div>
  
    
  <div class="menuItem">
  <a href="../docs.html">Notes/Docs</a>
  </div>
  
  </div>
  
  
  </div>
  </div>
  </div>
  </td>
  <!--================= end Menu ==================-->
  <!--================= start Content ==================--><td>
  <div id="bodycol">
  <div class="app">
  <div align="center">
  <h1>Axis User</h1>
  </div>
  <div class="h3">
  <div class="h3">
  <h3></h3>
  </div>
  <div class="h3">
  <h3>Axis C++ User's Guide</h3>
  </div>
  <div class="h4">
  <h4>Introduction</h4>
  </div>
  <p>Welcome to Axis C++, a c++ implementation of SOAP !</p>
  <div class="h2">
  <h2>What is SOAP?</h2>
  </div>
  <p>SOAP is an XML<em>-</em>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, <a href="http://w3.org/TR/soap">SOAP 1.1</a>, is fast growing in popularity and usage. The W3C's <a href="http://www.w3.org/2000/xp/Group/">XML Protocol working group</a> 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.</p>
  <p>SOAP is widely viewed as the backbone to a new generation of cross-platform cross-language distributed computing applications, termed Web Services.</p>
  <div class="h2">
  <h2>What is Axis c++?</h2>
  </div>
  <p>Axis is essentially a <em>SOAP engine</em>. The more complete version of axis is written in java.This version is written in c++ and will continue to be developed.</p>
  <p>Axis c++ includes</p>
  <ul>
  <li>
  <p>an apache module that can be plugged in to the apache webserver on linux,</p>
  </li>
  <li>
  <p>A set of sample web service classes and their handwritten wrapper classes.</p>
  </li>
  </ul>
  <p>We hope you enjoy using Axis c++. 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.</p>
  <div class="h5">
  <h5>Let us know what you think!</h5>
  </div>
  <p>Please send feedback about the package to "<a href="mailto:axis-user@xml.apache.org">axis-user@xml.apache.org</a>".</p>
  <div class="h2">
  <h2>What's in Axis c++ at this moment?</h2>
  </div>
  <p>Axis c++ includes the following features:</p>
  <ul>
  <li>
  <p>Partial SOAP 1.1 compliant engine</p>
  </li>
  <li>
  <p>Support for all basic types</p>
  </li>
  <li>
  <p>Automatic serialization/deserialization of Java Beans, including customizable mapping of fields to XML elements/attributes</p>
  </li>
  <li>
  <p>Provider for RPC and based SOAP services</p>
  </li>
  </ul>
  <div class="h4">
  <h4>Consuming Web Services with Axis C++</h4>
  </div>
  <div class="h4">
  <h4>Publishing Web Services with Axis C++</h4>
  </div>
  <p>This chapter explains how to deploy the sample web services included with Axis C++.</p>
  <p>Hopefully by now you have installed Axis C++.<br>
  <br>If you haven't already done so download the binary version of Axis C++ and follow the instructions in the integration-guide to install it.<br>&nbsp;</p>
  <p>From here onwards the folder in which Axis C++ is installed by being extracted from the Axis C++ installation package will be referred to as<br>&lt;axiscpp_home&gt;.<br>
  <br>sample webservice modules are included in &lt;axiscpp_home&gt;/src/server/samples/<br>
  <br>in this folder you will find two subfolders called webservice and webservicewrapper and<br>service.wsdd file written by the service provider for his service.</p>
  <p>In the webservice folder, the header files and cpp files written in c++, for each of the webservice can be found. In the webservicewrapper folder the corresponding the wrapper classes for each of the webservices can be found. The wrapper classes are supposed to be generated by a tool called WCG (Wrapper Class Generator).</p>
  <p>
  <u>Using WCG</u>
  </p>
  <p>Suppose you have a C++ web service to be deployed called SimpleService. And the SimpleService.h and SimpleService.cpp are the source files. And SimpleService.cpp contains the implementation for the intended service. SimpeService.h contains only the declarations of the class. You need only this SimpleService.h to generate your wrapper classes.</p>
  <p>So you compile the sources and create a static library SimpleService.lib (or SimpleService.a in Linux) first using the compiler.&nbsp; Now wcg can create the service DLL for you with SimpleService.h and SimpleService.lib.</p>
  <p>Unwrap the WCG tool downloaded, into a working folder of your choice. Hereafter I name this folder as &lt;work&gt;.</p>
  <p>Unzip wcg.zip</p>
  <p>&gt;cd &lt;work&gt;/wcg</p>
  <p>&gt;dir</p>
  <p>&nbsp;Directory of E:\Axiswcg<br>
  <br>07/25/2003 08:32p &lt;DIR&gt; .<br>07/25/2003 08:32p &lt;DIR&gt; ..<br>07/24/2003 09:09p &lt;DIR&gt; common<br>07/25/2003 08:21p 249,856 wcg.exe</p>
  <p>This will contain the tool itself (wcg.exe) and the Axis common include files that are needed by the WCG to make the service DLL.</p>
  <p>Now run the wcg.exe with the following options.</p>
  <p>In linux</p>
  <p>&lt;work&gt;/wcg&gt;wcg -L&lt;path to directory where the SimpleService.a is&gt; -ISimpleService.lib -oMyService -I. -I&lt;path to directory where the SimpeWebService.h is&gt;</p>
  <p>In windows</p>
  <p>&lt;work&gt;/wcg&gt;wcg /L&lt;path to directory where the SimpleService.a is&gt; /ISimpleService.lib /oMyService /I. /I&lt;path to directory where the SimpeWebService.h is&gt;</p>
  <p>-L&lt;path to your service lib&gt; and -l&lt;your service lib name&gt; option tells wcg where your service library is.</p>
  <p>-I&lt;include file path&gt; option let you include additional header files. You can have multiple include paths.</p>
  <p>-o&lt;generated so/dll name&gt; will specify the name you want for your generated so/dll without extension.</p>
  <p>After executing this command you will find MyService.so (MyService.dll in windows) created in the current folder where you ran the wcg.exe.</p>
  <p>
  <br>Copy this so/dll into where apache will be serching for deployed services.</p>
  <p>
  <br>&nbsp;<u>Guidelines to follow in order to use WCG tool</u>
  </p>
  <ul>
  <li style="list-style: none">
  <p>Web service header files should follow following guidelines in order to use wrapper class generater tool. Most of the limitations imposed here are due to the fact that wrapper class is still young and evolving. Please feel free to report any other limitations you come across when using the WCG tool to <a href="mailto:axis-dev@ws.apache.org?subject=[AxisC++] Reporting limitations in WCG tool">axis-dev@ws.apache.org</a>
  </p>
  </li>
  <li>
  <p>axis includes should be included as from standard include directories using '&lt;' and '&gt;'(not &acirc;&euro;œ.....&acirc;&euro;)</p>
  </li>
  <li>
  <p>All user types should derive from IAccessBean interface and inside the class predefined macro ACCESSBEAN_SERIALIZABLE should be declared.(See example)</p>
  </li>
  <li>
  <p>Basic data types shoud be passed and returned by value or by reference(using &amp;amp;)</p>
  </li>
  <li>
  <p>User data types shoud be passed and returned by pointers (using *).</p>
  </li>
  <li>
  <p>No variable qualifiers should be used such as const, static, volatile etc.</p>
  </li>
  <li>
  <p>No function qualifiers should be used such as const, static etc. except virtual.</p>
  </li>
  <li>
  <p>Should not use extern keyword.</p>
  </li>
  <li>
  <p>Defining macros is OK but using macros is not allowed.</p>
  </li>
  <li>
  <p>No global or static variables outside classes.</p>
  </li>
  <li>
  <p>Only integer default values are allowed for method parameters.</p>
  </li>
  <li>
  <p>No initialization lists for constructors.</p>
  </li>
  <li>
  <p>Member variables of basic types should be value types.</p>
  </li>
  <li>
  <p>Member variables of user types should be pointer types. Also constructors should allocate memory for these members and destructors should delete them.</p>
  </li>
  <li>
  <p>Namespace directives are allowed but no namespace declarations.</p>
  </li>
  <li>
  <p>Scope resolution operator(::) is not allowed anywhere.</p>
  </li>
  <li>
  <p>No enumerations allowed.</p>
  </li>
  <li>
  <p>No inline functions allowed.</p>
  </li>
  <li>
  <p>No type defs allowed.</p>
  </li>
  <li>
  <p>No operator overloading allowed.</p>
  </li>
  <li>
  <p>Using template keyword is not allowed. But using STL is OK.</p>
  </li>
  </ul>
  <p>Restart apache web server and test the web service using the java webservice client. For infromation on how to use the java web service client refer to the Axis java user guide which can be found at http://ws.apache.org/axis/.<br>
  <br>If you want to test handlers go into the &lt;axiscpp_home&gt;/src/servcer/handlers folder where example handlers are included. Change to a particular example directory of your choice and type the following</p>
  <p>make clean<br>make</p>
  <p>You will find the corresponding handler generated in &lt;axiscpp_home&gt;axis/handlers directory.<br>Restart the apache web server and test your handler using the web service client in Axis java.For infromation on how to use the java web service client refer to the Axis java user guide which can be found at http://ws.apache.org/axis/.<br>
  <br>Happy Axis!!!<br>
  <br>
  <br>&nbsp;</p>
  <p>&nbsp;</p>
  <div class="h4">
  <h4>XML &lt;-&gt; C++ Data Mapping in Axis C++</h4>
  </div>
  <div class="h2">
  <h2>How your&nbsp; C++ types map to SOAP/XML types</h2>
  </div>
  <div class="h5">
  <h5>Standard mappings from WSDL to C++</h5>
  </div>
  <table class="ForrestTable" cellspacing="1" cellpadding="4">
  <tr class="b">
  <td>
  <p>xsd:base64Binary</p>
  </td><td>
  <p>Not implemented yet</p>
  </td>
  </tr>
  <tr class="a">
  <td>
  <p>xsd:boolean</p>
  </td><td>
  <p>int</p>
  </td>
  </tr>
  <tr class="b">
  <td>
  <p>xsd:byte</p>
  </td><td>
  <p>unsigned char</p>
  </td>
  </tr>
  <tr class="a">
  <td>
  <p>xsd:dateTime</p>
  </td><td>
  <p>Not implemented yet</p>
  </td>
  </tr>
  <tr class="b">
  <td>
  <p>xsd:decimal</p>
  </td><td>
  <p>Not implemented yet</p>
  </td>
  </tr>
  <tr class="a">
  <td>
  <p>xsd:double</p>
  </td><td>
  <p>
  <tt>double</tt>
  </p>
  </td>
  </tr>
  <tr class="b">
  <td>
  <p>xsd:float</p>
  </td><td>
  <p>
  <tt>float</tt>
  </p>
  </td>
  </tr>
  <tr class="a">
  <td>
  <p>xsd:hexBinary</p>
  </td><td>
  <p>Not implemented yet</p>
  </td>
  </tr>
  <tr class="b">
  <td>
  <p>xsd:int</p>
  </td><td>
  <p>
  <tt>int</tt>
  </p>
  </td>
  </tr>
  <tr class="a">
  <td>
  <p>xsd:integer</p>
  </td><td>
  <p>int</p>
  </td>
  </tr>
  <tr class="b">
  <td>
  <p>xsd:long</p>
  </td><td>
  <p>
  <tt>long</tt>
  </p>
  </td>
  </tr>
  <tr class="a">
  <td>
  <p>xsd:QName</p>
  </td><td>
  <p>Not implemented yet</p>
  </td>
  </tr>
  <tr class="b">
  <td>
  <p>xsd:short</p>
  </td><td>
  <p>
  <tt>short</tt>
  </p>
  </td>
  </tr>
  <tr class="a">
  <td>
  <p>xsd:string</p>
  </td><td>
  <p>stl::string</p>
  </td>
  </tr>
  </table>
  <div class="h4">
  <h4>Using WSDL with Axis</h4>
  </div>
  <div class="h4">
  <h4>Published Axis Interfaces</h4>
  </div>
  <div class="h4">
  <h4>Newbie Tips: Finding Your Way Around</h4>
  </div>
  <div class="h4">
  <h4>Appendix : Using the Axis TCP Monitor (tcpmon)</h4>
  </div>
  <p>This section describe a java tool that is included with Axis java that can be used 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>The "tcpmon" utility can be found in the org.apache.axis.utils package. To run it from the command line:</p>
  <pre style="margin-left: 1.96cm; margin-bottom: 0.5cm">% java org.apache.axis.utils.tcpmon [listenPort targetHost targetPort]</pre>
  <p>Without any of the optional arguments, you will get a gui which looks like this:</p>
  <p>
  <img alt="" src="images/tcpmon1.jpg"></p>
  <p>To use the program, you should select a local port which tcpmon will monitor for incoming connections, a target host where it will forward such connections, and the port number on the target machine which should be "tunneled" to. Then click "add". You should then notice another tab appearing in the window for your new tunneled connection. Looking at that panel, you'll see something like this:</p>
  <p>
  <img alt="" src="images/tcpmon2.jpg"></p>
  <p>Now each time a SOAP connection is made to the local port, you will see the request appear in the "Request" panel, and the response from the server in the "Response" panel. Tcpmon keeps a log of all request/response pairs, and allows you to view any particular pair by selecting an entry in the top panel. You may also remove selected entries, or all of them, or choose to save to a file for later viewing.</p>
  <p>The "resend" button will resend the request you are currently viewing, and record a new response. This is particularly handy in that you can edit the XML in the request window before resending - so you can use this as a great tool for testing the effects of different XML on SOAP servers. Note that you may need to change the content-length HTTP header value before resending an edited request.</p>
  <div id="pdf" align="right">
  <a href="user-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
            PDF</a>
  </div>
  </div>
  </div>
  </div>
  </td>
  <!--================= end Content ==================-->
  </tr>
  </tbody>
  </table>
  <!--================= end Main ==================-->
  <!--================= start Footer ==================-->
  <div id="footer">
  <table summary="footer" cellspacing="0" cellpadding="4" width="100%" border="0">
  <tbody>
  <tr>
  <!--================= start Copyright ==================-->
  <td colspan="2">
  <div align="center">
  <div class="copyright">
                Copyright &copy; 2000-2003&nbsp;The Apache Software Foundation. All rights reserved.
              </div>
  </div>
  </td>
  <!--================= end Copyright ==================-->
  </tr>
  <tr>
  <td align="left">
  <!--================= start Host ==================-->
  <!--================= end Host ==================--></td><td align="right">
  <!--================= start Credits ==================-->
  <div align="right">
  <div class="credit"></div>
  </div>
  <!--================= end Credits ==================-->
  </td>
  </tr>
  </tbody>
  </table>
  </div>
  <!--================= end Footer ==================-->
  </body>
  </html>
  
  
  
  1.1                  ws-site/targets/axis/cpp/architecture-guide.pdf
  
  	<<Binary file>>
  
  
  1.1                  ws-site/targets/axis/cpp/developers-guide.pdf
  
  	<<Binary file>>
  
  
  1.1                  ws-site/targets/axis/cpp/integration-guide.pdf
  
  	<<Binary file>>
  
  
  1.1                  ws-site/targets/axis/cpp/user-guide.pdf
  
  	<<Binary file>>
  
  

Mime
View raw message