blob: 68b5a63e6d8b8a4895ae7174e52adb3ed4eebade [file] [log] [blame]
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.7.4 at 2017-07-30
| 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="20170730" />
<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-07-30<span class="divider">|</span>
</li>
<li id="projectVersion">Version: 1.7.6<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>
<li><a href="../release-notes/1.7.6.html" title="1.7.6"><span class="none"></span>1.7.6</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>