<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.2 at 2021-08-01 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20210801" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Axis2 Architecture Guide</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
      <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script>
<meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="" /><meta content="20050916;22455288" />      </head>
    <body class="topBarDisabled">
      <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href="http://www.apache.org/" id="bannerLeft"><img src="http://www.apache.org/images/asf_logo_wide.png"  alt="Apache Axis2"/></a></div>
        <div class="pull-right"><a href=".././" id="bannerRight"><img src="../images/axis.jpg" /></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2021-08-01<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.0<span class="divider">|</span></li>
        <li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../index.html" title="Axis2/Java">Axis2/Java</a><span class="divider">/</span></li>
    <li class="active ">Axis2 Architecture Guide</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
<ul class="nav nav-list">
          <li class="nav-header">Axis2/Java</li>
    <li><a href="../index.html" title="Home"><span class="none"></span>Home</a>  </li>
    <li><a href="../download.html" title="Downloads"><span class="none"></span>Downloads</a>  </li>
    <li><a href="javascript:void(0)" title="Release Notes"><span class="icon-chevron-down"></span>Release Notes</a>
      <ul class="nav nav-list">
    <li><a href="../release-notes/1.6.1.html" title="1.6.1"><span class="none"></span>1.6.1</a>  </li>
    <li><a href="../release-notes/1.6.2.html" title="1.6.2"><span class="none"></span>1.6.2</a>  </li>
    <li><a href="../release-notes/1.6.3.html" title="1.6.3"><span class="none"></span>1.6.3</a>  </li>
    <li><a href="../release-notes/1.6.4.html" title="1.6.4"><span class="none"></span>1.6.4</a>  </li>
    <li><a href="../release-notes/1.7.0.html" title="1.7.0"><span class="none"></span>1.7.0</a>  </li>
    <li><a href="../release-notes/1.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</a>  </li>
      </ul>
  </li>
    <li><a href="../modules/index.html" title="Modules"><span class="none"></span>Modules</a>  </li>
    <li><a href="../tools/index.html" title="Tools"><span class="none"></span>Tools</a>  </li>
          <li class="nav-header">Documentation</li>
    <li><a href="../docs/toc.html" title="Table of Contents"><span class="none"></span>Table of Contents</a>  </li>
    <li><a href="../docs/installationguide.html" title="Installation Guide"><span class="none"></span>Installation Guide</a>  </li>
    <li><a href="../docs/quickstartguide.html" title="QuickStart Guide"><span class="none"></span>QuickStart Guide</a>  </li>
    <li><a href="../docs/userguide.html" title="User Guide"><span class="none"></span>User Guide</a>  </li>
    <li><a href="../docs/jaxws-guide.html" title="JAXWS Guide"><span class="none"></span>JAXWS Guide</a>  </li>
    <li><a href="../docs/pojoguide.html" title="POJO Guide"><span class="none"></span>POJO Guide</a>  </li>
    <li><a href="../docs/spring.html" title="Spring Guide"><span class="none"></span>Spring Guide</a>  </li>
    <li><a href="../docs/webadminguide.html" title="Web Administrator's Guide"><span class="none"></span>Web Administrator's Guide</a>  </li>
    <li><a href="../docs/migration.html" title="Migration Guide (from Axis1)"><span class="none"></span>Migration Guide (from Axis1)</a>  </li>
          <li class="nav-header">Resources</li>
    <li><a href="../faq.html" title="FAQ"><span class="none"></span>FAQ</a>  </li>
    <li><a href="../articles.html" title="Articles"><span class="none"></span>Articles</a>  </li>
    <li><a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki"><span class="none"></span>Wiki</a>  </li>
    <li><a href="../refLib.html" title="Reference Library"><span class="none"></span>Reference Library</a>  </li>
    <li><a href="../apidocs/index.html" title="Online Java Docs"><span class="none"></span>Online Java Docs</a>  </li>
          <li class="nav-header">Get Involved</li>
    <li><a href="../overview.html" title="Overview"><span class="none"></span>Overview</a>  </li>
    <li><a href="../git.html" title="Checkout the Source"><span class="none"></span>Checkout the Source</a>  </li>
    <li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a>  </li>
    <li><a href="../release-process.html" title="Release Process"><span class="none"></span>Release Process</a>  </li>
    <li><a href="../guidelines.html" title="Developer Guidelines"><span class="none"></span>Developer Guidelines</a>  </li>
    <li><a href="../siteHowTo.html" title="Build the Site"><span class="none"></span>Build the Site</a>  </li>
          <li class="nav-header">Project Information</li>
    <li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a>  </li>
    <li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a>  </li>
    <li><a href="https://github.com/apache/axis-axis2-java-core/" class="externalLink" title="Source Code"><span class="none"></span>Source Code</a>  </li>
    <li><a href="../thanks.html" title="Acknowledgements"><span class="none"></span>Acknowledgements</a>  </li>
          <li class="nav-header">Apache</li>
    <li><a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License"><span class="none"></span>License</a>  </li>
    <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship"><span class="none"></span>Sponsorship</a>  </li>
    <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a>  </li>
    <li><a href="http://www.apache.org/security/" class="externalLink" title="Security"><span class="none"></span>Security</a>  </li>
  </ul>
          <hr />
          <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
              <div class="clear"></div>
  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
              </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >
