<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.11.1 at 2022-07-14 
 | 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="20220714" />
    <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: 2022-07-14<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.2<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.7.1.html" title="1.7.1"><span class="none"></span>1.7.1</a>  </li>
    <li><a href="../release-notes/1.7.2.html" title="1.7.2"><span class="none"></span>1.7.2</a>  </li>
    <li><a href="../release-notes/1.7.3.html" title="1.7.3"><span class="none"></span>1.7.3</a>  </li>
    <li><a href="../release-notes/1.7.4.html" title="1.7.4"><span class="none"></span>1.7.4</a>  </li>
    <li><a href="../release-notes/1.7.5.html" title="1.7.5"><span class="none"></span>1.7.5</a>  </li>
    <li><a href="../release-notes/1.7.6.html" title="1.7.6"><span class="none"></span>1.7.6</a>  </li>
    <li><a href="../release-notes/1.7.7.html" title="1.7.7"><span class="none"></span>1.7.7</a>  </li>
    <li><a href="../release-notes/1.7.8.html" title="1.7.8"><span class="none"></span>1.7.8</a>  </li>
    <li><a href="../release-notes/1.7.9.html" title="1.7.9"><span class="none"></span>1.7.9</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="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" 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 align="left">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 align="left">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 align="left">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;2022
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>