<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2016-05-02 
 | Rendered using Apache Maven Fluido Skin 1.4
-->
<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="20160502" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Writing your Own Axis2 Module</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.4.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.4.min.js"></script>

    
    <meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="" />              </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: 2016-05-02
                      <span class="divider">|</span>
                   </li>
                  <li id="projectVersion">Version: 1.7.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 ">Writing your Own Axis2 Module</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>
              </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="../svn.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" >
                                  
            <!-- ~ 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. --><html xmlns="http://www.w3.org/1999/xhtml">

<a name="Modules" id="Modules"></a>

<h1>Writing Your Own Axis2 Module</h1>

<p>Axis2 provides extended support for modules (See the <a href="Axis2ArchitectureGuide.html">Architecture
Guide</a> for more details about modules in Axis2). Let's create a
custom module and deploy it to MyService, which we created
earlier.</p>

<p>Send your feedback or questions to: <a class="externalLink" href="mailto:java-dev@axis.apache.org?subject=[Axis2]">java-dev@axis.apache.org</a>.
( Subscription details are available on the <a href="../mail-lists.html">Axis2 site</a>.)
Kindly prefix subject with [Axis2].</p>

<div class="section">
<h2><a name="Content_List"></a>Content List</h2>

<ul>

<li><a href="#MyService_with_a_Logging_Module">MyService with a
Logging Module</a>

<ul>

<li><a href="#Step1_:_LoggingModule_Class">Step1 : LoggingModule
Class</a></li>

<li><a href="#Step2_:_LogHandler">Step2 : LogHandler</a></li>

<li><a href="#Step3_:_module_xml">Step3 : module.xml</a></li>

<li><a href="#Step_4:_Modify_the_axis2_xml">Step4:
Modify the &quot;axis2.xml&quot;</a></li>

<li><a href="#Step5_:_Modify_the_services_xml">Step5 :
Modify the &quot;services.xml</a></li>

<li><a href="#Step6_:_Packaging">Step6 : Packaging</a></li>

<li><a href="#Step7_:_Deploy_the_Module_in_Axis2">Step7 : Deploy
the Module in Axis2</a></li>
</ul>
</li>
</ul>

<p>The following steps show the actions that need to be performed
to deploy a custom module for a given Web service:</p>

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

<li>

<p style="margin-bottom: 0in">Create the Module Implementation</p>
</li>

<li>

<p style="margin-bottom: 0in">Create the Handlers</p>
</li>

<li>

<p style="margin-bottom: 0in">Create the module.xml</p>
</li>

<li>

<p style="margin-bottom: 0in">Modify the &quot;axis2.xml&quot; (if you need
custom phases)</p>
</li>

<li>

<p style="margin-bottom: 0in">Modify the &quot;services.xml&quot; to engage
modules at the deployment time.</p>
</li>

<li>

<p style="margin-bottom: 0in">Package in a &quot;.mar&quot; (Module
Archive)</p>
</li>

<li>

<p>Deploy the module in Axis2</p>
</li>
</ol>
<a name="MyService_with_a_Logging_Module" id="MyService_with_a_Logging_Module"></a>

<div class="section">
<h3><a name="MyService_with_a_Logging_Module"></a>MyService with a Logging Module</h3>

<p>Let's write a simple logging module for our sample located at
the <b>&quot;samples\userguide\src&quot;</b> directory of the binary
distribution. This module contains one handler that just logs the
message that is passed through it. Axis2 uses &quot;.mar&quot; (Module
Archive) to deploy modules in Axis2. The following diagram shows
the file structure inside which needs to be there in the &quot;.mar&quot;
archive. Let's create all these and see how it works.</p>

<p><img src="images/userguide/ModuleView.jpg" align="bottom" border="0" id="Graphic5" alt="" /></p>
<a name="Step1_:_LoggingModule_Class" id="Step1_:_LoggingModule_Class"></a>

<div class="section">
<h4><a name="Step1_:_LoggingModule_Class"></a>Step1 : LoggingModule Class</h4>