<html xmlns="http://www.w3.org/1999/xhtml">


<h1 align="center">Apache Axis2 Architecture Guide</h1>

<p>This document gives an introduction to Axis2's modular
architecture with explanations on every module.</p>
<section>
<h2><a name="Contents"></a>Contents</h2>

<ul>

<li><a href="#bmBP">The Big Picture</a></li>

<li>

<p><a href="#requirements">Requirement of Axis2</a></p>
</li>

<li><a href="#thearchi">Axis2 Architecture</a>

<ul>

<li>

<p><a href="#bmcore">Core Modules</a></p>
</li>

<li><a href="#bmother">Other Modules</a></li>

<li>

<p><a href="#bmInfoMod">Information Model</a></p>
</li>

<li><a href="#bmXML">XML Processing Model</a></li>

<li>

<p><a href="#bmSOAPPM">SOAP Processing Model</a></p>

<ul>

<li><a href="#default">Axis2 Default Processing Model</a></li>

<li>

<p><a href="#incomingsoap">Processing an Incoming SOAP
Message</a></p>
</li>

<li><a href="#outgoing">Processing of the Outgoing Message</a></li>

<li>

<p><a href="#extending">Extending the SOAP Processing Model</a></p>

<ul>

<li><a href="#extendingwithhandlers">Extending the SOAP Processing
Model with Handlers</a></li>

<li>

<p><a href="#extendingwithmodules">Extending the SOAP Processing
Model with Modules</a></p>
</li>
</ul>
</li>
</ul>
</li>

<li><a href="#bmDeployment">Deployment</a>

<ul>

<li><a href="#xmlfile">The <i>axis2.xml</i> file</a></li>

<li>

<p><a href="#servicearchive">Service Archive</a></p>
</li>

<li><a href="#modulearchive">Module Archive</a></li>
</ul>
</li>

<li>

<p><a href="#bmClientAPI">Client API</a></p>

<ul>

<li><a href="#oneway">One Way Messaging Support</a></li>

<li>

<p><a href="#requestresponse">Request Response Messaging
Support</a></p>
</li>
</ul>
</li>

<li><a href="#bmTransports">Transports</a></li>

<li>

<p><a href="#bmWSDL">Code Generation</a></p>
</li>

<li><a href="#bmDB">Data Binding</a>

<ul>

<li><a href="#integration">Integration with Code Generation
Engine</a></li>

<li>

<p><a href="#serial">Serialization and De-Serialization</a></p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<a name="bmBP" id="bmBP"></a>
<section>
<h2><a name="The_Big_Picture"></a>The Big Picture</h2>

<p>A new architecture for Axis was introduced during the August
2004 Summit in Colombo, Sri Lanka. This new architecture on which
Axis2 is based is more flexible, efficient, and configurable in
comparison to <a class="externalLink" href="http://ws.apache.org/axis/java/architecture-guide.html">Axis1.x
architecture</a>. Some well established concepts from Axis 1.x,
like handlers etc., have been preserved in this new
architecture.</p>

<p>Any architecture is a result of what that architecture should
yield. The success of an architecture should be evaluated based on
the requirements expected to be met by that architecture. Let us
start our journey into Axis2 by looking at the requirements.</p>
<a name="requirements" id="requirements"></a>
<section>
<h2><a name="Requirement_of_Axis2"></a>Requirement of Axis2</h2>

<p>In SOAP terminology, a participant who is taking part in a Web
service interaction is known as a SOAP Node. Delivery of a single
SOAP Message is defined based on two participants, SOAP Sender and
SOAP Receiver. Each SOAP message is sent by a SOAP Sender and
received by a SOAP Receiver. A single SOAP delivery is the most
basic unit that builds the Web service interaction.</p>

<p>Each SOAP Node may be written in specific programming language,
may it be Java, C++, .NET or Perl, but the Web services allow them
to interoperate. This is possible because on the wire each Web
service interaction is done via SOAP, which is common to every SOAP
Node.</p>

<p><img src="images/archi-guide/soap.gif" alt="" align="bottom" width="691" height="319" border="0" id="Graphic1" /></p>

<p>Web service middleware handles the complexity in SOAP messaging
and lets the users work with the programming language they are
accustomed to. Axis2 allows Java users to invoke Web services using
Java representations, and handles the SOAP messaging behind the
curtain.</p>

<p>Axis2 handles SOAP processing along with numerous other tasks.
This makes life of a Web service developer a whole lot easier.
Following are the identified requirements:</p>

<ol style="list-style-type: decimal">

