blob: 5d6e40dc76c66934469c0f0845f370e985a84ff0 [file]
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 10">
<meta name=Originator content="Microsoft Word 10">
<link rel=File-List href="developers-guide_files/filelist.xml">
<link rel=Edit-Time-Data href="developers-guide_files/editdata.mso">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<title>Axis Developer's Guide</title>
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
<o:Author>Susantha Kumara</o:Author>
<o:Template>Normal</o:Template>
<o:LastAuthor>Susantha Kumara</o:LastAuthor>
<o:Revision>17</o:Revision>
<o:TotalTime>106</o:TotalTime>
<o:Created>2003-07-12T13:59:00Z</o:Created>
<o:LastSaved>2003-07-12T15:45:00Z</o:LastSaved>
<o:Pages>1</o:Pages>
<o:Words>697</o:Words>
<o:Characters>3978</o:Characters>
<o:Company>Home</o:Company>
<o:Lines>33</o:Lines>
<o:Paragraphs>9</o:Paragraphs>
<o:CharactersWithSpaces>4666</o:CharactersWithSpaces>
<o:Version>10.3311</o:Version>
</o:DocumentProperties>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:Zoom>150</w:Zoom>
<w:SpellingState>Clean</w:SpellingState>
<w:GrammarState>Clean</w:GrammarState>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<link rel=Stylesheet type="text/css" media=all href=axis.css>
<style>
<!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:Verdana;
panose-1:2 11 6 4 3 5 4 4 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:536871559 0 0 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
color:black;
mso-believe-normal-left:yes;}
h1
{mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:-22.5pt;
mso-pagination:widow-orphan;
mso-outline-level:1;
font-size:24.0pt;
color:black;
font-weight:bold;}
h2
{mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:-22.5pt;
mso-pagination:widow-orphan;
mso-outline-level:2;
background:#DCE1FF;
font-size:18.0pt;
color:black;
font-weight:bold;}
h3
{mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:-7.5pt;
mso-pagination:widow-orphan;
mso-outline-level:3;
font-size:13.5pt;
color:black;
font-weight:bold;}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{color:blue;
text-decoration:underline;
text-underline:single;}
p
{mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
color:black;}
p.example, li.example, div.example
{mso-style-name:example;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
mso-pagination:widow-orphan;
background:#CCCCFF;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
color:black;}
p.xml, li.xml, div.xml
{mso-style-name:xml;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
mso-pagination:widow-orphan;
background:#EEEEEE;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
color:black;}
p.java, li.java, div.java
{mso-style-name:java;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
mso-pagination:widow-orphan;
background:#EEEEEE;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
color:black;}
p.note, li.note, div.note
{mso-style-name:note;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
color:black;
font-weight:bold;}
p.head, li.head, div.head
{mso-style-name:head;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
text-align:center;
mso-pagination:widow-orphan;
font-size:29.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
color:black;
font-weight:bold;}
span.SpellE
{mso-style-name:"";
mso-spl-e:yes;}
span.GramE
{mso-style-name:"";
mso-gram-e:yes;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:151718625;
mso-list-type:hybrid;
mso-list-template-ids:430862218 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l1
{mso-list-id:543100049;
mso-list-type:hybrid;
mso-list-template-ids:-1476113394 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
{mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l2
{mso-list-id:1219704273;
mso-list-type:hybrid;
mso-list-template-ids:-1198995366 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
{mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3
{mso-list-id:1931501748;
mso-list-template-ids:1792558980;}
@list l3:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l4
{mso-list-id:2078626972;
mso-list-template-ids:-312079392;}
@list l4:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";}
</style>
<![endif]--><![if mso 9]>
<style>
p.MsoNormal
{margin-left:30.0pt;}
</style>
<![endif]><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="2050" fillcolor="white">
<v:fill color="white"/>
<v:textbox style='layout-flow:vertical'/>
</o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
<o:regrouptable v:ext="edit">
<o:entry new="1" old="0"/>
</o:regrouptable>
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor=white lang=EN-US link=blue vlink=blue style='tab-interval:.5in;
margin-left:30.0pt'>
<div class=Section1>
<h1 align=center style='text-align:center'><span style='font-family:Verdana'><img
width=176 height=96 id="_x0000_i1025" src="images/axis.jpg"><o:p></o:p></span></h1>
<h1><span style='font-family:Verdana'>Axis C++ Developer's Guide<o:p></o:p></span></h1>
<p class=MsoNormal><i><span style='font-family:Verdana'>0.1 Version</span></i><span
style='font-family:Verdana'> <o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>Table of Contents<o:p></o:p></span></h3>
<p class=MsoNormal><span style='font-family:Verdana'><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 <span class=SpellE>Testcases</span></a> <o:p></o:p></span></p>
<p class=MsoNormal><span style='font-family:Verdana'><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"><span class=SpellE>CUnit</span> and Axis</a> <br>
<a href="#Debugging">Debugging</a> <br>
&nbsp; <o:p></o:p></span></p>
<h2><a name=Introduction></a><span style='font-family:Verdana'>Introduction<o:p></o:p></span></h2>
<p class=MsoNormal><span style='font-family:Verdana'>This document is intended
for the <span class=GramE>developer who wish</span> to download and compile and
test the axis C++ server.<o:p></o:p></span></p>
<h2><a name="General_Guidelines"></a><span style='font-family:Verdana'>General
Guidelines<o:p></o:p></span></h2>
<ul type=disc>
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-list:l4 level1 lfo1;tab-stops:list .5in'><span style='font-family:
Verdana'>TO DO ...<o:p></o:p></span></li>
</ul>
<h2><a name="Development_Environment"></a><span style='font-family:Verdana'>Development
Environment<o:p></o:p></span></h2>
<p class=MsoNormal><span style='font-family:Verdana'>The following packages are
required for axis development: <o:p></o:p></span></p>
<ul type=disc>
<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
mso-list:l3 level1 lfo2;tab-stops:list .5in'><span style='font-family:
Verdana'><a href="http://xml.apache.org/dist/xerces-j"><span class=SpellE>xerces</span></a>
- xml processor<o:p></o:p></span></li>
</ul>
<h2><a name="Configuration_Properties"></a><span style='font-family:Verdana'>Configuration
Properties<o:p></o:p></span></h2>
<p><span style='font-family:Verdana'>TO <span class=GramE>DO ...</span> <o:p></o:p></span></p>
<h2><a name="Compile_And_Run"></a><span style='font-family:Verdana'>Compile and
Run<o:p></o:p></span></h2>
<p><span style='font-family:Verdana'>
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 <apache home>/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>
</span></p>
<h2><a name="Adding_Testcases"></a><span style='font-family:Verdana'>Adding <span
class=SpellE>Testcases</span><o:p></o:p></span></h2>
<p><span style='font-family:Verdana'>See Also: <a href="#TestStructure">Test
and Samples Structure</a><o:p></o:p></span></p>
<h2><a name=TestStructure></a><a name=ModuleAPI></a><span style='font-family:
Verdana'>Writing Transport Modules<o:p></o:p></span></h2>
<p><!--[if gte vml 1]><v:group id="_x0000_s1047" style='position:absolute;
margin-left:36pt;margin-top:17.7pt;width:375.35pt;height:1in;z-index:1'
coordorigin="640,2314" coordsize="7507,1440">
<v:shapetype id="_x0000_t16" coordsize="21600,21600" o:spt="16" adj="5400"
path="m@0,l0@0,,21600@1,21600,21600@2,21600,xem0@0nfl@1@0,21600,em@1@0nfl@1,21600e">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="val #0"/>
<v:f eqn="sum width 0 #0"/>
<v:f eqn="sum height 0 #0"/>
<v:f eqn="mid height #0"/>
<v:f eqn="prod @1 1 2"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="mid width #0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" limo="10800,10800"
o:connecttype="custom" o:connectlocs="@6,0;@4,@0;0,@3;@4,21600;@1,@3;21600,@5"
o:connectangles="270,270,180,90,0,0" textboxrect="0,@0,@1,21600"/>
<v:handles>
<v:h position="topLeft,#0" switch="" yrange="0,21600"/>
</v:handles>
<o:complex v:ext="view"/>
</v:shapetype><v:shape id="_x0000_s1028" type="#_x0000_t16" style='position:absolute;
left:3270;top:2314;width:975;height:1378' o:regroupid="1" adj="7067"/>
<v:shape id="_x0000_s1029" type="#_x0000_t16" style='position:absolute;left:4035;
top:2314;width:585;height:1332' o:regroupid="1" adj="11483">
<v:textbox style='mso-next-textbox:#_x0000_s1029'/>
</v:shape><v:shape id="_x0000_s1030" type="#_x0000_t16" style='position:absolute;
left:5696;top:2321;width:585;height:1332' o:regroupid="1" adj="11483"/>
<v:shape id="_x0000_s1031" type="#_x0000_t16" style='position:absolute;left:6088;
top:2322;width:2059;height:1332' o:regroupid="1"/>
<v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe">
<v:stroke joinstyle="miter"/>
<v:path gradientshapeok="t" o:connecttype="rect"/>
</v:shapetype><v:shape id="_x0000_s1034" type="#_x0000_t202" style='position:absolute;
left:3195;top:2646;width:825;height:1108' o:regroupid="1" filled="f"
stroked="f">
<v:textbox style='layout-flow:vertical;mso-layout-flow-alt:bottom-to-top;
mso-next-textbox:#_x0000_s1034'>
<![if RotText]><![if !mso]>
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style='text-align:center'><b
style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt'>Transport
Module<o:p></o:p></span></b></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]><![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1035" type="#_x0000_t202" style='position:absolute;
left:6401;top:2787;width:1125;height:599' o:regroupid="1" filled="f"
stroked="f">
<v:textbox style='mso-next-textbox:#_x0000_s1035'>
<![if !mso]>
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style='text-align:center'><b
style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt'>Axis
Engine<o:p></o:p></span></b></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1036" type="#_x0000_t202" style='position:absolute;
left:3930;top:2869;width:495;height:509' o:regroupid="1" filled="f"
stroked="f">
<v:textbox style='layout-flow:vertical;mso-layout-flow-alt:bottom-to-top;
mso-next-textbox:#_x0000_s1036'>
<![if RotText]><![if !mso]>
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style='text-align:center'><b
style='mso-bidi-font-weight:normal'><span style='font-size:8.0pt'>API<o:p></o:p></span></b></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]><![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1038" type="#_x0000_t202" style='position:absolute;
left:5593;top:2876;width:495;height:509' o:regroupid="1" filled="f"
stroked="f">
<v:textbox style='layout-flow:vertical;mso-layout-flow-alt:bottom-to-top;
mso-next-textbox:#_x0000_s1038'>
<![if RotText]><![if !mso]>
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style='text-align:center'><b
style='mso-bidi-font-weight:normal'><span style='font-size:8.0pt'>API<o:p></o:p></span></b></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]><![endif]></v:textbox>
</v:shape><v:shapetype id="_x0000_t69" coordsize="21600,21600" o:spt="69"
adj="4320,5400" path="m,10800l@0,21600@0@3@2@3@2,21600,21600,10800@2,0@2@1@0@1@0,xe">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="val #0"/>
<v:f eqn="val #1"/>
<v:f eqn="sum 21600 0 #0"/>
<v:f eqn="sum 21600 0 #1"/>
<v:f eqn="prod #0 #1 10800"/>
<v:f eqn="sum #0 0 @4"/>
<v:f eqn="sum 21600 0 @5"/>
</v:formulas>
<v:path o:connecttype="custom" o:connectlocs="@2,0;10800,@1;@0,0;0,10800;@0,21600;10800,@3;@2,21600;21600,10800"
o:connectangles="270,270,270,180,90,90,90,0" textboxrect="@5,@1,@6,@3"/>
<v:handles>
<v:h position="#0,#1" xrange="0,10800" yrange="0,10800"/>
</v:handles>
</v:shapetype><v:shape id="_x0000_s1041" type="#_x0000_t69" style='position:absolute;
left:4425;top:2870;width:1155;height:405' o:regroupid="1">
<v:textbox style='layout-flow:vertical'/>
</v:shape><v:shape id="_x0000_s1044" type="#_x0000_t16" style='position:absolute;
left:640;top:2316;width:1835;height:1438' adj="7067"/>
<v:shape id="_x0000_s1045" type="#_x0000_t202" style='position:absolute;
left:761;top:2956;width:1125;height:599' filled="f" stroked="f">
<v:textbox style='mso-next-textbox:#_x0000_s1045'>
<![if !mso]>
<table cellpadding=0 cellspacing=0 width="100%">
<tr>
<td><![endif]>
<div>
<p class=MsoNormal align=center style='text-align:center'><b
style='mso-bidi-font-weight:normal'><span style='font-size:10.0pt'>Transport
Listener<o:p></o:p></span></b></p>
</div>
<![if !mso]></td>
</tr>
</table>
<![endif]></v:textbox>
</v:shape><v:shape id="_x0000_s1046" type="#_x0000_t69" style='position:absolute;
left:2175;top:2885;width:1020;height:405'>
<v:textbox style='layout-flow:vertical'/>
</v:shape></v:group><![endif]--><![if !vml]><span style='mso-ignore:vglayout;
position:absolute;z-index:1;margin-left:47px;margin-top:23px;width:502px;
height:99px'><span style='mso-ignore:vglayout;position:absolute;z-index:1;
margin-left:169px;margin-top:21px;width:59px;height:78px'><![endif]><![if !RotText]><img
width=59 height=78 src="developers-guide_files/image002.gif"
alt="Text Box: Transport Module" v:shapes="_x0000_s1034" class=shape v:dpi="96"><![endif]><![if !vml]></span><span
style='mso-ignore:vglayout;position:absolute;z-index:1;margin-left:218px;
margin-top:36px;width:37px;height:38px'><![endif]><![if !RotText]><img
width=37 height=38 src="developers-guide_files/image003.gif" alt="Text Box: API"
v:shapes="_x0000_s1036" class=shape v:dpi="96"><![endif]><![if !vml]></span><span
style='mso-ignore:vglayout;position:absolute;z-index:1;margin-left:329px;
margin-top:36px;width:37px;height:38px'><![endif]><![if !RotText]><img
width=37 height=38 src="developers-guide_files/image004.gif" alt="Text Box: API"
v:shapes="_x0000_s1038" class=shape v:dpi="96"><![endif]><![if !vml]></span><img
width=502 height=99 src="developers-guide_files/image001.gif" v:shapes="_x0000_s1047 _x0000_s1028 _x0000_s1029 _x0000_s1030 _x0000_s1031 _x0000_s1035 _x0000_s1041 _x0000_s1044 _x0000_s1045 _x0000_s1046"></span><![endif]><span
style='font-family:Verdana'>&nbsp;<o:p></o:p></span></p>
<p><span style='font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
<p><span style='font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
<p><span style='font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
<p><span style='font-family:Verdana'>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.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo3;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-family:Verdana'>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.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo3;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Symbol;
mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-family:Verdana'>They can be
made 2 separate DLLs (or Shared Objects). Advantage of this method is that the
2 modules can be developed separately.<o:p></o:p></span></p>
<p><span style='font-family:Verdana'>Module should be written specifically for
each kind of Transport Listener (Apache or IIS) whereas the <span class=SpellE>AxisEngine</span>
is not specific to Transport Listener. <o:p></o:p></span></p>
<p><span style='font-family:Verdana'>So this API defines the way that Transport
Module communicates with the <span class=SpellE>AxisEngine</span>. <o:p></o:p></span></p>
<h3><span style='font-family:Verdana'>Module side API<o:p></o:p></span></h3>
<p><span style='font-family:Verdana'>There is a set of functions to be
implemented by each module. <span class=SpellE>AxisEngine</span> needs the
module to implement them.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo4;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Verdana;
mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span
style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span class=SpellE><span style='font-family:
Verdana'>int</span></span><span style='font-family:Verdana'> <span
class=SpellE>send_transport_information</span>(<span class=SpellE>TransportInfo</span>*)<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo4;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Verdana;
mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span
style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span class=SpellE><span style='font-family:
Verdana'>int</span></span><span style='font-family:Verdana'> <span
class=SpellE>get_request_bytes</span>(char*, <span class=SpellE>int</span>, <span
class=SpellE>int</span>*)<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo4;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Verdana;
mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span
style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span class=SpellE><span style='font-family:
Verdana'>int</span></span><span style='font-family:Verdana'> <span
class=SpellE>send_response_bytes</span>(char*)<o:p></o:p></span></p>
<p><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
style='font-family:Verdana'>send_transport_information</span></b></span><b
style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'><o:p></o:p></span></b></p>
<p><span class=SpellE><span style='font-family:Verdana'>AxisEngine</span></span><span
style='font-family:Verdana'> may call this function to send transport specific
information of the response (<span class=GramE>Ex :</span> http headers for
HTTP transport).<o:p></o:p></span></p>
<p><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
style='font-family:Verdana'>get_request_bytes</span></b></span><b
style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'><o:p></o:p></span></b></p>
<p><span class=SpellE><span style='font-family:Verdana'>AxisEngine</span></span><span
style='font-family:Verdana'> calls this function whenever it needs more soap
request bytes in the incoming stream. <span class=SpellE>AxisEngine</span> may
call this function more than once. <o:p></o:p></span></p>
<p><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
style='font-family:Verdana'>send_response_bytes</span></b></span><b
style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'><o:p></o:p></span></b></p>
<p><span class=SpellE><span style='font-family:Verdana'>AxisEngine</span></span><span
style='font-family:Verdana'> 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 <span class=SpellE>AxisEngine</span> more than once depending on
the size of the response. The transport listener may accumulate or send each
fragment at each function call.<o:p></o:p></span></p>
<h3><span class=SpellE><span style='font-family:Verdana'>AxisEngine</span></span><span
style='font-family:Verdana'> side API<o:p></o:p></span></h3>
<p><span class=SpellE><span style='font-family:Verdana'>AxisEngine</span></span><span
style='font-family:Verdana'> has implemented following functions to be used by
any Transport Module.<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo5;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Verdana;
mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span
style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span class=SpellE><span style='font-family:
Verdana'>int</span></span><span style='font-family:Verdana'> <span
class=SpellE>initialize_module</span>()<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo5;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Verdana;
mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span
style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span class=SpellE><span style='font-family:
Verdana'>int</span></span><span style='font-family:Verdana'> <span
class=SpellE>initialize_process</span>()<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo5;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Verdana;
mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span
style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span class=SpellE><span style='font-family:
Verdana'>int</span></span><span style='font-family:Verdana'> <span
class=SpellE>process_request</span>(<span class=SpellE>TransportInfo</span>*)<o:p></o:p></span></p>
<p style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo5;
tab-stops:list .5in'><![if !supportLists]><span style='font-family:Verdana;
mso-fareast-font-family:Verdana;mso-bidi-font-family:Verdana'><span
style='mso-list:Ignore'>4.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span class=SpellE><span style='font-family:
Verdana'>int</span></span><span style='font-family:Verdana'> <span
class=SpellE>finalize_process</span>()<o:p></o:p></span></p>
<p><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
style='font-family:Verdana'>initialize_module</span></b></span><b
style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'><o:p></o:p></span></b></p>
<p><span style='font-family:Verdana'>Transport Module <b style='mso-bidi-font-weight:
normal'>MUST </b>call this function when it loads the <span class=SpellE>AxisEngine</span>.
If this function returns FAIL it cannot be assured that the <span class=SpellE>AxisEngine</span>
works properly. Loading of all <span class=SpellE>AxisEngine&#8217;s</span>
components (DLLs) are done within this function.<o:p></o:p></span></p>
<p><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
style='font-family:Verdana'>initialize_process</span></b></span><b
style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'><o:p></o:p></span></b></p>
<p><span style='font-family:Verdana'>As the <span class=SpellE>AxisEngine</span>
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 <b style='mso-bidi-font-weight:normal'>MUST </b>call
this API function when it spawns a new <span class=SpellE>AxisEngine</span>
process.<o:p></o:p></span></p>
<p><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
style='font-family:Verdana'>process_request</span></b></span><b
style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'><o:p></o:p></span></b></p>
<p><span style='font-family:Verdana'>Transport Module calls this function for
each soap request. Transport Module should fill a <span class=SpellE>TransportInfo</span>
structure with the relevant transport information and pass it to the <span
class=SpellE>process_request</span> function. Returning FAIL indicates a
critical error in processing the soap request (not a generation of Soap Fault).<o:p></o:p></span></p>
<p><span class=SpellE><b style='mso-bidi-font-weight:normal'><span
style='font-family:Verdana'>finalize_process</span></b></span><b
style='mso-bidi-font-weight:normal'><span style='font-family:Verdana'> <o:p></o:p></span></b></p>
<p><span style='font-family:Verdana'>This function does the opposite of what <span
class=SpellE>initialize_process</span> does and <b style='mso-bidi-font-weight:
normal'>MUST </b><span class=GramE>be<span style='mso-spacerun:yes'> 
</span>called</span> by Transport Module for the process end.<o:p></o:p></span></p>
<p><span style='font-family:Verdana'><o:p>&nbsp;</o:p></span></p>
<h2><span style='font-family:Verdana'>Test Structure<o:p></o:p></span></h2>
<p><span style='font-family:Verdana'>&nbsp;<o:p></o:p></span></p>
<h2><a name=CodeChecks></a><span style='font-family:Verdana'>Adding Source Code
Checks<o:p></o:p></span></h2>
<p><span style='font-family:Verdana'>&nbsp;<o:p></o:p></span></p>
<h2><a name=JUnit></a><span class=SpellE><span style='font-family:Verdana'>CUnit</span></span><span
style='font-family:Verdana'> and Axis<o:p></o:p></span></h2>
<p><span style='font-family:Verdana'>&nbsp;<o:p></o:p></span></p>
<h2><a name=Debugging></a><span style='font-family:Verdana'>Debugging<o:p></o:p></span></h2>
</div>
</body>
</html>