In Axis2 there are three kinds of configuration files to configure the system. First one configuration file is to configure whole system, second one is to configure a service and the third one is to configure a module.
All the configuration that requires starting axis2 is obtained from axis2.xml. The way of specifying them is very simple and easy. The document is all about the proper way of specifying the configurations in axis2.xml. There are six top level elements that can be seen in the configuration file and those can be listed as follows;
Parameter
In axis2 a parameter is nothing but name value pair, each and every top level
parameter available in the axis2.xml (direct sub elements of root element) will
be transformed into properties in AxisConfiguration. Therefore the top level
parameters in configuration document can be accessed via AxisConfiguration in
the running system. The correct way of defining a parameter looks like what is shown below;
Transport Receiver
Depending on the underline transport that axis going to be run ,
need to have different transport receivers so the way of adding
them to the system can be done as follows;
The above elements shows the way of defining transport receivers in axis2.xml ,
here name attribute of the 'transportReceiver' element is the name of transport
it can be http, tcp , smtp , commonshttp stc , and when the system starts up or
when setting transport at the client side one can use these transport names to
load the appropriate transport. Class attribute is to specify actual java
class which implements required interfaces for the transport. Any transport
can have zero or more parameters, and if there are any, then those parameters
can be accessed via the corresponding transport receiver.
Transport Senders
As same as transport receivers it is possible to register transport senders in the
system, and latter at the run time those senders can be used to send the messages.
As an example consider Axis2 running under tomcat, then axis can use TCP transport
senders to send message rather than HTTP. The way of specifying transport senders is as follows:
name: Name of the transport (it is possible to have http and http1 as transport name)
Class: Implementation class of the corresponding transport.
As same as transport receivers, transport senders can have zero or more parameters,
and if there is any then it can be accessed via corresponding transport sender.
Phase Order
The specifying order of phases in execution chain has to be done using phase
order element and it will be look like below;
The most interesting thing is that you can add handlers here as well , if you want to add a handler which should go in to that phase you can directly do that by adding a handler element into it . In addition to that there is no any hard coding stuffs for handler chain in anywhere in Axis2 (at any Axis*) , so all theose configuration are alos done here in phase order element. The complete configuration will look like as follows;
type: the attribute represent type of the flow and which can only be one of the following
In addition to that only child element allowed inside pahseOrder is phase
element, which represents available phases in the execution chain.
The way of specifying phase inside phaseOrder has to be done as follows;
name: Name of the phase.
There are number of things that one has to keep in mind when changing pahseOrder,
Module References
If you want to engage a module system wide you can do it by adding top
level module element in axis2.xml. It should be look like following:
ref: the module name which is going to be engage, system wide.
Listeners (Observers)
In Axis2 AxisConfiguration is observable so that one can register observers into
that, and they will be automatically informed whenever a change occurs in
AxisConfiuration. In the current implementation the observers are informed of the following events
The description of service is specified using services.xml, each service archive
file need to have services.xml in order to be a valid service. And which has to be
available in META-INF directory of the archive file.
A very simple services.xml is shown below:
service name: the service name will be the name of the archive file.
description: This is an optional element if you want to display any description
about the service via Axis2 web-admin module then the description can be specified here.
Parameter:
service.xml can have any number of top level parameters and all the specified
parameters will be transformed into service properties in corresponding ServiceDescrption.
There is a compulsory parameter in a service.xml called ServiceClass which specify the
java class which really does the job and the class will be loaded by MessageReceiver.
Handler
Handler element consists of compulsory and optional attribute and the way of defining a handler will be look like follows;
Compulsory attributes
name: name of the handler
nlass: handler implementation class
phase: name of the phase that the handler should stay in the execution chain
Optional attributes :
phaseLast: to indicate the handler is last handler of the phase
phaseFirst: to indicate the handler is first handler of the phase.
before : the handler should be invoked before the handler specified by before handler
after: the handler should be invoked after the handler specified by after handler
Operations
All the operations you are going to exposeby the service has to be indicated in the service.xml and the correct way of specifying that should be as follows:
Only compulsory attribute here is name, which represent the operation name that is going to be exposed. Any operation can contains module references, any number of parameters. The most interesting is that one can register custom message receiver per operation, then the registered message receiver will be the message receiver for the corresponding operation. If one does not specify the message receiver then the default message receiver will do the job.
The description of module is specified using module.xml, each module archive file need to have module.xml in order to be a valid module. And which has to be available in META-INF directory of the archive file.
A very simple module.xml is shown below:
name: This is a compulsory attribute and which indicates the name of the module
class: This is an optional attribute which indicate module implementation class, a module may or may not contain module implementation class since the module can also be a collection of handlers. If a module contains an implementation class which implements the org.apache.axis2.modules.Module inteface where at the deployment time its init(); method will be called.
parameter: Module can contains any number of parameters and all the listed parameters in the module.xml will be transformed into corresponding ModuleDescription of the module.
Flow :operations If a module wants to add an operation when it is engaged into a service it can be done by adding operation tag in module.xml and the way of specifying the operation is same as operation in service.xml.