<li>Provide a framework to process the SOAP messages. The framework
should be extensible and the users should be able to extend the
SOAP processing per service or per operation basis. Furthermore, it
should be able to model different Message Exchange Patterns (MEPs)
using the processing framework.</li>

<li>Ability to deploy a Web service (with or without WSDL)</li>

<li>Provide a Client API that can be used to invoke Web services.
This API should support both the Synchronous and Asynchronous
programming models.</li>

<li>Ability to configure Axis2 and its components through
deployment.</li>

<li>Ability to send and receive SOAP messages with different
transports.</li>
</ol>

<p>Apart from the above functionalities, performance in terms of
memory and speed is a major consideration for Axis2. Axis2 Core
Architecture is built on three specifications- <a class="externalLink" href="http://www.w3.org/TR/wsdl">WSDL</a>, <a class="externalLink" href="http://www.w3.org/TR/soap/">SOAP</a> and <a class="externalLink" href="http://www.w3.org/Submission/ws-addressing/">WS-Addressing</a>.
Other specifications like JAX-RPC, <a class="externalLink" href="http://java.sun.com/webservices/saaj/index.jsp">SAAJ</a> and
<a class="externalLink" href="http://www.w3.org/Submission/WS-Policy/">WS-Policy</a> are
layered on top of the Core Architecture.</p>
<a name="thearchi" id="thearchi"></a>
<section>
<h2><a name="Axis2_Architecture"></a>Axis2 Architecture</h2>
Axis2 architecture lays out some principals to preserve the
uniformity. They are as follows:

<ul>

<li>

<p>Axis2 architecture separates the logic and the states. Code that
does the processing does not have a state inside Axis2. This allows
code to be executed freely by parallel threads.</p>
</li>

<li>All the information is kept in one information model, allowing
the system to be suspended and resumed.</li>
</ul>

<p>Axis2 architecture is modular. Therefore, Axis2 Framework is
built up of core modules that collectively make up the core
architecture of Axis2. Non-core/other modules are layered on top of
these core modules.</p>
<a name="bmcore" id="bmcore"></a>
<section>
<h3><a name="Core_Modules:"></a>Core Modules:</h3>

<ul>

<li><a href="#bmInfoMod">Information Model</a> - Axis2 defines a
model to handle information and all states are kept in this model.
The model consists of a hierarchy of information. The system
manages the life cycle of the objects in this hierarchy.</li>

<li>

<p><a href="#bmXML">XML processing Model</a> - Handling the SOAP
Message is the most important and most complex task. The efficiency
of this is the single most important factor that decides the
performance. It makes sense to delegate this task to a separate
sub-project under the Web services project, allowing that
sub-project (<a class="externalLink" href="http://ws.apache.org/axiom/">AXIOM</a> or AXis
Object Model) to provide a simple API for SOAP and XML info-set. It
hides the complexities of efficient XML processing within its
implementation.</p>
</li>

<li><a href="#bmSOAPPM">SOAP Processing Model</a> - This controls
the execution of the processing. The model defines different phases
the execution would walk through, and the user can extend the
Processing Model at specific places.</li>

<li>

<p><a href="#bmDeployment">Deployment Model</a> - The Axis2
deployment model allows the user to deploy services, configure the
transports, and extend the SOAP Processing model per system,
service, or operation basis.</p>
</li>

<li><a href="#bmClientAPI">Client API</a> - This provides a
convenient API for users to communicate with Web services using
Axis2. There are a set of classes to interact with IN-OUT and
IN-Only style <a class="externalLink" href="http://www.w3.org/2002/ws/cg/2/07/meps.html">Message Exchange
Patterns (MEPs)</a>, where they can be used to construct any other
MEP. (Please note that even if the client API has in-built support
for the above named MEPs, it does not by any means limit Axis2's
flexibility to support custom MEPs.)</li>

<li>

<p><a href="#bmTransports">Transports</a> - Axis2 defines a
transport framework that enables the user to use multiple different
transports. The transports fit into specific places in the SOAP
processing model. The implementation provides a few common
transports and the user can write or plug-in new ones if and when
it is needed.</p>
</li>
</ul>
<a name="bmother" id="bmother"></a>
</section><section>
<h3><a name="Other_Modules:"></a>Other Modules:</h3>

<ul>

<li><a href="#bmWSDL">Code Generation</a> - Axis2 provides a code
generation tool that generates server side and client side code
along with descriptors and a test case. The generated code
simplifies the service deployment and the service invocation,
increasing the usability of Axis2.</li>

<li>