<p>LoggingModule is the implementation class of the Axis2 module.
Axis2 modules should implement the &quot;<a class="externalLink" href="http://svn.apache.org/viewcvs.cgi/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/modules/Module.java?rev=396785&amp;view=log">org.apache.axis2.modules.Module</a>&quot;
interface with the following methods.</p>

<div>
<pre>
public void init(ConfigurationContext configContext, AxisModule module) throws AxisFault;//Initialize the module
public void shutdown(ConfigurationContext configurationContext) throws AxisFault;//End of module processing
public void engageNotify(AxisDescription axisDescription) throws AxisFault;
public void applyPolicy(Policy policy, AxisDescription axisDescription) throws AxisFault ;
public boolean canSupportAssertion(Assertion assertion) ;
</pre></div>

<p>The first three methods can be used to control the module
initialization and the termination, and the next three methods are
used to perform policy related operations. With the input parameter
AxisConfiguration, the user is provided with the complete
configuration hierarchy. This can be used to fine-tune the module
behavior by the module writers. For a simple logging service, we
can keep these methods blank in our implementation class.</p>
<a name="Step2_:_LogHandler" id="Step2_:_LogHandler"></a>
</div>
<div class="section">
<h4><a name="Step2_:_LogHandler"></a>Step2 : LogHandler</h4>

<p>A module in Axis2 can contain, one or more handlers that perform
various SOAP header processing at different phases. (See the
<a href="Axis2ArchitectureGuide.html#incomingsoap">Architecture Guide</a> for more information on phases). To
write a handler one should implement <a class="externalLink" href="http://svn.apache.org/viewcvs.cgi/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/engine/Handler.java?rev=357187&amp;view=log">
org.apache.axis2.engine.Handler</a>. But for convenience, <a class="externalLink" href="http://svn.apache.org/viewcvs.cgi/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/handlers/AbstractHandler.java?rev=396788&amp;view=log">
org.apache.axis2.handlers.AbstractHandler</a> provides an abstract
implementation of the Handler interface.</p>

<p>For the logging module, we will write a handler with the
following methods. &quot;public void invoke(MessageContext ctx);&quot; is the
method that is called by the Axis2 engine when the control is
passed to the handler. &quot;public void revoke(MessageContext ctx);&quot; is
called when the handlers are revoked by the Axis2 engine.</p>

<div>
<pre>
public class LogHandler extends AbstractHandler implements Handler {
    private static final Log log = LogFactory.getLog(LogHandler.class);
    private String name;

    public String getName() {
        return name;
    }

    public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
        log.info(msgContext.getEnvelope().toString());
        return InvocationResponse.CONTINUE;        
    }

    public void revoke(MessageContext msgContext) {
        log.info(msgContext.getEnvelope().toString());
    }

    public void setName(String name) {
        this.name = name;
    }
}
</pre></div>
<a name="Step3_:_module_xml" id="Step3_:_module_xml"></a>
</div>
<div class="section">
<h4><a name="Step3_:_module.xml"></a>Step3 : module.xml</h4>

<p>&quot;module.xml&quot; contains the deployment configurations for a
particular module. It contains details such as the Implementation
class of the module (in this example it is the &quot;LoggingModule&quot;
class and various handlers that will run in different phases). The
&quot;module.xml&quot; for the logging module will be as follows:</p>

