<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2017-05-06 
 | 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="20170506" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Writing Web Services Using Axis2's Primary APIs</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 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: 2017-05-06<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.7.5<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 Web Services Using Axis2's Primary APIs</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>
      </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" >
<html xmlns="http://www.w3.org/1999/xhtml">

<a name="Writing_Web_Services_Using_Axis2s_Primary_APIs"></a>

<h1>Writing Web Services Using Apache Axis2's Primary APIs</h1>

<p>Apache Axis2 dispatches a component called
<b>MessageReceiver</b> when Receiving a Message to the
server. Apache Axis2 provides different implementations of this
class and it can be configured by adding a messageReceiver tag to
services.xml. Apache Axis2 provides an implementation for a class
of Message receivers called RawXml Message receivers. They work at
the XML level and can only handle OMElements as parameters. This
section explains how to write a service using them.</p>

<p>In our example, the Web service will have two operations.</p>

<div>
<pre>
public void ping(OMElement element){} //IN-ONLY operation, just accepts the OMElement and does some processing.
public OMElement echo(OMElement element){}//IN-OUT operation, accepts an OMElement and  
                                          // sends back the same again 
</pre></div>
<a name="How_to_write_the_Web_Service_" id="How_to_write_the_Web_Service_"></a>

<div class="section">
<div class="section">
<h4><a name="How_to_Write_a_Web_Service"></a>How to Write a Web Service?</h4>
Writing a new Web service with Apache Axis2 involves four steps:

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

<li>Write the Implementation Class.</li>

<li>Write a services.xml file to explain the Web service.</li>

<li>Create a *.aar archive (Axis Archive) for the Web service.</li>

<li>Deploy the Web service.</li>
</ol>
<a name="Step1_:Write_the_Implementation_Class" id="Step1_:Write_the_Implementation_Class"></a>
</div>
<div class="section">
<h4><a name="Step1:_Write_the_Implementation_Class"></a>Step1: Write the Implementation Class</h4>

<p>An implementation class has the business logic for the Web
service and implements the operations provided by the Web service.
Unless you have data binding, the signature of the methods can have
only one parameter of the type OMElement. <i>OM stands for Object
Model (also known as AXIOM - AXis Object Model) and refers to the
XML infoset model that is initially developed for Apache Axis2. DOM
and JDOM are two such XML models conceptually similar to OM as an
XML model by its external behavior, but considering the deep down
implementation OM is very much different to others. OMElement is
the basic representation of the XML infoset element in OM.For more
details on OMElement see the <a class="externalLink" href="http://ws.apache.org/axiom/userguide/userguide.html">Axiom
User Guide</a>.</i></p>

<div>
<pre>
public class MyService{
    public void ping(OMElement element){
        // Business Logic     
        ......
    }
    public OMElement echo(OMElement element){
     ......
    }
}
</pre></div>
<a name="Step2_:Write_the_services_xml_file" id="Step2_:Write_the_services_xml_file"></a>
</div>
<div class="section">
<h4><a name="Step2:_Write_the_services.xml_file"></a>Step2: Write the services.xml file</h4>

<p>&quot;services.xml&quot; has the configuration for a Web service. Each Web
service, deployed in Apache Axis2 , must have its configuration in
&quot;services.xml&quot;. The configuration for MyService is as follows:</p>

<div>
<pre>
&lt;service &gt;
    &lt;description&gt;
        This is a sample Web service with two operations, echo and ping.
    &lt;/description&gt;
    &lt;parameter name=&quot;ServiceClass&quot;&gt;userguide.example1.MyService&lt;/parameter&gt;
    &lt;operation name=&quot;echo&quot;&gt;
        &lt;messageReceiver class=&quot;org.apache.axis2.receivers.RawXMLINOutMessageReceiver&quot;/&gt;
        &lt;actionMapping&gt;urn:echo&lt;/actionMapping&gt;
    &lt;/operation&gt;
     &lt;operation name=&quot;ping&quot;&gt;
        &lt;messageReceiver class=&quot;org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver&quot;/&gt;
        &lt;actionMapping&gt;urn:ping&lt;/actionMapping&gt;
    &lt;/operation&gt;
 &lt;/service&gt;
</pre></div>

<p>The above XML tags can be explained as follows:</p>

<p>1. The description of the service class is provided in the
description tag.</p>

<div>
<pre>
&lt;service &gt;
    &lt;description&gt;
        This is a sample Web service with two operations, echo and ping.
    &lt;/description&gt;
</pre></div>

<p>2. The name of the service class is provided as a parameter.</p>

<div>
<pre>
&lt;parameter name=&quot;serviceClass&quot;&gt;userguide.example1.MyService&lt;/parameter&gt;
</pre></div>