<p><a href="#bmDB">Data Binding</a> - The basic client API of Axis2
lets the users process SOAP at the infoset level, whereas data
binding extends it to make it more convenient to users by
encapsulating the infoset layer and providing a programming
language specific interface.</p>
</li>
</ul>
<map name="Graphic2Map" id="g2m">
<area shape="rect" coords="123,31,222,97" href="#bmInfoMod" alt="" />
<area shape="rect" coords="239,62,319,134" href="#bmXML" alt="" />
<area shape="rect" coords="127,112,218,177" href="#bmSOAPPM" alt="" />
<area shape="rect" coords="12,39,89,95" href="#bmDeployment" alt="" />
<area shape="rect" coords="0,108,94,156" href="#bmWSDL" alt="" />
<area shape="rect" coords="350,31,426,86" href="#bmClientAPI" alt="" />
<area shape="rect" coords="350,114,421,164" href="#bmTransports" alt="" /></map>

<p><img src="images/archi-guide/all.png" width="426" alt="" height="189" border="0" align="bottom" usemap="#Graphic2Map" id="Graphic2" /></p>
<a name="bmInfoMod" id="bmInfoMod"></a>
</section><section>
<h2><a name="Information_Model"></a>Information Model</h2>

<p>The Information Model has two main hierarchies--Contexts and
Descriptions. This model is described in UML notations below.</p>

<p><img src="images/archi-guide/contexts.png" align="bottom" alt="" width="400" height="443" border="0" id="Graphic3" /></p>

<p>( A ----&lt;&gt; B says, B has 1 or more objects of A.
A------&gt;B says, the given relationship holds between A and
B.)</p>

<p>The two hierarchies are connected as shown in the above figure.
The Description hierarchy represents the static data. This data may
be loaded from a configuration file that exists throughout the
lifetime of Axis2. For example, deployed Web services, operations,
etc. On the other hand, the context hierarchy holds more dynamic
information about objects that can have more than one instance
(e.g., Message Contexts).</p>

<p>These two hierarchies create a model that provides the ability
to search for key-value pairs. When the values are searched at a
given level, they are searched while moving up the hierarchy until
a match is found. In the resulting model, the lower levels override
the values in the upper levels. For example, when a value is looked
up in the Message Context and is not found, it would be looked up
in the Operation Context, etc, up the hierarchy. The Search is
first done up the hierarchy, and if the starting point is a Context
then it searches in the Description hierarchy as well.</p>

<p>This allows the user to declare and override values, with the
result being a very flexible configuration model. This flexibility
could be the <i>Achilles heel</i> for the system, however, as
searches are expensive, especially for parameters that turn out not
to exist. Yet in the final analysis, the Axis Team believes that
this flexibility serves developers better overall.</p>

<table border="0" class="table table-striped" width="955">
<col width="112" />
<col width="371" />
<col width="103" />
<col width="336" />
<tbody>

<tr class="a">

<td><b>Context</b></td>

<td><b>Description</b></td>

<td><b>Configuration</b></td>

<td><b>Description</b></td>
</tr>

<tr class="b">

<td width="112">

<p>Configuration Context</p>
</td>

<td width="371">

<p>Holds the Axis2's run time status. A deep copy of this would
essentially make a copy of Axis2.</p>
</td>

<td width="103">

<p>Axis Configuration</p>
</td>

<td width="336">

<p>Holds all global configurations: transports, global modules,
parameters, services, etc.</p>
</td>
</tr>

<tr class="a">

<td width="112">

<p>Service Group Context</p>
</td>

<td width="371">

<p>Holds information about a particular usage of the respective
service group. The life of a Service Group Context starts when a
user starts interacting with a service that belongs to this service
group. This can be used to share information between services
(within the same service group) in a single interaction.</p>
</td>

<td width="103">

<p>AxisServiceGroup</p>
</td>

<td width="336">

<p>Holds deployment time information about a particular service
group.</p>
</td>
</tr>

<tr class="b">

<td width="112">

<p>Service Context</p>
</td>

<td width="371">

<p>This context is available throughout the usage of the respective
service. This can be used to share information between several MEPs
of the same service, within a single interaction. The life cycle
depends on the scope of the service.</p>
</td>

<td width="103">

<p>AxisService</p>
</td>

<td width="336">

<p>Holds the Operations and the service level configurations</p>
</td>
</tr>

<tr class="a">

<td width="112">

<p>Operation Context</p>
</td>

<td width="371">

<p>Holds the information about the current MEP instance, maintains
the messages in the current MEP etc.</p>
</td>

<td width="103">

<p>AxisOperation</p>
</td>

<td width="336">

<p>Holds the operation level configurations</p>
</td>
</tr>

<tr class="b">

<td width="112"><a name="messageContext" id="messageContext"></a>

<p>Message Context</p>
</td>

<td width="371">

<p>Holds all the information about the message currently being
executed.</p>
</td>

<td width="103">

<p>AxisMessage</p>
</td>

<td width="336">

<p>Holds message level static information like the schema of the
particular message.</p>
</td>
</tr>
</tbody>
</table>
<a name="bmXML" id="bmXML"></a>
<section>
<h2><a name="XML_Processing_Model"></a>XML Processing Model</h2>