<div>
<pre>
&lt;module name=&quot;logging&quot; class=&quot;userguide.loggingmodule.LoggingModule&quot;&gt;
   &lt;InFlow&gt;
        &lt;handler name=&quot;InFlowLogHandler&quot; class=&quot;userguide.loggingmodule.LogHandler&quot;&gt;
        &lt;order phase=&quot;loggingPhase&quot; /&gt;
        &lt;/handler&gt;
   &lt;/InFlow&gt;

   &lt;OutFlow&gt;
        &lt;handler name=&quot;OutFlowLogHandler&quot; class=&quot;userguide.loggingmodule.LogHandler&quot;&gt;
        &lt;order phase=&quot;loggingPhase&quot;/&gt;
        &lt;/handler&gt;
   &lt;/OutFlow&gt;

   &lt;OutFaultFlow&gt;
        &lt;handler name=&quot;FaultOutFlowLogHandler&quot; class=&quot;userguide.loggingmodule.LogHandler&quot;&gt;
        &lt;order phase=&quot;loggingPhase&quot;/&gt;
        &lt;/handler&gt;
   &lt;/OutFaultFlow&gt;

   &lt;InFaultFlow&gt;
        &lt;handler name=&quot;FaultInFlowLogHandler&quot; class=&quot;userguide.loggingmodule.LogHandler&quot;&gt;
        &lt;order phase=&quot;loggingPhase&quot;/&gt;
        &lt;/handler&gt;
   &lt;/InFaultFlow&gt;
&lt;/module&gt;
</pre></div>

<p>As you can see, there are four flows defined in the
&quot;module.xml&quot;</p>

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

<li>InFlow Represents the handler chain that will run when a
message is coming in.</li>

<li>

<p style="margin-bottom: 0in">OutFlow Represents the handler chain
that will run when the message is going out.</p>
</li>

<li>

<p style="margin-bottom: 0in">OutFaultFlow - Represents the handler
chain that will run when there is a fault, and the fault is going
out.</p>
</li>

<li>

<p>InFaultFlow - Represents the handler chain that will run when
there is a fault, and the fault is coming in.</p>
</li>
</ol>

<p>The following set of tags describe the name of the handler,
handler class, and the phase in which this handler is going to run.
&quot;InFlowLogHandler&quot; is the name given for the particular instance of
this handler class. The value of the class attribute is the actual
implementation class for this handler. Since we are writing a
logging handler, we can reuse the same handler in all these phases.
However, this may not be the same for all the modules. &quot;&lt;order
phase=&quot;loggingPhase&quot; /&gt;&quot; describes the phase in which this
handler runs.</p>

<div>
<pre>
&lt;handler name=&quot;InFlowLogHandler&quot; class=&quot;userguide.loggingmodule.LogHandler&quot;&gt;
&lt;order phase=&quot;loggingPhase&quot; /&gt;
&lt;/handler&gt;
</pre></div>

<p>To learn more about Phase rules, check out the article <a class="externalLink" href="http://www.developer.com/java/web/article.php/3529321">Axis2 Execution Framework</a></p>
<a name="Step_4:_Modify_the_axis2_xml"></a>
</div>
<div class="section">
<h4><a name="Step_4:_Modify_the_axis2.xml"></a>Step 4: Modify the &quot;axis2.xml&quot;</h4>

<p>In this handler, the &quot;loggingPhase&quot;, is defined by the module
writer. It is not a pre-defined handler phase, hence the module
writer should introduce it to the &quot;axis2.xml&quot; (NOT the
services.xml) so that the Axis2 engine knows where to place the
handler in different &quot;flows&quot; (inFlow, outFlow, etc.). The following
XML lines show the respective changes made to the &quot;axis2.xml&quot; in
order to deploy the logging module in the Axis2 engine. This is an
extract of the phase section of &quot;axis2.xml&quot;.</p>

<div>
<pre>
&lt;!-- ================================================= --&gt;
&lt;!-- Phases --&gt;
&lt;!-- ================================================= --&gt;

