<!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 Advanced User's 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 http-equiv="content-type" content="" />      </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 Advanced User's 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>

<a name="a_Toc96697849" id="_Toc96697849"></a>


<h1 align="center">Apache Axis2 Advanced User's Guide</h1>


<p>This guide will help you get started with Axis2, the next generation of
Apache Axis! It gives a detailed description on how to write Web services and
Web service clients using Axis2, how to write custom modules, and how to use
them with a Web service. Advanced topics and samples that are shipped with
the binary distribution of Axis2 are also discussed.</p>
<a name="Introduction"></a>

<section>
<h2><a name="Introduction"></a>Introduction</h2>


<p>This user guide is written based on the Axis2 Standard Binary
Distribution. The Standard Binary Distribution can be directly <a href="../download.cgi">downloaded</a> or built using
the Source Distribution. If
you choose the latter, then the <a href="installationguide.html">Installation
Guide</a> will instruct you on how to build Axis2 Standard Binary
Distribution using the source.</p>


<p>Please note that Axis2 is an open-source effort. If you feel the code
could use some new features or fixes, please get involved and lend us a hand!
The Axis developer community welcomes your participation.</p>


<p>Let us know what you think! Send your feedback to &quot;<a class="externalLink" href="mailto:java-user@axis.apache.org?subject=[Axis2]">java-user@axis.apache.org</a>&quot;.
(Subscription details are available on the <a href="../mail-lists.html">Axis2 site</a>.) Kindly
prefix the subject of the mail with [Axis2].</p>

<section>
<h2><a name="Getting_Started"></a>Getting Started</h2>


<p>The first two sections of the user guide explain how to write and deploy a
new Web Service using Axis2, and how to write a Web Service client using
Axis2. The next section - <a href="#config"> Configuring Axis2</a> - provides
an introduction to important configuration options in Axis2. The final
section - <a href="#advanced">Advanced Topics</a> - provides references to
other features.</p>


<p>In this (first) section, we will learn how to write and deploy Web
services using Axis2. All the samples mentioned in this guide are located in
the <b>&quot;samples/userguide/src&quot;</b> directory of <a href="../download.cgi">Axis2 standard binary
distribution</a>.</p>


<p>Please deploy axis2.war in your servlet container and ensure that it works
fine. The <a href="installationguide.html">Installation
Guide</a> gives you step-by-step instructions on just how to build axis2.war
and deploy it in your servlet container.</p>
<a name="ws_codegen"></a><a name="Web_Services_Using_Axis2"></a>

<section>
<h2><a name="Creating_a_New_Web_Service"></a>Creating a New Web Service</h2>


<p>If you are interested in how to write a Web Service client using Axis2, it
is described under <a href="#client">Writing a Web Service Client</a>. Axis2
provides two ways to create new Web Services, using <b>code
generation</b> and using <b>XML based primary APIs</b>. The
following section explains how to start from a WSDL, and create a new service
with code generation. For the XML based primary API, please refer to the
section <a href="xmlbased-server.html">Writing Web Services Using Axis2's
Primary APIs</a> for more information. However, if you are a new user, it is
better to follow the code generation approach first (given below)</p>

<section>
<h3><a name="Starting_with_WSDL.2C_Creating_and_Deploying_a_Service"></a>Starting with WSDL, Creating and Deploying a Service</h3>


<p>We start with a WSDL, however if you do not have a WSDL and need to create
a WSDL from a java class, please use the <a href="reference.html#wsdl2java">Java2WSDL tool</a> to create the WSDL. As you
might already know, a WSDL description of a service provides a precise
definition of that web service. Axis2 can process the WSDL and generate java
code that does most of the work for you. At the server side, we call them
Skeletons, and at the client side, Stubs.</p>
This method of writing a Web service with Axis2 involves four steps:

<ol style="list-style-type: decimal">
  
<li>Generate the skeleton code.</li>
  
<li>Add business logic.</li>
  
<li>Create a *.aar archive (Axis Archive) for the Web service.</li>
  
<li>Deploy the Web service.</li>
</ol>
<a name="Step1_:Generate_skeleton"></a>

</section><section>
<h3><a name="Step1:_Generate_Skeleton_Code"></a>Step1: Generate Skeleton Code</h3>