<p>As mentioned above, the XML processing model of Axis2 has become
a separate sub-project, called <a class="externalLink" href="http://ws.apache.org/axiom/">Apache Axiom</a>,
in the Apache Web services project. Please refer to the <a href="OMTutorial.html">OM Tutorial</a> for more information.</p>
<a name="bmSOAPPM" id="bmSOAPPM"></a>
<section>
<h2><a name="SOAP_Processing_Model"></a>SOAP Processing Model</h2>

<p><img src="images/archi-guide/soap-processing.gif" alt="" align="bottom" width="755" height="348" border="0" id="Graphic4" /></p>

<p>The architecture identified two basic actions a SOAP processor
should perform, sending and receiving SOAP messages. The
architecture provides two pipes (or flows) to perform these two
basic actions. The Axis Engine or the driver of Axis2 defines two
methods, send() and receive(), to implement these two pipes. The
two pipes are named <i><b>In</b> Pipe</i> and <i><b>Out</b>
Pipe</i>, and complex Message Exchange Patterns (MEPs) are
constructed by combining these two pipes.</p>

<p>Extensibility of the SOAP processing model is provided through
handlers. When a SOAP message is being processed, the handlers that
are registered will be executed. The handlers can be registered in
global, service, or operation scope and the final handler chain is
calculated combining the handlers from all the scopes.</p>

<p>The handlers act as interceptors and they process parts of the
SOAP message and provide add-on services. Usually handlers work on
the SOAP headers, yet they may access or change the SOAP body as
well.</p>

<p>When a SOAP message is being sent through the Client API, an
<i>Out Pipe</i> activates. The <i>Out Pipe</i> will invoke the
handlers and end with a Transport Sender that sends the SOAP
message to the target endpoint. The SOAP message is received by a
Transport Receiver at the target endpoint, which reads the SOAP
message and starts the <i>In Pipe</i>. The <i>In Pipe</i>
consists of handlers and ends with the <a href="#mr">Message
Receiver</a>, which consumes the SOAP message.</p>

<p>The processing explained above happens for each and every SOAP
message that is exchanged. After processing one message, Axis2 may
decide to create other SOAP messages, in which case more complex
message patterns emerge. However, Axis2 always views the SOAP
message in terms of processing a single message. The combination of
the messages are layered on top of that basic framework.</p>

<p>The two pipes do not differentiate between the Server and the
Client. The SOAP Processing Model handles the complexity and
provides two abstract pipes to the user. The different areas or the
stages of the pipes are called 'phases' within Axis2. A Handler
always runs inside a specific phase, and the phase provides a
mechanism to specify the ordering of handlers. Both Pipes have
built-in phases, and both define the areas for 'User Phases' which
can be defined by the user.</p>
<a name="default" id="default"></a>
<section>
<h3><a name="Axis2_Default_Processing_Model"></a>Axis2 Default Processing Model</h3>

<p>Axis2 has some inbuilt handlers that run in inbuilt phases and
they create the default configuration for Axis2. We will be looking
more in to how to extend the default processing Model in the next
section.</p>
There are three special handlers defined in Axis2.

<ol style="list-style-type: decimal">

<li>Dispatchers - Finds the service and the operation the SOAP
message is directed to. Dispatchers always run on the
<i>In-Pipe</i> and inside the Dispatch phase. The in-built
dispatchers dispatch to a particular operation depending on various
conditions like WS-Addressing information, URI information, SOAP
action information, etc. ( See more information on <a class="externalLink" href="http://wso2.org/library/176">
Dispatching</a>)</li>
</ol>

<ul>

<li><a name="mr" id="mr"></a>Message Receiver - Consumes the SOAP
message and hands it over to the application. The message receiver
is the last handler of the in-pipe</li>

<li>

<p>Transport Sender - Sends the SOAP message to the SOAP endpoint
the message is destined to. Always runs as the last handler in the
out-pipe</p>
</li>
</ul>
<a name="incomingsoap" id="incomingsoap"></a>
</section><section>
<h3><a name="Processing_an_Incoming_SOAP_Message"></a>Processing an Incoming SOAP Message</h3>

<p>An incoming SOAP message is always received by a Transport
Receiver waiting for the SOAP messages. Once the SOAP message
arrives, the transport Headers are parsed and a <a href="#messageContext">Message Context</a> is created from the incoming
SOAP message. This message context encapsulates all the
information, including the SOAP message itself, transport headers,
etc., inside it. Then the <i>In Pipe</i> is executed with the
Message Context.</p>

<p>Let us see what happens at each phase of the execution. This
process can happen in the server or in the client.</p>

<ol style="list-style-type: decimal">

<li><b>Transport Phase</b> - The handlers are in the
phase that processes transport specific information such as
validating incoming messages by looking at various transport
headers, adding data into message contexts, etc.</li>

<li><b>Pre-Dispatch Phase</b>- The main functionality of
the handlers in this phase is to populate message context to do the
dispatching. For example, processing of addressing headers of the
SOAP message, if any, happens in this phase. Addressing handlers
extract information and put them in to the message context.</li>

