ws-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sanj...@apache.org
Subject cvs commit: ws-site/targets/axis/cpp user-guide.pdf user-guide.html integration-guide.pdf integration-guide.html developers-guide.pdf developers-guide.html architecture-guide.pdf architecture-guide.html
Date Sun, 26 Oct 2003 13:49:29 GMT
sanjaya     2003/10/26 05:49:29

  Modified:    targets/axis/cpp user-guide.pdf user-guide.html
                        integration-guide.pdf integration-guide.html
                        developers-guide.pdf developers-guide.html
                        architecture-guide.pdf architecture-guide.html
  Log:
  removed all content till docs are presentable
  
  Revision  Changes    Path
  1.2       +33 -735   ws-site/targets/axis/cpp/user-guide.pdf
  
  	<<Binary file>>
  
  
  1.2       +3 -305    ws-site/targets/axis/cpp/user-guide.html
  
  Index: user-guide.html
  ===================================================================
  RCS file: /home/cvs/ws-site/targets/axis/cpp/user-guide.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- user-guide.html	24 Oct 2003 13:20:56 -0000	1.1
  +++ user-guide.html	26 Oct 2003 13:49:28 -0000	1.2
  @@ -7,7 +7,7 @@
   <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>
  +<title>Axis C++ User's Guide</title>
   </head>
   <body bgcolor="white" class="composite">
   <!--================= start Banner ==================-->
  @@ -258,315 +258,13 @@
   <div id="bodycol">
   <div class="app">
   <div align="center">
  -<h1>Axis User</h1>
  +<h1>Axis C++ User's Guide</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>
  +<strong>Under Construction.....</strong>
   <div id="pdf" align="right">
   <a href="user-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
             PDF</a>
  
  
  
  1.2       +32 -179   ws-site/targets/axis/cpp/integration-guide.pdf
  
  	<<Binary file>>
  
  
  1.2       +4 -99     ws-site/targets/axis/cpp/integration-guide.html
  
  Index: integration-guide.html
  ===================================================================
  RCS file: /home/cvs/ws-site/targets/axis/cpp/integration-guide.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- integration-guide.html	24 Oct 2003 13:20:56 -0000	1.1
  +++ integration-guide.html	26 Oct 2003 13:49:28 -0000	1.2
  @@ -7,7 +7,7 @@
   <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>
  +<title>Axis c++ System Integration Guide</title>
   </head>
   <body bgcolor="white" class="composite">
   <!--================= start Banner ==================-->
  @@ -258,108 +258,13 @@
   <div id="bodycol">
   <div class="app">
   <div align="center">
  -<h1>Axis System Integration Guide</h1>
  +<h1>Axis c++ System Integration Guide</h1>
   </div>
   <div class="h3">
   <div class="h3">
  -<h3></h3>
  +<h3>Axis c++ System Integration Guide</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>
  +<strong>Under Construction.....</strong>
   <div id="pdf" align="right">
   <a href="integration-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif"
class="skin"><br>
             PDF</a>
  
  
  
  1.2       +31 -582   ws-site/targets/axis/cpp/developers-guide.pdf
  
  	<<Binary file>>
  
  
  1.2       +1 -154    ws-site/targets/axis/cpp/developers-guide.html
  
  Index: developers-guide.html
  ===================================================================
  RCS file: /home/cvs/ws-site/targets/axis/cpp/developers-guide.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- developers-guide.html	24 Oct 2003 13:20:56 -0000	1.1
  +++ developers-guide.html	26 Oct 2003 13:49:28 -0000	1.2
  @@ -264,160 +264,7 @@
   <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>
  +<strong>Under construction.....</strong>
   <div id="pdf" align="right">
   <a href="developers-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif"
class="skin"><br>
             PDF</a>
  
  
  
  1.2       +31 -4122  ws-site/targets/axis/cpp/architecture-guide.pdf
  
  	<<Binary file>>
  
  
  1.2       +3 -122    ws-site/targets/axis/cpp/architecture-guide.html
  
  Index: architecture-guide.html
  ===================================================================
  RCS file: /home/cvs/ws-site/targets/axis/cpp/architecture-guide.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- architecture-guide.html	24 Oct 2003 13:20:55 -0000	1.1
  +++ architecture-guide.html	26 Oct 2003 13:49:28 -0000	1.2
  @@ -7,7 +7,7 @@
   <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>
  +<title>Axis c++ Architecture Guide</title>
   </head>
   <body bgcolor="white" class="composite">
   <!--================= start Banner ==================-->
  @@ -258,132 +258,13 @@
   <div id="bodycol">
   <div class="app">
   <div align="center">
  -<h1>Axis Architecture Guide</h1>
  +<h1>Axis c++ 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>
  +<strong>Under Construction......</strong>
   <div id="pdf" align="right">
   <a href="architecture-guide.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif"
class="skin"><br>
             PDF</a>
  
  
  

Mime
View raw message