&lt;phaseOrder type=&quot;inflow&quot;&gt;
        &lt;!--  System pre defined phases       --&gt;
        &lt;phase name=&quot;TransportIn&quot;/&gt;
        &lt;phase name=&quot;PreDispatch&quot;/&gt;
        &lt;phase name=&quot;Dispatch&quot; class=&quot;org.apache.axis2.engine.DispatchPhase&quot;&gt;
            &lt;handler name=&quot;AddressingBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.AddressingBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;

            &lt;handler name=&quot;RequestURIBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.RequestURIBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;

            &lt;handler name=&quot;SOAPActionBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.SOAPActionBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;

            &lt;handler name=&quot;SOAPMessageBodyBasedDispatcher&quot;
                     class=&quot;org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher&quot;&gt;
                &lt;order phase=&quot;Dispatch&quot;/&gt;
            &lt;/handler&gt;
            &lt;handler name=&quot;InstanceDispatcher&quot;
                     class=&quot;org.apache.axis2.engine.InstanceDispatcher&quot;&gt;
                &lt;order phase=&quot;PostDispatch&quot;/&gt;
            &lt;/handler&gt;
        &lt;/phase&gt;
        &lt;!--  System pre defined phases       --&gt;
        &lt;!--   After Postdispatch phase module author or service author can add any phase he wants      --&gt;
        &lt;phase name=&quot;OperationInPhase&quot;/&gt;
                &lt;phase name=&quot;<span style="color: rgb(36, 193, 19);">loggingPhase</span>&quot;/&gt;
    &lt;/phaseOrder&gt;
    &lt;phaseOrder type=&quot;outflow&quot;&gt;
        &lt;!--      user can add his own phases to this area  --&gt;
        &lt;phase name=&quot;OperationOutPhase&quot;/&gt;
        &lt;phase name=&quot;<span style="color: rgb(36, 193, 19);">loggingPhase</span>&quot;/&gt;
        &lt;!--system predefined phases--&gt;
        &lt;!--these phases will run irrespective of the service--&gt;
        &lt;phase name=&quot;PolicyDetermination&quot;/&gt;
        &lt;phase name=&quot;MessageOut&quot;/&gt;
    &lt;/phaseOrder/&gt;
    &lt;phaseOrder type=&quot;INfaultflow&quot;&gt;
        &lt;!--      user can add his own phases to this area  --&gt;
        &lt;phase name=&quot;OperationInFaultPhase&quot;/&gt;
        &lt;phase name=&quot;<span style="color: rgb(36, 193, 19);">loggingPhase</span>&quot;/&gt;
    &lt;/phaseOrder&gt;
    &lt;phaseOrder type=&quot;Outfaultflow&quot;&gt;
        &lt;!--      user can add his own phases to this area  --&gt;
        &lt;phase name=&quot;OperationOutFaultPhase&quot;/&gt;
        &lt;phase name=&quot;<span style="color: rgb(36, 193, 19);">loggingPhase</span>&quot;/&gt;
        &lt;phase name=&quot;PolicyDetermination&quot;/&gt;
        &lt;phase name=&quot;MessageOut&quot;/&gt;
    &lt;/phaseOrder&gt;
    
</pre></div>

<p>The text in green, the custom phase &quot;loggingPhase&quot; is placed in
all the flows, hence that phase will be called in all the message
flows in the engine. Since our module is associated with this
phase, the LogHandler inside the module will now be executed in
this phase.</p>
<a name="Step5_:_Modify_the_services_xml"></a>
</div>
<div class="section">
<h4><a name="Step5_:_Modify_the_services.xml"></a>Step5 : Modify the &quot;services.xml&quot;</h4>

<p>Up to this point, we have created the required classes and
configuration descriptions for the logging module, and by changing
the &quot;axis2.xml&quot; we created the required phases for the logging
module.</p>

<p>Next step is to &quot;<b>engage</b>&quot; (use) this module in one of our
services. For this, let's use the same Web service that we have
used throughout the user's guide- MyService. However, since we need
to modify the &quot;services.xml&quot; of MyService in order to engage this
module, we use a separate Web service, but with similar
operations.</p>

<p>The code for this service can be found in the
&quot;<b>Axis2_HOME/samples/userguide/src/userguide/example2</b>&quot;
directory. The simple changes that we have done to &quot;services.xml'
are shown in green in the following lines of xml.</p>