<li><b>Dispatch Phase</b> - The Dispatchers run in this
phase and try to find the correct service and operation this
particular message is destined for.<br />
The post condition of the dispatch phase (any phase can contain a
post condition) checks whether a service and an operation were
found by the dispatchers. If not, the execution will halt and
return a &quot;service not found' error.</li>

<li><b>User Defined Phases</b> - Users can engage their
custom handlers here.</li>

<li><b>Message Validation Phase</b> - Once the user level
execution has taken place, this phase validates whether SOAP
Message Processing has taken place correctly.</li>

<li><b>Message Processing Phase</b> - The Business logic
of the SOAP message is executed here. A <a href="#mr">Message
Receiver</a> is registered with each Operation. This message
receiver (associated to the particular operation) will be executed
as the last handler of this phase.</li>
</ol>

<p>There may be other handlers in any of these phases. Users may
use custom handlers to override the processing logic in each of
these phases.</p>
<a name="outgoing" id="outgoing"></a>
</section><section>
<h3><a name="Processing_of_the_Outgoing_Message"></a>Processing of the Outgoing Message</h3>

<p>The <i>Out Pipe</i> is simpler because the service and the
operation to dispatch are known by the time the pipe is executed.
The <i>Out Pipe</i> may be initiated by the</p>
<a href="#mr">Message Receiver</a> or the Client API
implementation. Phases of the <i>Out Pipe</i> are described
below:

<ol style="list-style-type: decimal">

<li><b>Message Initialize Phase</b> - First phase of the
<i>Out Pipe</i>. Serves as the placeholder for the custom
handlers.</li>

<li><b>User Phases</b> - Executes handlers in
user-defined phases.</li>

<li><b>Transports Phase</b> - Executes any transport
handlers taken from the associated transport configuration. The
last handler would be a transport sender which will send the SOAP
message to the target endpoint.</li>
</ol>
<a name="extending" id="extending"></a>
</section><section>
<h3><a name="Extending_the_SOAP_Processing_Model"></a>Extending the SOAP Processing Model</h3>

<p>Above, we discussed the default processing model of Axis2. Now
let us discuss the extension mechanism for the SOAP processing
model. After all, the whole effort of making this SOAP
engine/processing model was focused on making it extendable.</p>

<p>The idea behind introducing step-wise processing of the SOAP
message in terms of handlers and phases is to allow easier
modification of the processing order. The notion of phases makes it
easier to place handlers in between other handlers. This enables
modification of the default processing behavior. The SOAP
Processing Model can be extended with <a href="#extendingwithhandlers">handlers</a> or <a href="#extendingwithmodules">modules</a>.</p>
<section>
<h4><a name="Extending_the_SOAP_Processing_Model_with_Handlers"></a>Extending the SOAP Processing Model with Handlers</h4>

<p>The handlers in a module can specify the phase they need to be
placed in. Furthermore, they can specify their location inside a
phase by providing phase rules. Phase rules will place a
handler,</p>

<ol style="list-style-type: decimal">

<li>as the first handler in a phase,</li>

<li>as the last handler in a phase,</li>

<li>before a given handler,</li>

<li>or after a given handler.</li>
</ol>
<a name="extendingwithmodules" id="extendingwithmodules"></a>
</section><section>
<h4><a name="Extending_the_SOAP_Processing_Model_with_Modules"></a>Extending the SOAP Processing Model with Modules</h4>

<p>Axis2 defines an entity called a 'module' that can introduce
handlers and Web service operations. A Module in terms of Axis2
usually acts as a convenient packaging that includes:</p>

<ul>

<li>A set of handlers and</li>

<li>An associated descriptor which includes the phase rules</li>
</ul>

<p>Modules have the concept of being 'available' and 'engaged'.
'Availability' means the module is present in the system, but has
not been activated, i.e., the handlers included inside the module
have not been used in the processing mechanism. When a module is
'engaged' it becomes active and the handlers get placed in the
proper phases. The handlers will act in the same way as explained
in the previous section. Usually a module will be used to implement
a WS-* functionality such as WS-Addressing.</p>

<p>Apart from the extension mechanism based on the handlers, the
WS-* specifications may suggest a requirement for adding new
operations. For example, once a user adds Reliable Messaging
capability to a service, the &quot;Create Sequence&quot; operation needs to
be available to the service endpoint. This can be implemented by
letting the modules define the operations. Once the module is
engaged to a service, the necessary operations will be added to
that service.</p>

<p>A service, operation, or the system may engage a module. Once
the module is engaged, the handlers and the operations defined in
the module are added to the entity that engaged them.</p>

<p>Modules cannot be added (no hot deployment) while the Axis2
engine is running, but they will be available once the system is
restarted.</p>
<a name="bmDeployment" id="bmDeployment"></a>
</section></section><section>
<h2><a name="Deployment"></a>Deployment</h2>