<p>To generate the skeleton and required classes, you can use the WSDL2Java
tool provided in Axis2. This tool is located in the bin directory of the
distribution and can be executed using the provided scripts (.bat or .sh).
The tool's parameter list can be found in the <a href="reference.html#wsdl2code">Axis2 Reference Document</a>.</p>


<p>The parameters for the wsdl2java tool in our example are as follows.
Please note that, for this example, we are using xmlbeans as the data binding framework, and the generated
code will be placed in a &quot;samples&quot; directory. </p>

<div>
<pre>wsdl2java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans 
-o ../samples -p org.apache.axis2.userguide</pre></div>


<p>This will generate the required classes in the <b>&quot;sample/src&quot;</b>
directory, and the schema classes in the
<b>&quot;samples/resources/schemaorg_apache_xmlbeans&quot;</b>
directory<b></b>. Note that these are not source files and should
be available in the class path in order to compile the generated classes.</p>
<a name="Step2_Implement_Business_Logic"></a>

</section><section>
<h3><a name="Step_2:_Implement_Business_Logic"></a>Step 2: Implement Business Logic</h3>


<p>Now you should fill the business logic in the skeleton class. You can find
the skeleton class -Axis2SampleDocLitServiceSkeleton.java- among the
generated classes in the
<b>&quot;samples/src/org/apache/axis2/userguide</b> directory. Let's
fill the <code>echoString(..)</code> method in the skeleton as shown below.
Our sample WSDL-Axis2SampleDocLit.wsdl in <b>&quot;samples/wsdl&quot;</b>
directory has three operations: echoString, echoStringArray, echoStruct. To
see how the others will look when they are filled up, see <a href="src/Axis2SampleDocLitServiceCode.html">Code Listing For
Axis2SampleDocLitService Service</a></p>