<p>3. The &quot;operation&quot; XML tag describes the operations that are
available in this service with respective message receivers.</p>

<div>
<pre>
   &lt;operation name=&quot;echo&quot;&gt;
            &lt;messageReceiver class=&quot;org.apache.axis2.receivers.RawXMLINOutMessageReceiver&quot;/&gt;
            &lt;actionMapping&gt;urn:echo&lt;/actionMapping&gt;
   &lt;/operation&gt;
   &lt;operation name=&quot;ping&quot;&gt;
       &lt;messageReceiver class=&quot;org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver&quot;/&gt;
       &lt;actionMapping&gt;urn:ping&lt;/actionMapping&gt;
   &lt;/operation&gt;
</pre></div>

<p>4. Every operation must map to a corresponding MessageReceiver
class. After a message is processed by the handlers, the Axis2
engine hands it over to a MessageReceiver.</p>

<p>5. For the &quot;echo&quot; operation, we have used a
<b>RawXMLINOutMessageReceiver</b> since it is an IN-OUT
operation. For the IN-ONLY operation &quot;ping&quot;, we have used
<b>RawXMLINOnlyMessageReceiver</b> as the message
receiver.</p>

<p>6. The actionMapping is required only if you want to enable
WS-Addressing. This will be used later in this user guide.</p>

<p>7. You can write a services.xml file to include a group of
services instead of a single service. This makes the management and
deployment of a set of related services very easy. At runtime, you
can share information between these services within a single
interaction using the ServiceGroupContext. If you hope to use this
functionality, the services.xml file should have the following
format.</p>

<div>
<pre>
&lt;ServiceGroup&gt;
  &lt;service name=&quot;Service1&quot;&gt;
    &lt;!-- details for Service1 --&gt;
  &lt;/service&gt;
  &lt;service name=&quot;Service2&quot;&gt;
    &lt;!-- details for Service2 --&gt;
  &lt;/service&gt;
  &lt;module ref=&quot;ModuleName&quot; /&gt;
  &lt;parameter name=&quot;serviceGroupParam1&quot;&gt;value 1&lt;/parameter&gt;
&lt;/serviceGroup&gt;
</pre></div>

<p>Note : The name of the service is a compulsory attribute.</p>
<a name="Step3_:Create_the_Web_Service_Archive" id="Step3_:Create_the_Web_Service_Archive"></a>
</div>
<div class="section">
<h4><a name="Step3:_Create_the_Web_Service_Archive"></a>Step3: Create the Web Service Archive</h4>

<p>Apache Axis2 uses the &quot;.aar&quot; (Axis Archive) file as the
deployment package for Web services. Therefore, for MyService we
will use &quot;MyService.aar&quot; with the &quot;services.xml&quot; packaged in the
META-INF in the directory structure shown below. Please note that
the name of the archive file will be the same as that of the
service only if the services.xml contains only one service
element.</p>

<p><img src="images/userguide/ServiceItems.jpg" align="bottom" width="176" height="91" border="0" id="Graphic1" alt="" /></p>

<p>To create the archive file, you can create a .jar file
containing all the necessary files and then rename it to a .aar
file. This archive file can be found in the
&quot;Axis2_HOME/samples/userguide&quot; directory. This file has to be
deployed now.</p>
<a name="Step4_:Deploy_the_Web_Service" id="Step4_:Deploy_the_Web_Service"></a>
</div>
<div class="section">
<h4><a name="Step4:_Deploy_the_Web_Service"></a>Step4: Deploy the Web Service</h4>

<p>The service can be deployed by dropping the &quot;.aar&quot; file into the
&quot;services&quot; directory in &quot;/webapps/axis2/WEB-INF&quot; of your servlet
container. Start the servlet container (if you have not already
started), click the link &quot;Services&quot; on the <a class="externalLink" href="http://localhost:8080/axis2/">Home Page of Axis2
Web Application</a> (http://localhost:8080/axis2) and see whether
MyService is deployed properly. If you can see the following
output, then you have successfully deployed MyService on Apache
Axis2. Congratulations !!</p>

<p align="center"><img src="images/userguide/MyServiceDeployed.jpg" align="bottom" border="0" id="Graphic2" alt="" /></p>

<p>Note: Apache Axis2 provides an easy way to deploy Web services
using the &quot;Upload Service&quot; tool on the Axis2 Web Application's
Administration module. Please refer to the <a href="webadminguide.html">Web Administration Guide</a>
for more information.</p>
</div></div>
</html>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright &copy;2004&#x2013;2017
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.</p>
        </div>
        </div>
    </footer>
    </body>
</html>