<p>The Deployment Model provides a concrete mechanism to configure
Axis2. This model has three entities that provide the
configuration.</p>
<a name="xmlfile" id="xmlfile"></a>
<section>
<h3><a name="The_axis2.xml_file"></a>The axis2.xml file</h3>

<p>This file holds the global configuration for the client and
server, and provides the following information:</p>

<ol style="list-style-type: decimal">

<li>The global parameters</li>

<li>Registered transport-in and transport-outs</li>

<li>User-defined phase names</li>

<li>Modules that are engaged globally (to all services)</li>

<li>Globally defined <a href="#mr">Message Receivers</a></li>
</ol>
<a name="servicearchive" id="servicearchive"></a>
</section><section>
<h3><a name="Service_Archive"></a>Service Archive</h3>

<p>The Service archive must have a <i>META-INF/services.xml</i> file and may
contain the dependent classes. Please see modules/kernel/resources/services.xsd in 
the source distribution for the schema for services.xml. The <i>services.xml</i> file has
the following information.</p>

<ol style="list-style-type: decimal">

<li>Service level parameters</li>

<li>Modules that are engaged at service level</li>

<li>Service Specific <a href="#mr">Message Receivers</a></li>

<li>Operations inside the service</li>
</ol>
<a name="modulearchive" id="modulearchive"></a>
</section><section>
<h3><a name="Module_Archive"></a>Module Archive</h3>

<p>Module archive must have a META-INF/<a href="../schemas/module.xsd">module.xml</a> file and dependent
classes. The <i>module.xml</i> file has Module parameters and the
Operations defined in the module.</p>

<p>When the system starts up, Axis2 prompts the deployment model to
create an Axis Configuration. The deployment model first finds the
axis2.xml file and builds the global configuration. Then it checks
for the module archives and then for the service archives. After
that, the corresponding services and modules are added to the Axis
Configuration. The system will build contexts on top of the Axis
Configuration. After this, Axis2 is ready to send or receive SOAP
messages. Hot deployment is only allowed for services.</p>
<a name="bmClientAPI" id="bmClientAPI"></a>
</section><section>
<h2><a name="Client_API"></a>Client API</h2>

<p>There are three parameters that decide the nature of the Web
service interaction.</p>

<ol style="list-style-type: decimal">

<li>Message Exchange Pattern (MEP)</li>

<li>The behavior of the transport, whether it's One-Way or
Two-Way</li>

<li>Synchronous/Asynchronous behavior of the Client API</li>
</ol>

<p>Variations of the three parameters can result in an indefinite
number of scenarios. Even though Axis2 is built on a core that
supports any messaging interaction, the developers were compelled
to provide built-in support for only the two most widely used
Message Exchange Patterns (MEPs).</p>

<p>The two supported MEPs are One-Way and the In-Out
(Request-Response) scenarios in the Client API. The implementation
is based on a class called <code>ServiceClient</code> and there are
extensions for each MEP that Axis2 Client API supports.</p>
<a name="oneway" id="oneway"></a>
<section>
<h3><a name="One_Way_Messaging_Support"></a>One Way Messaging Support</h3>

<p>The One-Way support is provided by the
<code>fireAndForget</code> method of <code>ServiceClient</code>.
For one way invocations, one can use HTTP, SMTP and TCP transports.
In the case of the HTTP transport, the return channel is not used,
and the HTTP 202 OK is returned in the return channel.</p>
<a name="requestresponse" id="requestresponse"></a>
</section><section>
<h3><a name="In-Out_.28Request_Response.29_Messaging_Support"></a>In-Out (Request Response) Messaging Support</h3>

<p>The In-Out support is provided by the <code>sendReceive()</code>
method in ServiceClient. This provides a simpler interface for the
user. The Client API has four ways to configure a given message
exchange</p>

<ol style="list-style-type: decimal">

<li>Blocking or Non-Blocking nature - this can be decided by using
<code>sendReceive()</code> or <code>sendReceiveNonBlocking()</code>
methods</li>

<li>Sender transport - transport that sends the SOAP message</li>

<li>Listener transport - transport that receives the response</li>

<li>Use Separate Channel - determines whether the response is sent
over a separate transport connection or not. This can be false only
when the sender and listener transport is same and is a Two-Way
transport.</li>
</ol>

<p>Depending on the values of the above four parameters, Axis2
behaves differently.</p>
<a name="bmTransports" id="bmTransports"></a>
</section><section>
<h2><a name="Transports"></a>Transports</h2>

<p>Axis2 has two basic constructs for transports, namely: Transport
Senders and Transport Receivers. These are accessed via the
AxisConfiguration.</p>

<p>The incoming transport is the transport via which the AxisEngine
receives the message. The outgoing transport is decided based on
the addressing information (wsa:ReplyTo and wsa:FaultTo). If
addressing information is not available and if the server is trying
to respond, then the out going transport will be the output stream
of the incoming transport (if it is two-way transport).</p>

