blob: 55fce15b700e3af1fa3606c19ae2dbb263caff7b [file] [log] [blame]
<html>
<head>
<meta http-equiv="content-type" content="">
<title>Writing Web Services Using Axis2's Primary APIs</title>
<link href="../css/axis-docs.css" rel="stylesheet" type="text/css"
media="all">
</head>
<body>
<a name="Writing_Web_Services_Using Axis2's_Primary_APIs"></a>
<h1>Writing Web Services Using Apache Axis2's Primary APIs</h1>
<p>Apache Axis2 dispatches a component called
<strong>MessageReceiver</strong> 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>
<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>
<a name="How_to_write_the_Web_Service_"></a>
<h4>How to Write a Web Service?</h4>
Writing a new Web service with Apache Axis2 involves four steps:
<ol>
<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"></a>
<h4>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.</p>
<p>For more details on OMElement see the <a
href="http://ws.apache.org/commons/axiom/OMTutorial.html">OM Tutorial</a>.</p>
<pre>public class MyService{
public void ping(OMElement element){
// Business Logic
......
}
public OMElement echo(OMElement element){
......
}
}</pre>
<a name="Step2_:Write_the_services_xml_file"></a>
<h4>Step2: Write the services.xml file</h4>
<p>"services.xml" has the configuration for a Web service. Each Web service,
deployed in Apache Axis2 , must have its configuration in "services.xml". The
configuration for MyService is as follows:</p>
<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="ServiceClass" locked="false"&gt;userguide.example1.MyService&lt;/parameter&gt;
&lt;operation name="echo"&gt;
&lt;messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/&gt;
&lt;actionMapping&gt;urn:echo&lt;/actionMapping&gt;
&lt;/operation&gt;
&lt;operation name="ping"&gt;
&lt;messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/&gt;
&lt;actionMapping&gt;urn:ping&lt;/actionMapping&gt;
&lt;/operation&gt;
&lt;/service&gt;</pre>
<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>
<pre>&lt;service &gt;
&lt;description&gt;
This is a sample Web service with two operations, echo and ping.
&lt;/description&gt;</pre>
<p>2. The name of the service class is provided as a parameter.</p>
<pre>&lt;parameter name="serviceClass" locked="false"&gt;userguide.example1.MyService&lt;/parameter&gt;</pre>
<p>3. The "operation" XML tag describes the operations that are available in
this service with respective message receivers.</p>
<pre> &lt;operation name="echo"&gt;
&lt;messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/&gt;
&lt;actionMapping&gt;urn:echo&lt;/actionMapping&gt;
&lt;/operation&gt;
&lt;operation name="ping"&gt;
&lt;messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/&gt;
&lt;actionMapping&gt;urn:ping&lt;/actionMapping&gt;
&lt;/operation&gt;</pre>
<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 "echo" operation, we have used a
<strong>RawXMLINOutMessageReceiver</strong> since it is an IN-OUT operation.
For the IN-ONLY operation "ping", we have used
<strong>RawXMLINOnlyMessageReceiver</strong> 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>
<pre>&lt;ServiceGroup&gt;
&lt;service name="Service1"&gt;
&lt;!-- details for Service1 --&gt;
&lt;/service&gt;
&lt;service name="Service2"&gt;
&lt;!-- details for Service2 --&gt;
&lt;/service&gt;
&lt;module ref="ModuleName" /&gt;
&lt;parameter name="serviceGroupParam1" locked="false"&gt;value 1&lt;/parameter&gt;
&lt;/serviceGroup&gt;</pre>
<p>Note : The name of the service is a compulsory attribute.</p>
<a name="Step3_:Create_the_Web_Service_Archive"></a>
<h4>Step3: Create the Web Service Archive</h4>
<p>Apache Axis2 uses the ".aar" (Axis Archive) file as the deployment package
for Web services. Therefore, for MyService we will use "MyService.aar" with
the "services.xml" 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" name="Graphic1"
align="bottom" width="176" height="91" border="0"></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 "Axis2_HOME/samples/userguide" directory. This file has to be
deployed now.</p>
<a name="Step4_:Deploy_the_Web_Service"></a>
<h4>Step4: Deploy the Web Service</h4>
<p>The service can be deployed by dropping the ".aar" file into the
"services" directory in "/webapps/axis2/WEB-INF" of your servlet container.
Start the servlet container (if you have not already started), click the link
"Services" on the <a href="http://localhost:8080/axis2/" target="_blank">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"
name="Graphic2" align="bottom" border="0"></p>
<p>Note: Apache Axis2 provides an easy way to deploy Web services using the
"Upload Service" tool on the Axis2 Web Application's Administration module.
Please refer to the <a href="webadminguide.html" target="_blank">Web
Administration Guide</a> for more information.</p>
</body>
</html>