<div>
<pre>public org.apache.axis2.userguide.xsd.EchoStringReturnDocument 
    echoString(org.apache.axis2.userguide.xsd.EchoStringParamDocument param4) throws Exception {
    //Use the factory to create the output document.
    org.apache.axis2.userguide.xsd.EchoStringReturnDocument retDoc = 
           org.apache.axis2.userguide.xsd.EchoStringReturnDocument.Factory.newInstance();
    //send the string back.
    retDoc.setEchoStringReturn(param4.getEchoStringParam());
   return retDoc;</pre></div>
<a name="Step4_Create_archive"></a>

</section><section>
<h3><a name="Step_3:_Create_Archive_File"></a>Step 3: Create Archive File</h3>


<p>An Axis2 service must be bundled as a service archive. The next step is to
package the classes in an .aar (axis2 archive) and deploy it in Axis2. There
is an ant file generated with the code; it will generate the Axis2 service
archive for you. However, if you do not want to use ant, you can create an
archive with the following steps :</p>

<ol style="list-style-type: decimal">
  
<li>Compile the generated code.</li>
  
<li>Copy <b>&quot;resources/schemaorg_apache_xmlbeans</b>&quot; xmlbeans
    classes to your class folder.</li>
  
<li>Among the generated files, there will be a services.xml file, which is
    the deployment descriptor for Axis2 service.[<a href="reference.html#servicedd">learn more about it</a>]. Copy the
    resources/service.xml to META-INF/services.xml</li>

  
<p>(To write your own service.xml file, see the sub section in <a href="xmlbased-server.html#Step2_:Write_the_services_xml_file">Writing Web
  Services Using Axis2's Primary APIs</a> )</p>
  
<li>Create the archive using content of the class folder. Change the
    directory to the class folder and run <code>jar -cf
    &lt;service-name&gt;.aar</code> to create the archive.</li>
</ol>


<p>Once the archive is created, the content of the JAR should look like
this:</p>


<p><img src="images/userguide/DirectoryStructure.jpg" align="bottom" border="0" alt="" /></p>
<a name="Step5_Deploy_web_service"></a>

</section><section>
<h3><a name="Step_4:_Deploy_Web_Service"></a>Step 4: Deploy Web Service</h3>


<p>The service can be deployed by simply dropping the &quot;.aar&quot; file into the
&quot;services&quot; directory in &quot;/webapps/axis2/WEB-INF&quot; of your servlet container.
We recommend using <a class="externalLink" href="http://tomcat.apache.org/">Apache Tomcat</a> as
the servlet container. <b>Please Note that the services directory is
available only after axis2.war has been exploded by Tomcat. However, the easiest
way to do it is to start Tomcat after axis2.war is copied to the webapps
directory</b> (if you have not already started it). Check the &quot;Services&quot;
link on the <a class="externalLink" href="http://localhost:8080/axis2/">Home page
of Axis2 Web Application</a> (http://localhost:8080/axis2) and see whether
the Axis2SampleDocLitService is displayed under the deployed services.</p>


<p>We recommend using the exploded configuration to deploy Axis2 WAR in
<b>WebLogic and WebSphere</b> application servers to support the
hotupdate/hotdeployment features of Axis2. See <a href="app_server.html#weblogic_websphere">Application Server Specific
Configuration Guide</a> for details.</p>


<p>Note: Axis2 provides an easy way to deploy Web Services using the &quot;Upload
Service&quot; tool in the Axis2 Web Application's Administration module. (See the
<a href="webadminguide.html">Web Administration Guide</a> for
more information)</p>
<a name="client"></a>

</section><section>
<h2><a name="Writing_a_Web_Service_Client"></a>Writing a Web Service Client</h2>


<p>Axis2 also provides a more complex, yet powerful XML based client API
which is intended for advanced users. Read <a href="dii.html">Writing Web
Service Clients Using Axis2's Primary APIs</a> to learn more about it.
However, if you are a new user, we recommend using the <b>code
generation</b> approach presented below.</p>

<section>
<h3><a name="Generate_Stubs"></a>Generate Stubs</h3>


<p>Let's see how we could generate java code (Stub) to handle the client side
Web Service invocation for you. This can be done by running the WSDL2Java
tool using the following arguments</p>

<div>
<pre>wsdl2java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -d xmlbeans 
     -o ../samples/src -p org.apache.axis2.userguide</pre></div>

<p>This will generate client side stubs and xmlbeans types for your types.
The Stub class that you need to use will be of the form
<b>&lt;service-name&gt;Stub</b>. In our example, it will be called
&quot;Axis2SampleDocLitServiceStub.java&quot;</p>


<p>Axis2 clients can invoke Web Services both in a blocking and non-blocking
manner. In a blocking invocation, the client waits till the service performs
its task without proceeding to the next step. Normally, the client waits till
the response to its particular request arrives. In a non-blocking invocation,
the client proceeds to the next step immediately, and the responses (if any)
are handled using a Callback mechanism. Please note that some explanations
use the terms Synchronous and Asynchronous to describe the similar invocation
strategies.</p>

</section><section>
<h3><a name="Do_a_Blocking_Invocation"></a>Do a Blocking Invocation</h3>


<p>The following code fragment shows the necessary code calling
<code>echoString</code> operation of the
<code>Axis2SampleDocLitService</code> that we have already deployed. The code
is extremely simple to understand and the explanations are in the form of
comments.</p>

<div>
<pre>     try {
               org.apache.axis2.userguide.Axis2SampleDocLitServiceStub stub 
                  = new org.apache.axis2.userguide.Axis2SampleDocLitServiceStub(null,
                    &quot;http://localhost:8080/axis2/services/Axis2SampleDocLitService&quot;);
                //Create the request document to be sent.
                org.apache.axis2.userguide.xsd.EchoStringParamDocument reqDoc =
                org.apache.axis2.userguide.xsd.EchoStringParamDocument.Factory.newInstance();
                reqDoc.setEchoStringParam(&quot;Axis2 Echo&quot;);
                //invokes the Web service.
                org.apache.axis2.userguide.xsd.EchoStringReturnDocument resDoc = 
                stub.echoString(reqDoc);
                System.out.println(resDoc.getEchoStringReturn());
               } catch (java.rmi.RemoteException e) {
                  e.printStackTrace();
              }</pre></div>

<p>First argument of <code>Axis2SampleDocLitPortTypeStub</code> should be the
Axis2 repository for the client. Here we use null to make the stub use
default configurations. However, you can make Axis2 use your own repository
by providing it here. You can find more information about this from the <a href="#config">Axis2 Configuration section</a>. You can find code to invoke
other operations from <a href="src/Axis2SampleDocLitServiceCode.html">Code
Listing For Axis2SampleDocLitService Service</a></p>

</section><section>
<h3><a name="Do_a_Non-Blocking_Invocation"></a>Do a Non-Blocking Invocation</h3>


<p>The stubs also include a method that allows you to do a non-blocking
innovation. For each method in the Service, there will be a method
<b>start&lt;method-name&gt;</b>. These methods accept a callback
object, which would be called when the response is received. Sample code that
does an asynchronous interaction is given below.</p>

<div>
<pre>try {
         org.apache.axis2.userguide.Axis2SampleDocLitServiceStub stub
           = new org.apache.axis2.userguide.Axis2SampleDocLitServiceStub(null,
             &quot;http://localhost:8080/axis2/services/Axis2SampleDocLitService&quot;);
             //implementing the callback online
            org.apache.axis2.userguide.Axis2SampleDocLitServiceCallbackHandler callback =
            new org.apache.axis2.userguide.Axis2SampleDocLitServiceCallbackHandler() {
                    public void receiveResultechoString(
                      org.apache.axis2.userguide.xsd.EchoStringReturnDocument resDoc) {
                       System.out.println(resDoc.getEchoStringReturn());
                       }
            };
        org.apache.axis2.userguide.xsd.EchoStringParamDocument reqDoc = 
          org.apache.axis2.userguide.xsd.EchoStringParamDocument.Factory.newInstance();
           reqDoc.setEchoStringParam(&quot;Axis2 Echo&quot;);
           stub.startechoString(reqDoc, callback);
        } catch (java.rmi.RemoteException e) {
          e.printStackTrace();
       }</pre></div>

<p>Even though the above code does a non-blocking invocation at the client
API, the transport connection may still operate in a blocking fashion. For
example, a single HTTP connection can be used to create a Web Service request
and to get the response when a blocking invocation happens at the transport
level. To perform a &quot;true&quot; non-blocking invocation in which two separate
transport connections are used for the request and the response, please add
the following code segment after creating the stub. It will force Axis2 to
use two transport connections for the request and the response while the
client uses a Callback to process the response.</p>

<div>
<pre>stub._getServiceClient().engageModule(new QName(&quot;addressing&quot;));
stub._getServiceClient().getOptions().setUseSeparateListener(true);</pre></div>

<p>Once those options are set, Axis2 client does the following:</p>

<ol style="list-style-type: decimal">
  
<li>Starts a new Transport Listener(Server) at the client side.</li>
  
<li>Sets the address of the Transport Listener, as the ReplyTo
    WS-Addressing Header of the request message</li>
  
<li>According to the WS-Addressing rules, the Server will process the
    request message and send the response back to the ReplyTo address.</li>
  
<li>Client accepts the response, processes it and invokes the callback with
    the response parameters.</li>
</ol>

</section><section>
<h3><a name="Using_Your_Own_Repository"></a>Using Your Own Repository</h3>


<p>You can also use your own repository with an Axis2 Client.  The code below shows how
to do this.</p>

<div>
<pre>String axis2Repo = ...
String axis2xml = ...
ConfigurationContext configContext =
ConfigurationContextFactory.createConfigurationContextFromFileSystem(axis2Repo, axis2xml);
Service1Stub stub1 = new Service1Stub(configContext,...);
//invoke Service1
Service2Stub stub2 = new Service2Stub(configContext,...);
//invoke Service2</pre></div>

<p>Note by creating the <code>ConfigurationContext</code> outside and passing
it to the stubs, you could make number of stubs to use same repository, thus
saving the configuration loading overhead from each request.</p>
<a name="config"></a>

</section><section>
<h2><a name="Configuring_Axis2"></a>Configuring Axis2</h2>

<section>
<h3><a name="Axis2_Repository"></a>Axis2 Repository</h3>


<p>Axis2 configuration is based on a repository and standard archive format.
A repository is a directory in the file system, and it should have the
following:</p>

<ol style="list-style-type: decimal">
  
<li><b>axis2.xml</b>, the Axis2 global deployment descriptor in
    conf/axis2.xml file</li>
  
<li><b>services</b> directory, which will have the service
    archives</li>
  
<li><b>modules</b> directory (optional), which will have the
    module archives</li>
</ol>


<p>Both services and modules will be identified and deployed once their
archives are copied to the corresponding directories. At the server side,
users should specify the repository folder at the time of starting the Axis2
Server (e.g. HTTP or TCP). In Tomcat, <code>webapps/axis2/WEB-INF</code>
folder acts as the repository. At the client side, binary distribution can
itself be a repository. You can copy the conf directory which includes the
axis2.xml file from the exploded axis2.war and edit it to change the global
configurations repository.</p>

</section><section>
<h3><a name="Global_Configurations"></a>Global Configurations</h3>


<p>The Global configuration can be changed by editing the axis2.xml file,
refer to the <a href="axis2config.html#Global_Configuration">Axis2
Configuration Guide</a> for more information.</p>

</section><section>
<h3><a name="Add_New_Services"></a>Add New Services</h3>


<p>New services can be written either using WSDL based code generation as we
did, or from scratch as explained in <a href="xmlbased-server.html">Writing
Web Services Using Axis2's Primary APIs</a>.  Read <a href="xmlbased-server.html">Creating a Service from Scratch</a> for more
information. Also refer to <a href="axis2config.html#Service_Configuration">Axis2 Configuration Guide</a>
for a reference on <b>services.xml</b> file.</p>

</section><section>
<h3><a name="Engaging_Modules"></a>Engaging Modules</h3>


<p>Each module(.mar file) provides extensions to Axis2. A module can be
deployed by copying it to the modules directory in the repository. Then it
becomes available and can be engaged at a global, service or operation scope.
Once engaged, it becomes active (adds handlers to the execution flow) at the
respective scope. Please refer to <a href="Axis2ArchitectureGuide.html">Axis2
architecture guide</a> for detailed explanation. The following table explains
the semantics of scope, and how to engage modules in those scopes.</p>


<table border="0" class="table table-striped">
  <tbody>
    
<tr class="a">
      
<th>Scope</th>
      
<th>Semantics</th>
      
<th>How to Engage</th>
    </tr>
    
<tr class="b">
      
<td>Global</td>
      
<td>Add handlers in the module to all the services. Addressing Handler
        can be only engaged as global</td>
      
<td>By adding a &lt;module ref=&quot;addressing&quot;/&gt; to the Axis2 xml file
        or calling
        <code>stub._getServiceClient().engageModule(moduleName)</code>
        at client side</td>
    </tr>
    
<tr class="a">
      
<td>Service</td>
      
<td>Add handlers in the module to a specific service</td>
      
<td>By adding a &lt;module ref=&quot;addressing&quot;/&gt; to a service.xml file
        in a service archive</td>
    </tr>
    
<tr class="b">
      
<td>Operation</td>
      
<td>Add handlers in the module to a specific operation</td>
      
<td>By adding a &lt;module ref=&quot;addressing&quot;/&gt; inside an operation
        tag of a service.xml file in a service archive</td>
    </tr>
  </tbody>
</table>


<p>* If a handler is added to a service or an operation, it will be invoked
for every request received by that service or operation</p>


<p>Axis2 provides a number of built in Modules (such as <a href="">addressing</a>,<a href="">Security</a>, <a href="">WS-Reliable
Messaging</a>), and they can be engaged as shown above. Please refer to each
module on how to use and configure them. You can also <a href="modules.html">create your own modules with Axis2</a>. Also refer to <a href="axis2config.html#Global_Configuration">Axis2 Configuration Guide</a>
for a reference on the module.xml file.</p>

</section><section>
<h3><a name="WS-Addressing_Support"></a>WS-Addressing Support</h3>


<p>WS-Addressing support for Axis2 is implemented by the addressing module.
To enable addressing, you need to engage the addressing module in both server
and client sides.</p>

<ol style="list-style-type: decimal">
  
<li>To <b>enable</b> addressing at the server side, you need to
    copy the addressing.mar file to the modules directory of the server's
    axis2 repository. To engage the module, add a &lt;module
    ref=&quot;addressing&quot;/&gt; to axis2.xml. The <b>Addressing module can be
    engaged only at global level.</b></li>
  
<li>To <b>enable</b> addressing at the client side, you should
    add it to the repository and provide the repository as an argument to the
    <a href="dii.html">ServiceClient</a> or <a href="#client">generated
    stub</a> or have it in your classpath.</li>
  
<li>To <b>engage</b> the addressing module, you should either add
    &lt;module ref=&quot;addressing&quot;/&gt; to the axis2.xml file at the client side
    or call
    <code>stub._getServiceClient().engageModule(moduleName)</code>
  </li>
</ol>
<a name="advanced"></a>

</section><section>
<h2><a name="Advanced_Topics"></a>Advanced Topics</h2>

<section>
<h3><a name="Transports"></a>Transports</h3>


<p>By default, Axis2 is configured to use HTTP as the transport. However,
Axis2 supports HTTP, SMTP, TCP and JMS transports. You can also write your
own transports, and deploy them by adding new transportReceiver or
transportSender tags to axis2.xml. To learn how to configure and use
different transports, please refer to the following documents.</p>

<ol style="list-style-type: decimal">
  
<li><a href="http-transport.html">HTTP Transports</a></li>
  
<li><a class="externalLink" href="http://ws.apache.org/commons/transport/">WS-Commons Transport project</a></li>
</ol>

</section><section>
<h3><a name="Attachments"></a>Attachments</h3>


<p>Axis2 provides attachment support using <a class="externalLink" href="http://www.w3.org/TR/soap12-mtom/">MTOM</a>. Please refer to <a href="mtom-guide.html">MTOM with Axis2</a> for more
information.</p>

</section><section>
<h3><a name="Security"></a>Security</h3>


<p>WS-Security support for Axis2 is provided by <a class="externalLink" href="http://axis.apache.org/axis2/java/rampart/">Apache Rampart</a>.</p>

</section><section>
<h3><a name="REST_Web_Service"></a>REST Web Service</h3>


<p>Please refer to <a href="rest-ws.html">RESTful Web
Services</a> for more information.</p>

</section><section>
<h3><a name="Pluggable_Data_Binding"></a>Pluggable Data Binding</h3>


<p>Axis2 ships with Axis Data Binding(ADB) as the default data binding
framework. However, data binding frameworks are pluggable to Axis2, and
therefore you can use other data binding frameworks with Axis2. Please refer
to the following documents for more information.</p>

<section>
<h4><a name="Axis2_Data_Binding.28ADB.29"></a>Axis2 Data Binding(ADB)</h4>

<ol style="list-style-type: decimal">
  
<li><a href="adb/adb-howto.html">Axis2 Databinding
    Framework</a></li>
  
<li><a href="adb/adb-codegen-integration.html">ADB
    Integration With Axis2</a></li>
  
<li><a href="adb/adb-advanced.html">Advanced Axis2 Databinding Framework
    Features</a></li>
  
<li><a href="adb/adb-tweaking.html">ADB Tweaking Guide</a></li>
</ol>

</section><section>
<h4><a name="JiBX"></a>JiBX</h4>
<a href="jibx/jibx-codegen-integration.html">JiBX Integration With Axis2</a>

</section></section><section>
<h3><a name="Other_Topics"></a>Other Topics</h3>

<ol style="list-style-type: decimal">
  
<li><a href="spring.html">Axis2 Integration With The Spring
    Framework</a></li>
  
<li><a href="WS_policy.html">Web Services Policy Support In
    Axis2</a></li>
  
<li><a href="axis2config.html#Global_Configuration">Axis2 Configuration
    Guide</a></li>
  
<li><a href="Axis2-rpc-support.html">Axis2 RPC Support</a></li>
  
<li><a href="migration.html">Migrating from Apache Axis 1.x to Axis
  2</a></li>
  
<li><a href="modules.html">Writing your Own Axis2 Module</a></li>
  
<li><a href="soapmonitor-module.html">Using the SOAP Monitor</a></li>
  
<li><a href="xmlbased-server.html">Writing Web Services Using Axis2's
    Primary APIs</a></li>
  
<li><a href="dii.html">Writing Web Service Clients Using Axis2's Primary
    APIs</a></li>
  
<li><a href="app_server.html">Application Server Specific Configuration
    Guide</a></li>
</ol>
</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>