<p>At the client side, the user is free to specify the transport to
be used.</p>

<p>Transport Senders and Transport Receivers contain the following
information.</p>

<ol style="list-style-type: decimal">

<li>Transport Sender for Out Configuration</li>

<li>Transport Listener for In Configuration</li>

<li>Parameters of the transport</li>
</ol>

<p>Each and every transport out configuration defines a transport
sender. The transport sender sends the SOAP message depending on
its configuration.</p>

<p>The transport receiver waits for the SOAP messages, and for each
SOAP message that arrives, it uses the <i>In Pipe</i> to process
the SOAP message.</p>

<p>Axis2 presently supports the following transports:</p>

<ol style="list-style-type: decimal">

<li>HTTP - In HTTP transport, the transport listener is a servlet
or org.apache.axis2.transport.http.SimpleHTTPServer provided by
Axis2. The transport sender uses apache httpcomponents to connect and
send the SOAP message.</li>

<li>Local - This transport can be used for in-VM communication.</li>

<li>Transports for TCP, SMTP, JMS and other protocols are available
from the <a class="externalLink" href="http://ws.apache.org/commons/transport/">WS-Commons Transport</a>
project.</li>
</ol>
<a name="bmWSDL" id="bmWSDL"></a>
<section>
<h2><a name="Code_Generation"></a>Code Generation</h2>

<p>Although the basic objective of the code generation tools has
not changed, the code generation module of Axis2 has taken a
different approach to generate code. Primarily, the change is in
the use of templates, namely XSL templates, which gives the code
generator the flexibility to generate code in multiple
languages.</p>

<p>The basic approach is to set the code generator to generate an
XML, and parse it with a template to generate the code file. The
following figure describes how this shows up in the architecture of
the tool.</p>

<p><img src="images/archi-guide/CodegenArchitecture-new.gif" alt="" align="bottom" border="0" id="Graphic6" /></p>

<p>The fact here is that it is the same information that is
extracted from the WSDL no matter what output code is generated.
First, an AxisService is populated from a WSDL. Then the code
generator extracts information from the AxisService and creates an
XML, which is language independent. This emitted XML is then parsed
with the relevant XSL to generate code in the desired output
language. No matter what the output language is, the process is the
same except for the XSL template that is used.</p>
<a name="bmDB" id="bmDB"></a>
<section>
<h2><a name="Data_Binding"></a>Data Binding</h2>
<section>
<h3><a name="Integration_with_the_Code_Generation_Engine"></a>Integration with the Code Generation Engine</h3>

<p>Databinding for Axis2 is implemented in an interesting manner.
Databinding has not been included in the core deliberately, and
hence the code generation allows different data binding frameworks
to be plugged in. This is done through an extension mechanism where
the codegen engine first calls the extensions and then executes the
core emitter. The extensions populate a map of QNames vs. class
names that is passed to the code generator on which the emitter
operates on.</p>

<p><b>The following diagram shows the structure:</b></p>

<p><img src="images/codegen.gif" align="bottom" border="0" id="Graphic7" alt="" /></p>

<p><b>The following databinding extensions are
available:</b></p>

<ol style="list-style-type: decimal">

<li><b>ADB</b> - ADB (Axis Data Binding ) is a simple
framework that allows simple schemas to be compiled. It is
lightweight and simple, works off StAX and fairly performant.
However, it does not support the complete set of schema constructs
and is likely to complain for certain schemas!</li>

<li><b>XMLBeans</b> - XMLbeans claims that it supports
the complete schema specification, and it is preferred if full
schema support is needed!</li>

<li><b>JAXB-RI</b> - JAXB2 support has been added in a
similar manner to XMLbeans and serves as another option for the
user</li>

<li><b>JibX</b> - This is the most recent addition to the
family of databinding extensions, and it is also another option
users have for data binding.</li>
</ol>
<a name="serial" id="serial"></a>
</section><section>
<h3><a name="Serialization_and_De-Serialization_of_Data_bound_classes"></a>Serialization and De-Serialization of Data bound classes</h3>

<p>AXIOM is based on the StAX API (Streaming API for XML).
Xml-beans also supports this API. Data binding in Axis2 is achieved
through interfacing the AXIOM with the Xml-beans using the StAX
API. At the time of code generation, there will be utility methods
generated inside the stub (or the message receiver) that can
de-serialize from AXIOM to a data bound object and serialize from a
data bound object to AXIOM. For example, if the WSDL has an
operation called &quot;echoString&quot;, once the code is generated, the
following methods will be generated inside the relevant
classes.</p>

<div>
<pre>
public static
org.apache.axiom.om.OMElement toOM(org.soapinterop.xsd.EchoStringParamDocument
param)// This method will handle the serialization.

public static org.apache.xmlbeans.XmlObject
fromOM(org.apache.axis2.om.OMElement param, java.lang.Class type) //This
method will handle the de-serialization.
</pre></div>
</section>
</html>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>
