You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2003/12/30 15:15:16 UTC

cvs commit: ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch WSDL2Ws.ihtml usecase.ihtml soapEngine.ihtml soapE_AxisModule.ihtml server.ihtml maincd.ihtml i2h.bat h2i.bat EngineMainCD.ihtml deploy.ihtml d1.ihtml d1-9.ihtml d1-8.ihtml d1-7.ihtml d1-6.ihtml d1-5.ihtml d1-4.ihtml d1-3.ihtml d1-2.ihtml CommonMainCD.ihtml client.ihtml ArchitectureGuide.ihtml

sanjaya     2003/12/30 06:15:16

  Added:       contrib/axisdocs/src/documentation/content/xdocs/cpp/arch
                        WSDL2Ws.ihtml usecase.ihtml soapEngine.ihtml
                        soapE_AxisModule.ihtml server.ihtml maincd.ihtml
                        i2h.bat h2i.bat EngineMainCD.ihtml deploy.ihtml
                        d1.ihtml d1-9.ihtml d1-8.ihtml d1-7.ihtml
                        d1-6.ihtml d1-5.ihtml d1-4.ihtml d1-3.ihtml
                        d1-2.ihtml CommonMainCD.ihtml client.ihtml
                        ArchitectureGuide.ihtml
  Log:
  axis c++ architecture docs
  
  Revision  Changes    Path
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/WSDL2Ws.ihtml
  
  Index: WSDL2Ws.ihtml
  ===================================================================
  <html>
    <head>
      <title>WSDL2Ws Tool</title>
      <link href="axis.css" rel=stylesheet type=text/css>
    </head>
  
    <body>
  <table cellspacing=0 width=100% border=0>
  <tr>
  <td colspan=2>
  <a href="http://xml.apache.org/axis">
  
  </a>
  
  
  <h1>
  WSDL2Ws
  </h1>
  </td>
  </tr>
  </table>
  
  <hr size=1 noshade= />
  <strong>
  Contents
  </strong>
  <ul>
  <li>
  <a href="#intro">1.Fuctionality</a>
  </li>
  <li>
  <a href="#webapp">&nbsp;&nbsp;1.1Types Of Classes</a>
  </li>
  <li>
  <a href="#depend">&nbsp;&nbsp;1.2Programming Languages</a>
  </li>
  <li>
  <a href="#websvc">&nbsp;&nbsp;1.3Encoding Style</a>
  </li>
  <li>
  <a href="#start">&nbsp;&nbsp;1.4Style Of the Service</a>
  </li>
  <li>
  <a href="#install-test">&nbsp;&nbsp;1.5Supports for Making Simple Custom Types </a>
  </li>
  
  <li>
  <a href="#test">2.Architecture</a>
  </li>
  
  <li>
  <a href="#test1">&nbsp;&nbsp;2.1 Out Line</a>
  </li>
  
  <li>
  <a href="#test2">&nbsp;&nbsp;2.2 Mediator WsContext</a>
  </li>
  
  
  <li>
  <a href="#test3">&nbsp;&nbsp;2.3 Generator</a>
  </li>
  
  
  <li>
  <a href="#test4">&nbsp;&nbsp;2.4 Flow Of Execution</a>
  </li>
  
  <li>
  <a href="#test5">&nbsp;&nbsp;2.5 Sequence Diagram</a>
  </li>
  
  </ul>
  
  <p class="MsoNormal"><span style="font-family:Verdana;color:black">
      <a name="intro"/></a>
        <h1>1. Functionality </h1></P>
  
  <p class="MsoNormal"><span style="font-family:Verdana;color:black">
  
        <p>The tool should be able to generate different types of Wrappers and Skelentons for the server side and client�s stubs for the client�s Side.WSDL2Ws tool in AxisC++  is written in  Java.
      
        
        
        <a name= "webapp"/></a>    
      <h2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.1 Types Of Classes</h2>
  
  
  
      <p>The Tool Should starts with a WSDL document and generate following classes.
       
  
  <P class=MsoNormal style="MARGIN-LEFT: 76pt; TEXT-INDENT: -18pt">
  <SPAN 
  style="COLOR: black; FONT-FAMILY: Symbol; FONT-SIZE: 10pt">�<SPAN 
  style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  </SPAN></SPAN><SPAN style="COLOR: black; FONT-FAMILY: Verdana">WSDL2WS tool is used for building following C/C++ components<p>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   o Server side � Skeletons and Wrappers</p>
  <p>
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  o Client side � Stubs</p>
   </SPAN></P>
  
  <SPAN 
  style="COLOR: black; FONT-FAMILY: Symbol; FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;�<SPAN 
  style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
  </SPAN></SPAN><SPAN style="COLOR: black; FONT-FAMILY: Verdana"> <b>WSDL2WS tool</b> that generates wrappers which  used to deploy the Service in the AxisC++ engine. (Please refer the Wrapper Specification for more information) 
  
    <p>The generated Wrappers perform the following functions. These wrappers act                as RPC Providers. </p>
  
  <p>o  Serialization</p>
  <p>o  Deserialization</p>
  <p>o  Method invocation</p>
  
  
  
  
  
  
  
      <a name="depend"/></a>
      <h2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.2  Programming Languages </h2>
      
  <p> The tool should able to generate classes for 
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; �	C++ </p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; �	C </p>
    </p>  
  
  <p><b>The tool should be extensible to support other programming languages if required.</b></p>
  
  
  
      
      <a name="websvc"/></a>
      <h2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.3 encoding style</h2>
  
      <p>The tool should be support SOAP1.2 encoding style and extensible to support other encoding styles as well.
   </p>
  
  
      <a name="start"/></a>
      <h2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.4 Style Of the Service</h2>
  
      <p>The tool should able to generate classes for following styles
  <p>�	RPC </p>
  <p>�	Document </p>
  <p>�	Messaging </P>
   
  
   
          <a name="install-test"/></a>
      <h2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.5 Supports for making simple custom types</h2>
  
  
  
     
       <p>Tool generate Wrapper for custom types in following conditions
  <p>�	Generate the method signatures of the types (serialize(), desirealize()) so that developer &nbsp;&nbsp; can write serialize desirialize code in most efficient way.</P> 
  <p>�	Generate the complete wrapper for WSDL types like struts
     </p>
  
  <p>�	Genarate the complete wrappers for Array of any simple or WSDL types like struts </p> 
  
  
      
  
  
  
  
        <a name="test"/></a>
      <h1>2.Architecture</h1>
      
     
   <a name="test1"/></a>
      <h2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.1 Outline</h2>
  
  
  <p>The tool takes a top down approach. It starts with a wsdl document and generates all the classes necessary to deploy the web service. It generates </p>
  <p>�	Skeleton (wrapper class) </p>
              
  <p>�	Wrapper classes for complex types </p>
  <p>�	Server side and client Side stubs 
  <br>
  The tool can be extensible to generate Service classes to be published 
  For more information about the generated classes please refer to the architecture documentation.
  <align="left">
  <img SRC="../images/c/ag/wsdl2ws.jpg" ></align></p>
  
  
  <a name="test2"/></a>
      <h2>&nbsp;&nbsp;2.1 Mediator WsContext</h2>
  
  
  
  <p>The WSDL file and the user options are processed by the WSDLWs. The WSDL create a class called wsContext(WebServiceContext) which is the runtime representation of the processed data. This wsContext passes to the generators.  The generators extract the information form the wsContext create the files.The wsContext act as a mediator and create a loosely coupled system.<p>
  
  <h3>wsContext has following componets</h3>
  
  <p>1.  ServiceInfo �  information about service </p>
  <p>2.  WrapperInfo � information about wrapper options</p> 
  <p>3.  TypeMap � information about custom types </p>
  
  
  
  <a name="test3"/></a>
      <h2>&nbsp;&nbsp;&nbsp;2.2 Genarator
  </h2>
  
  <p>Generator generate a class depend on the options, It contains a class called SourceWriter and the concrete implementation of the SourceWriter decides what will Genarator generate. The SourceWriter factory create a correct type of generator depend on the options.</p>
  
  <a name="test4"/></a>
      <h2>&nbsp;&nbsp;&nbsp;2.4 flow of execution
  </h2>
  
  <p>1.WSDL file and user options are processed by the WSDL2Ws and WSContext object is created.</p> 
  <p>2. WebServiceGenaratorFactory will create WebServiceGenarator depend on the service style </p>
  <p>3. Then the WebServiceGenarator will create right set of Generators to create the set of files</p> 
  <p>4.Each generator will invoke SourceWriter capable of writing each type of file. 
  Rest of the logic is developer to decide (He have all needed info as WsContext). 
  
  
  
  
  </p>
  
  
  <a name="test5"/></a>
      <h2>&nbsp;&nbsp;&nbsp;2.5 Sequence Diagram
  </h2>
  
  <p><center>
  
  <img SRC="../images/c/ag/sequence.jpg" ></center></p>
  
  
  <hr size=1 noshade= />
  
    </body>
  </html>
  
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/usecase.ihtml
  
  Index: usecase.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1> Diagram Book Page-01</h1>
  <h2>Use Case Diagram:Use Case View/Main</h2>
  <p><img SRC="../images/c/ag/d9.jpg"></p>
  
  <p><a href="server.html">goto >> page No.02.</a></p>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/soapEngine.ihtml
  
  Index: soapEngine.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page No.12</h1>
  <h2>Sequence Diagram:Start SOAP Engine</h2>
  <center>
  <img SRC="../images/c/ag/d3.jpg"></center>
  
  <a href="soapE_AxisModule.html">goto>> page No.13</a>
  
  <br><br>
  
  <a href="client.html">Back</a>
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/soapE_AxisModule.ihtml
  
  Index: soapE_AxisModule.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 13</h1>
  <h2>Sequence Diagram:Start SOAP Engine/AxisModuleInitialize</h2>
  <center>
  
  <img SRC="../images/c/ag/d3-1.jpg"></center>
  
  <a href="maincd.html">goto>> page No.14</a>
  
  <br><br>
  
  <a href="soapEngine.html">Back</a>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/server.ihtml
  
  Index: server.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  
  <h1>Diagram Book-Page 2</h1>
  
  <h2>Sequence Diagram:Create Skeleton and Wrappers &<a href="client.html">Client Stubs</a>
  </h2>
  <center>
  
  <img SRC="../images/c/ag/d1.jpg"></center>
  
  <a href="d1-2.html">goto>> page No.03.</a>
  
  <br><br>
  <a href="usecase.html">Back</a>
  </body></right>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/maincd.ihtml
  
  Index: maincd.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 14</h1>
  <h2>Class Diagram:Logical View/Main</h2>
  <center>
  
  <img SRC="../images/c/ag/d4.jpg"></center>
  
  
  
  
  <a href="EngineMainCD.html">goto>> page No.15</a>
  
  <br><br>
  
  <a href="soapE_AxisModule.html">Back</a>
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/i2h.bat
  
  Index: i2h.bat
  ===================================================================
  ren *.ihtml *.html
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/h2i.bat
  
  Index: h2i.bat
  ===================================================================
  ren *.html *.ihtml
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/EngineMainCD.ihtml
  
  Index: EngineMainCD.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 15</h1>
  <h2>Class Diagram:Engine/Main</h2>
  <center>
  
  <img SRC="../images/c/ag/d6.jpg"></center>
  
  
  
  <a href="CommonMainCD.html">goto>> page No.16</a>
  
  <br><br>
  
  <a href="maincd.html">Back</a>
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/deploy.ihtml
  
  Index: deploy.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 17</h1>
  <h2>Deployment Diagram:</h2>
  <center>
  
  <img SRC="../images/c/ag/d8.jpg"></center>
  
  
  <br><br>
  
  <a href="CommonMainCD.html">Back</a>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1.ihtml
  
  Index: d1.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book Page-04</h1>
  <h2>Server Side Invokation Process/ServerAxisEngineInitialize</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-2.jpg"></center>
  <a href="d1-3.html">goto>> page No.05.</a>
  <br><br>
  <a href="d1.html">Back</a></div>
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-9.ihtml
  
  Index: d1-9.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 10</h1>
  <h2>Sequence Diagram:Server Side Invokation Process/SoapFaultCreation</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-9.jpg"></center>
  
  <a href="client.html">goto>> page No.11</a>
  
  
  
  <br><br>
  
  <a href="d1-8.html">Back</a>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-8.ihtml
  
  Index: d1-8.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 09</h1>
  <h2>Sequence Diagram:Server Side Invokation Process/PoolWebService</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-8.jpg"></center>
  
  <a href="d1-9.html">goto>> page No.10</a>
  
  <br><br>
  
  <a href="d1-7.html">Back</a>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-7.ihtml
  
  Index: d1-7.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 08</h1>
  <h2>Sequence Diagram:Server Side Invokation Process/PoolHandlerChain</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-7.jpg"></center>
  <a href="d1-8.html">goto>> page No.9.</a>
  <br><br>
  
  <a href="d1-5.html">Back</a>
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-6.ihtml
  
  Index: d1-6.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book - Page 07</h1>
  
  <h2>Sequence Diagram:Server Side Invokation Process/GetRequestHandlerChain</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-6.jpg"></center>
  
  
  
  
  <a href="d1-7.html">goto>> page No.8.</a>
  
  <br><br>
  <a href="d1-4.html">Back</a></div>
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-5.ihtml
  
  Index: d1-5.ihtml
  ===================================================================
  <html>
  <head>Diagram Book-Page 1.5</head>
  <title>Server Side Invokation Process/Invoke Web Service</title>
  <body>
  <h2>Sequence Diagram:Server Side Invokation Process/GetResponseFlowHandlerChain</h2>
  <center>
  <img SRC="../images/c/ag/d1-5.jpg"></center>
  <a href="d1-3.html">goto>> page No.04.</a>
  <br><br>
  
  <a href="server.html">Back</a>
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-4.ihtml
  
  Index: d1-4.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <h1>Diagram Book Page- 06</h1>
  <h2>Server Side Invokation Process/InitializeHandlers</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-4.jpg"></center>
  
  <a href="d1-6.html">goto>> page No.07.</a>
  
  <br><br>
  
  <a href="d1-3.html">Back</a></div>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-3.ihtml
  
  Index: d1-3.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book Page-05</h1>
  <h2>Server Side Invokation Process/ServerAxisEngineProcess</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-3.jpg"></center>
  
  <a href="d1-4.html">goto>> page No.06.</a>
  
  <br><br>
  
  <a href="d1.html">Back</a></div>
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/d1-2.ihtml
  
  Index: d1-2.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 03</h1>
  <h2>Server Side Invokation Process/Invoke Web Service</h2>
  <center>
  
  <img SRC="../images/c/ag/d1-0.jpg"></center>
  <a href="d1.html">goto>> page No.04.</a>
  <br><br>
  
  <a href="server.html">Back</a>
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/CommonMainCD.ihtml
  
  Index: CommonMainCD.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 16</h1>
  <h2>Class Diagram:Common/Main</h2>
  
  <center>
  
  <img SRC="../images/c/ag/d5.jpg"></center>
  
  <a href="deploy.html">goto>> page No.17</a>
  
  <br><br>
  
  <a href="EngineMainCD.html">Back</a>
  
  
  
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/client.ihtml
  
  Index: client.ihtml
  ===================================================================
  <html>
  <head><title>Diagram Book</title></head>
  
  <body>
  <h1>Diagram Book-Page 11</h1>
  <h2>Sequence Diagram:Create Stubs</h2>
  <center>
  
  <img SRC="../images/c/ag/d2-1.jpg"></center>
  <a href="soapEngine.html">goto>> page No.12</a>
  
  
  <br><br>
  
  <a href="d1-9.html">Back</a>
  </body>
  </html>
  
  
  1.1                  ws-axis/contrib/axisdocs/src/documentation/content/xdocs/cpp/arch/ArchitectureGuide.ihtml
  
  Index: ArchitectureGuide.ihtml
  ===================================================================
  
  <html>
    <head>
      <title>Architecture Guide</title>
    </head>
  
    <body>
  
  
  <h1>Architecture Guide</h1>
  <h2>
  Contents
  </h2>
  <ul>
  <li>
  <a href="#intro">Introduction</a>
  </li>
  <li>
  <a href="#webapp">Architecture Overview</a>
  </li>
  
  
  <li><a href="#depend">&nbsp;&nbsp;1.AxisEngine</a>
  </li>
  <li>
  <a href="#start">&nbsp;&nbsp;2.HandlerPool</a>
  </li>
  
  <li>
  <a href="#msoap">&nbsp;&nbsp;3.Message Model</a>
  </li>
  <li>
  <a href="#install-test">&nbsp;&nbsp;4.Soap Deserializer</a>
  </li>
  <li>
  <a href="#deploy">&nbsp;&nbsp;5.Soap Serializer</a>
  </li>
  
  <li>
  <a href="#test">&nbsp;&nbsp;6.WSDD Module</a>
  </li>
  
  <li>
  <a href="#massagef">Message Flow</a>
  </li>
  
  <li>
  <a href="#wrapper">WSDL2Ws Tool</a>
  </li>
  
  <li>
  <a href="#Dbook">Diagram Book</a>
  </li>
  <li>
  <a href="#open">Open Issues</a>
  </li>
  </ul>
  <p><a name="intro"/></a></p>
  <h2>Introduction</h2>
  
        <p> This guide describes the architecture of Axis C++ implementation. </p> 
  
  <br>    
  
        
        <p><a name= "webapp"/></a></p>
      <h2>Architecture Overview</h2>
  
   <p>Axis C++ is all about deploying C++ web services and processing SOAP messages. Axis C++ architecture closely follows Axis Java in Handler and message paths. </p>
  
  <h3>Handlers and the Message Path in Axis</h3>
  <p>Axis C++ implementation follows how handlers and message paths work in Axis Java implementation. 
  When the central Axis processing logic runs, a series of Handlers 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 <b>MessageData</b></p>
  <br>A MessageData is a structure which contains several important parts:
  <a><li> Deserializer</li></a>
  <a><li> Serializer</li></a>
  <a><li>A bag of properties</li></a>
  <br><br> We will be discussing more on each of this later on this Architecture Guide.
   
  <h3>Message Path on the Server</h3>
      
  <br>The server side message path is shown in the following diagram. The small cylinders represent Handlers and the larger, enclosing cylinders represent Chains (ordered collections of Handlers which will be described shortly). 
  <p><center>
  
  <img SRC="../images/c/ag/massagep.jpg" ></center></p>
  <br>
  <center> figure 1.0</center>
  <p>Above diagram shows you how the Axis C++ Engine architecture works to invoke functions of AxisC++ Server Engine.</p> 
  
  A message arrives (in some protocol-specific manner) at a Transport Listener. In this case, let's assume the Listener is an apache module. It's the Listener's job to package the protocol-specific data into a soapstream object (specified in Packet.h), and pass it to Axis C++ Engine to be processed. The soapstream is also loaded with various properties by the Listener -  in this example the property "trtype" would be set to the transport type and the value of the SOAPAction HTTP header is inserted in to a header list. 
  The Axis C++ Server Engine'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 Chains. A Chain is also a Handler consisting of a sequence of Handlers which are invoked in turn -- more on Chains later. Transport  request handlers are invoked.
  <br>Then the loaded handler chains are invoked in the order as shown in the diagram, passing the MessageData object into the invoke(). 
  
  <br><b>Note:</b>
  
  <br>Service Specific Layer
  <br>Actual Web service provider is wrapper Class. Handler Chains invoke a list of Handlers in a while loop and HandlerChains.cpp invoke handler one by one.
  
  
  <p><a name="#massagef"/></a></p>
  <h2>Message Flow</h2>
  
  <h3>Handlers and Chains</h3>
  
  Handlers are invoked in sequence to process messages. At some point in the sequence a Handler may send a request and receive a response or else process a request and produce a response. Such a Handler is known as the pivot point of the sequence. As described above, Handlers are either transport-specific, service-specific, or global. The Handlers of each of these three different kinds are combined together into Chains. So the overall sequence of Handlers comprises three Chains: transport, global, and service. The following diagram shows two sequences of handlers: the client-side sequence on the left and the server-side sequence on the right. 
  
  <p><center>
  
  <img SRC="../images/c/ag/pivots.jpg" ></center></p>
  <center>figure 3.0</center>
  
  <p>A web service does not necessarily send a response message to each request message, although many do. However, response Handlers are still useful in the message path even when there isn't a response message, e.g. to stop timers, clean up resources, etc. 
  A Chain is a composite Handler, i.e. it aggregates a collection of Handlers as well as implementing the Handler interface</p>
  <p>A Chain also has similarities to the Chain of Responsibility design pattern in which a request flows along a sequence of Handlers until it is processed. Although an Axis Chain may process a request in stages over a succession of Handlers, it has the same advantages as Chain of Responsibility: flexibility and the ease with which new function can be added. 
  Back to message processing -- a message is processed by passing through the appropriate Chains. A message Data  is used to pass the message and associated environment through the sequence of Handlers. The model is that Axis Chains are constructed offline by having Handlers added to them one at a time. Then they are turned online and message data start to flow through the Chains.  
  Handlers and Chains can be defined to have 'request', 'session', or 'application' scope. 
  
  <p><a name="depend"/></a></p>
   <h2>1.Axis Engine</h2>
  
  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.
  Following Diagram shows how the transport listener passes the SOAP message to the AxisEngine. AxisEngine is a singleton object for a process.
  
  <p><center>
  
  <img SRC="../images/c/ag/d1-3.jpg"></center></p>
    
  <p><a name="start"/></a></p>
      <h2>2.HandlerPool</h2>
  
  AxisEngine instantiates a HandlerPool object in its constructor. HandlerPool does the following 3 tasks,<p>
  <br>1.	Loads and keeps Transport and Global handlers. 
  <br>2.	Loads service specific handlers when needed and unloads when needed. 
  <br>3.	Loads target web service handler when needed and unloads when needed. </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>
  In order for the HandlerLoader to dynamically load a class, every DLL (or Shared object) must have following export functions. </p>
  <p>int GetClassInstance(DCLInterface **inst); 
  <p>int DestroyInstance(DCLInterface *inst);
  <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 <b>BasicHandler</b>and is known to AxisEngine. This interface is implemented by every webservice and a handler.</p>
  
  
  
    
  
  <p><a name="msoap"/></a></p>
  <h2>3.Message Model</h2>
  
  The XML syntax of a SOAP message is fairly simple. A SOAP message consists of an envelope containing: 
  <br>�	an optional header containing zero or more header entries (sometimes ambiguously referred to as headers), 
  <br>�	a body containing zero or more body entries, and 
  <br>�	zero or more additional, non-standard elements. 
  
  <br><br>The only body entry defined by SOAP is a SOAP fault which is used for reporting errors. 
  Some of the XML elements of a SOAP message define namespaces, each in terms of a URI and a local name, and encoding styles, a standard one of which is defined by SOAP. 
  Header entries may be tagged with the following optional SOAP attributes: 
  �	actor which specifies the intended recipient of the header entry in terms of a URI, and 
  �	mustUnderstand which specifies whether or not the intended recipient of the header entry is required to process the header entry. 
  So the SOAP message model looks like this: 
   
  <p><center>
  
  <img SRC="../images/c/ag/soap.jpg" ></center></p>
  
  
  
  
  
  
  <p><a name="install-test"/></a>
      <h2> 4.Soap Deserializer</h2>
  
  <p>Currently the Soap Deserializer is implemented using SAX2 parser. Soap Deserializer exposes and API such that the API is independent of the implementation.</p> 
  <p><a name="deploy"/></a></p>
        <h2>5.Soap Serializer </h2>
  
  <p>Soap Serializer's task is to generate the 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 generate the SOAP message.</p>
  
  <p><a name="test"/></a></p>
      <h2>6.WSDD Module </h2>  
  
       
  WSDD module is a set of classes that parses the deployment descriptor file(server.wsdd) which, is a XML file and makes the information available to the AxisEngine. The WSDD module represents the structure of a WSDD file.                         
    
  
  
  
  
  
  <p><a name="wrapper"/></a></p>
  <h2>WSDL2Ws Tool</h2>
   WSDL2Ws Tool is generated Client Side stubs and server side skeletons and wrappers.It's architecture is described in
   <a href ="WSDL2Ws.html"> WSDL2Ws.html </a></p>
  
  
  <p><a name="Dbook"/></a></p>
  <h2>Diagram Book</h2>
  
   <p> This<a href ="usecase.html"> Diagram Book </a>includes Following Diagrames which are drawn to describe Axis Cpp Engine and it's process.</p> 
  
  <p>1) Use case diagram(s)</p>
  <p>2) Sequence diagrams</p>
  <p>3) Class diagrams(s)</p>
  <p>4) Deployment diagram(s)</p>
  
  
  
  <p><a name="open"/></a></p>
  <h2>Open Issues</h2>
  
  <hr size=1 noshade= />
  
    </body>
  </html>