<div>
<pre>
&lt;service name=&quot;<span style="color: rgb(36, 193, 19);">MyServiceWithModule</span>&quot;&gt;
    &lt;description&gt;
    This is a sample Web service with a logging module engaged.
    &lt;/description&gt;
    <span style="color: rgb(36, 193, 19);">&lt;module ref=&quot;logging&quot;/&gt;</span>
    &lt;parameter name=&quot;ServiceClass&quot; locked=&quot;xsd:false&quot;&gt;userguide.example2.MyService&lt;/parameter&gt;
    &lt;operation name=&quot;echo&quot;&gt;
    &lt;messageReceiver class=&quot;org.apache.axis2.receivers.RawXMLINOutMessageReceiver&quot;/&gt;
    &lt;/operation&gt;
    &lt;operation name=&quot;ping&quot;&gt;
    &lt;messageReceiver class=&quot;org.apache.axis2.receivers.RawXMLINOutMessageReceiver&quot;/&gt;
    &lt;/operation&gt;
&lt;/service&gt;
</pre></div>

<p>In this example, we have changed the service name (the
implementation class is very similar to what we have used earlier,
although it is in a different package). In addition we have added
the line <b>&quot;&lt;module ref=&quot;logging&quot;/&gt;&quot;</b> to &quot;services.xml&quot;.
This informs the Axis2 engine that the module &quot;logging&quot; should be
engaged for this service. The handler inside the module will be
executed in their respective phases as described by the
&quot;module.xml&quot;.</p>
<a name="Step6_:_Packaging" id="Step6_:_Packaging"></a>
</div>
<div class="section">
<h4><a name="Step6_:_Packaging"></a>Step6 : Packaging</h4>

<p>Before deploying the module, we need to create the &quot;.mar&quot; file
for this module. This can be done, using the &quot;jar&quot; command and then
renaming the created .jar file. Else, you can find the
&quot;logging.mar&quot; that has already been created in the
&quot;<b>Axis2_HOME/samples/userguide</b>&quot; directory.</p>
<a name="Step7_:_Deploy_the_Module_in_Axis2" id="Step7_:_Deploy_the_Module_in_Axis2"></a>
</div>
<div class="section">
<h4><a name="Step7_:_Deploy_the_Module_in_Axis2"></a>Step7 : Deploy the Module in Axis2</h4>

<p>Deploying a module in Axis2 requires the user to create a
directory with the name &quot;modules&quot; in the &quot;webapps/axis2/WEB-INF&quot;
directory of their servlet container, and then copying the &quot;.mar&quot;
file to that directory. So let's first create the &quot;modules&quot;
directory and drop the &quot;logging.mar&quot; into this directory.</p>

<p>Although the required changes to the &quot;services.xml&quot; is very
little, we have created a separate service archive
(MyServiceWithModule.aar) for users to deploy the service..</p>

<p>Deploy this service using the same steps used in the <a href="adv-userguide.html#Step5_Deploy_web_service">'Step 4: Deploy Web
Service'</a> sub section in '<a href="userguide.html#ws_codegen">Writing a New Service using
Codegeneration</a>', and copy the &quot;logging.mar&quot; file to the
&quot;modules&quot; directory.</p>

<p>Then run 'ant run.client.servicewithmodule' from
<b>axis2home/samples/userguide directory</b></p>

<p>Note: To see the logs, the user needs to modify the
&quot;log4j.properties&quot; to log INFO. The property file is located in
&quot;<b>webapps/axis2/WEB-INF/classes</b>&quot; of your servlet
container. Change the line &quot;log4j.rootCategory= ERROR, LOGFILE&quot; to
&quot;log4j.rootCategory=INFO, ERROR, LOGFILE&quot;.</p>

<p><font size="2"><b>Note (on samples):</b></font> All the samples
mentioned in the user's guide are located at the
<b>&quot;samples\userguide\src&quot;</b> directory of the binary
distribution.</p>
</div></div>
</html>
                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
                      <div class="row-fluid">
                                      <p >Copyright &copy;                    2004&#x2013;2016
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All rights reserved.      
                    
      </p>
                </div>

        
                </div>
    </footer>
        </body>
</html>