<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
<meta http-equiv="content-type" content="" />
<title>Axis2 Architecture Guide</title>
<meta content="20050916;22455288" />
</head>
<body lang="en-US" dir="ltr" xml:lang="en-US">
<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>
<h2>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 <em>axis2.xml</em> 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>
<h2>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 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>
<h2>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 alt="" src="images/archi-guide/soap.gif" name="Graphic1"
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>
<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 href=
"http://www.w3.org/TR/wsdl">WSDL</a>, <a href=
"http://www.w3.org/TR/soap/">SOAP</a> and <a href=
"http://www.w3.org/Submission/ws-addressing/">WS-Addressing</a>.
Other specifications like JAX-RPC, <a href=
"http://java.sun.com/webservices/saaj/index.jsp">SAAJ</a> and
<a 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>
<h2>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>
<h3>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 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 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>
<h3>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" name="Graphic2" width=
"426" alt="" height="189" border="0" align="bottom" usemap=
"#Graphic2Map" id="Graphic2" /></p>
<a name="bmInfoMod" id="bmInfoMod"></a>
<h2>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" name="Graphic3"
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 <em>Achilles heel</em> 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 width="955">
<col width="112" />
<col width="371" />
<col width="103" />
<col width="336" />
<tbody>
<tr>
<td><strong>Context</strong></td>
<td><strong>Description</strong></td>
<td><strong>Configuration</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<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>
<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>
<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>
<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>
<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>
<h2>XML Processing Model</h2>
<p>As mentioned above, the XML processing model of Axis2 has become
a separate sub-project, called <a 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>
<h2>SOAP Processing Model</h2>
<p><img src="images/archi-guide/soap-processing.gif" name=
"Graphic4" 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 <em>In Pipe</em>
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>
<h3>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>
<li>Dispatchers - Finds the service and the operation the SOAP
message is directed to. Dispatchers always run on the
<em>In-Pipe</em> 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 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>
<h3>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>
<li><strong>Transport Phase</strong> - 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><strong>Pre-Dispatch Phase</strong>- 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><strong>Dispatch Phase</strong> - 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 "service not found' error.</li>
<li><strong>User Defined Phases</strong> - Users can engage their
custom handlers here.</li>
<li><strong>Message Validation Phase</strong> - Once the user level
execution has taken place, this phase validates whether SOAP
Message Processing has taken place correctly.</li>
<li><strong>Message Processing Phase</strong> - 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>
<h3>Processing of the Outgoing Message</h3>
<p>The <em>Out Pipe</em> is simpler because the service and the
operation to dispatch are known by the time the pipe is executed.
The <em>Out Pipe</em> may be initiated by the</p>
<a href="#mr">Message Receiver</a> or the Client API
implementation. Phases of the <em>Out Pipe</em> are described
below:
<ol>
<li><strong>Message Initialize Phase</strong> - First phase of the
<em>Out Pipe</em>. Serves as the placeholder for the custom
handlers.</li>
<li><strong>User Phases</strong> - Executes handlers in
user-defined phases.</li>
<li><strong>Transports Phase</strong> - 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>
<h3>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>
<h4>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>
<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>
<h4>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 "Create Sequence" 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>
<h2>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>
<h3>The axis2.xml file</h3>
<p>This file holds the global configuration for the client and
server, and provides the following information:</p>
<ol>
<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>
<h3>Service Archive</h3>
<p>The Service archive must have a <em>META-INF/services.xml</em> 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 <em>services.xml</em> file has
the following information.</p>
<ol>
<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>
<h3>Module Archive</h3>
<p>Module archive must have a META-INF/<a href=
"../schemas/module.xsd">module.xml</a> file and dependent
classes. The <em>module.xml</em> 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>
<h2>Client API</h2>
<p>There are three parameters that decide the nature of the Web
service interaction.</p>
<ol>
<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>
<h3>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>
<h3>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>
<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>
<h2>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>
<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>
<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 href="http://ws.apache.org/commons/transport/">WS-Commons Transport</a>
project.</li>
</ol>
<a name="bmWSDL" id="bmWSDL"></a>
<h2>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" name=
"Graphic6" 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>
<h2>Data Binding</h2>
<h3>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><strong>The following diagram shows the structure:</strong></p>
<p><img src="images/codegen.gif" name="Graphic7" align="bottom"
border="0" id="Graphic7" /></p>
<p><strong>The following databinding extensions are
available:</strong></p>
<ol>
<li><strong>ADB</strong> - 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><strong>XMLBeans</strong> - XMLbeans claims that it supports
the complete schema specification, and it is preferred if full
schema support is needed!</li>
<li><strong>JAXB-RI</strong> - JAXB2 support has been added in a
similar manner to XMLbeans and serves as another option for the
user</li>
<li><strong>JibX</strong> - 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>
<h3>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 "echoString", once the code is generated, the
following methods will be generated inside the relevant
classes.</p>
<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>
</body>
</html>
