You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ch...@apache.org on 2006/09/27 06:24:59 UTC
svn commit: r450308 [2/2] - in /webservices/axis2/trunk/java/xdocs/1_1:
tcp-transport.html transport_howto.html userguide1.html userguide2.html
Modified: webservices/axis2/trunk/java/xdocs/1_1/userguide2.html
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/xdocs/1_1/userguide2.html?view=diff&rev=450308&r1=450307&r2=450308
==============================================================================
--- webservices/axis2/trunk/java/xdocs/1_1/userguide2.html (original)
+++ webservices/axis2/trunk/java/xdocs/1_1/userguide2.html Tue Sep 26 21:24:56 2006
@@ -1,425 +1,424 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
- <title>Axis2 User's Guide</title>
-</head>
-
-<body lang="en-US" dir="ltr">
-<h4><a name="Axis2_User's_Guide">Axis2 User's Guide</a></h4>
-
-<p><i>User Feedback: <a
-href="mailto:axis-user@ws.apache.org">axis-user@ws.apache.org</a></i>. Prefix
-subject with [Axis2]. To subscribe to mailing list see <a
-href="http://ws.apache.org/axis2/mail-lists.html">here.</a></p>
-
-<p align="right">Pages: <a href="userguide.html">Content</a>, <a
-href="userguide1.html">1</a>, <b>2</b>, <a href="userguide3.html">3</a>, <a
-href="userguide4.html">4</a>, <a href="userguide5.html">5</a></p>
-
-<p><b><font size="4">Note (on samples):</font></b> In this page of the user's
-guide we will look at how to write and deploy Web services using Axis2. All
-samples mentioned in this guide are located in the
-<b>"samples\userguide\src"</b> directory of the binary distribution.</p>
-
-<h2><a name="Web_Services_Using_Axis2">Web Services Using Axis2</a></h2>
-
-<p>Before starting, please check whether you have deployed the "axis2.war" in
-your servlet container and it is working properly. (See <a
-href="installationguide.html" target="_blank">Installation Guide</a>). User
-can select any of the following two ways of writing Web services using
-Axis2. </p>
-<ol>
- <li><a href="#Writing_Web_Services_Using Axis2's_Primary_APIs">Use Axis2's
- primary interfaces (APIs) and implement the business logic.</a></li>
- <li><p><a href="#Writing_Web_Services_by_Code_Generating_Skeleton">Start
- from the WSDL ->Code generate the Skeleton ->Implement the Business
- Logic.</a></p>
- </li>
-</ol>
-
-<h3><a name="Writing_Web_Services_Using Axis2's_Primary_APIs">Writing Web
-Services Using Axis2's Primary APIs</a></h3>
-
-<h4><a name="Creating_Web_Service__MyService_">Creating Web Service
-(MyService)</a></h4>
-
-<p>First let's see how we can write a simple Web service (MyService) using
-Axis2's primary interfaces and deploy it. For this purpose we will create a
-Web service with two operations as follows.</p>
-<pre>public void ping(OMElement element){} //IN-ONLY operation, just accepts the OMElement and do some processing.
-public OMElement echo(OMElement element){}//IN-OUT operation, accepts an OMElement and
- // sends back the same again </pre>
-
-<p>Complete code for this example Web service (MyService) can be found in the
-"Axis2Home/samples/userguide/src" directory under "userguide/example1"
-package. As you can see, the two operations are very simple and need no
-explanations on what they do. Now let's see how we can write the deployment
-descriptors for the service and deploy it.</p>
-
-<h4><a name="How_to_write_the_Web_Service_">How to write the Web
-Service?</a></h4>
-Writing a new Web service with Axis2 involve four steps:
-<ol>
- <li><p style="margin-bottom: 0in">Write the Implementation Class</p>
- </li>
- <li><p style="margin-bottom: 0in">Write a services.xml file to explain the
- Web service</p>
- </li>
- <li><p style="margin-bottom: 0in">create a *.aar archive (Axis Archive) for
- the Web service</p>
- </li>
- <li><p>Deploy the Web service</p>
- </li>
-</ol>
-
-<h4><a name="Step1_:Write_the_Implementation_Class">Step1 :Write the
-Implementation Class</a></h4>
-
-<p>Provides an implementation class that provides the business logic for the
-Web service, it should have methods that match the operations in the Web
-service. Unless you have data binding, the signature of the methods can have
-only one parameter of type OMElement.</p>
-<pre>public class MyService{
- public void ping(OMElement element){
- ......
- }
- public OMElement echo(OMElement element){
- ......
- }
-}</pre>
-
-<h4><a name="Step2_:Write_the_services_xml_file">Step2 :Write the
-services.xml file</a></h4>
-
-<p>Axis2 uses "services.xml" to keep configurations for a Web service. Each
-Web service deployed in Axis2 needs a "services.xml" containing the
-configurations. "services.xml" for MyService will be as follows.</p>
-<pre><service >
- <description>
- This is a sample Web service with two operations, echo and ping.
- </description>
- <parameter name="ServiceClass" locked="false">userguide.example1.MyService</parameter>
- <operation name="echo">
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
- <actionMapping>urn:echo</actionMapping>
- </operation>
- <operation name="ping">
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
- <actionMapping>urn:ping</actionMapping>
- </operation>
- </service></pre>
-
-<p><em>The above XML tags can be explained as follows:</em></p>
-
-<p>First comes the description and the service class.</p>
-<pre><parameter name="serviceClass" locked="false">userguide.example1.MyService</parameter></pre>
-
-<p>We provide the name of the service implementation class a parameter in the
-services.xml file.</p>
-
-<p>The next two xml tags describe the operations that are available in this
-service with respective message receivers.</p>
-<pre> <operation name="echo">
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
- <actionMapping>urn:echo</actionMapping>
- </operation>
- <operation name="ping">
- <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
- <actionMapping>urn:ping</actionMapping>
- </operation></pre>
-
-<p>Every operation must have a corresponding MessageReceiver class. When
-Axis2 engine receives a message, after the message is being processed by the
-handlers, it will be handed over to a MessageReceiver. <br>
-For the "echo" operation we have used a
-<strong>RawXMLINOutMessageReceiver</strong> since it is an IN-OUT operation.
-For IN-ONLY operation "ping", we have used
-<strong>RawXMLINOnlyMessageReceiver</strong> as the message receiver.</p>
-
-<p>The actionMapping is required only if you want to enable WS-Addressing.
-This will be used later in this user guide.</p>
-
-<p>You can write a services.xml file to include a group of services instead
-of a single service. This makes 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 following
-format.</p>
-<pre><serviceGroup>
- <service name="Service1">
- <!-- details for Service1 -->
- </service>
- <service name="Service2">
- <!-- details for Service2 -->
- </service>
- <module ref="ModuleName" />
- <parameter name="serviceGroupParam1" locked="false">value 1</parameter>
-</serviceGroup></pre>
-
-<p>Note : name of the service is a compulsory attribute</p>
-
-<h4><a name="Step3_:Create_the_Web_Service_Archive">Step3 :Create the Web
-Service Archive</a></h4>
-
-<p>Axis2 uses ".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 as shown in the following picture.
-(Name of the service will be the name of the archive file , if and 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 "MyService.aar" user can first create a jar file containing all
-the files necessary for the service and then rename the "jar" to "aar" so
-that Axis2 understands it as a service archive. This has already been created
-in the "Axis2Home/samples/userguide" directory. Now let's use it...</p>
-
-<h4><a name="Step4_:Deploy_the_Web_Service">Step4 :Deploy the Web
-Service</a></h4>
-
-<p>Deploying the service is just a matter of dropping the ".aar" in to
-"services" directory that can be found in the "\webapps\axis2\WEB-INF" of
-your servlet container, hence copy the "MyService.aar" into the
-"<b>services</b>" directory. Once these steps are completed, start the
-servlet container (if you have not already started) and check 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 the MyService is deployed properly. If you can see the following
-output then you have successfully deployed MyService on Axis2.</p>
-
-<p align="center"><img src="images/userguide/MyServiceDeployed.jpg"
-name="Graphic2" align="bottom" border="0"></p>
-
-<p>Note: Axis2 provides an easy way to deploy Web services using the "Upload
-Service" tool on Axis2 Web Application's Administration module. (See the <a
-href="webadminguide.html" target="_blank">Web Administration Guide</a> for
-more information on this)</p>
-
-<h3><a name="Writing_Web_Services_by_Code_Generating_Skeleton">Writing Web
-Services by Code Generating Skeleton</a></h3>
-
-<p>This is the second method of writing Web services using Axis2. Let's see
-how we can generate the skeleton from a given WSDL and implement the business
-logic using Axis2. For this we use Axis2SampleDocLit.wsdl that can be found
-in the <b>wsdl</b> directory under samples.</p>
-
-<h4><a name="WSDL2Java_Tool">WSDL2Java Tool</a></h4>
-
-<p>To generate the skeleton and the 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 is as follows and user can specify these
-values depending on their requirements.</p>
-<pre>Usage WSDL2Code -uri <Location of WSDL> : WSDL file location
--o <output Location> : output file location
--a : Generate async style code only. Default is off
--s : Generate sync style code only. Default is off. takes precedence over -a
--p <package name> : set custom package name
--l <language> : valid languages are java and csharp. Default is java
--t : Generate TestCase to test the generated code
--ss : Generate server side code (i.e. skeletons). Default is off
--sd : Generate service descriptor (i.e. services.xml). Default is off. Valid with -ss
--d <databinding> : valid databinding(s) are adb, xmlbeans and jaxme. Default is adb
--g Generates all the classes. valid only with the -ss
--pn <port_name> : name of port in the presence of multiple ports
--sn <service_name> : name of service in the presence of multiple services
--u : unpacks the databinding classes
--r <repository_path> : path of the repository against which code is generated</pre>
-
-<p>We will use the tool with the following parameters and generate the
-skeleton and the other required classes.</p>
-
-<p>Windows users can use the following command in the console:</p>
-<pre style="margin-bottom: 0.2in">WSDL2Java.bat -uri ..\samples\wsdl\Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans -o ..\samples -p org.apache.axis2.userguide</pre>
-
-<p>Linux users should switch the file separator:</p>
-<pre style="margin-bottom: 0.2in">WSDL2Java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans -o ../samples -p org.apache.axis2.userguide</pre>
-
-<p>This will generate the required classes in the <b>src</b> directory inside
-samples, and the schema classes in <strong>schemaorg_apache_xmlbeans</strong>
-directory which is inside resources directory also inside samples
-dir<strong></strong>. Note that these are not source files and should be
-available in the class path in order to compile the generated classes.</p>
-
-<h4><a name="Implement_the_Business_Logic">Implement the Business
-Logic</a></h4>
-
-<p>Locate the skeleton class that can be found under
-src/org/apache/axis2/userguide directory with the name
-"Axis2SampleDocLitServiceSkeleton.java". This is the skeleton for our Web
-service and we can now easily implement the business logic. The WSDL we have
-used has three operations: <!--<li><p style="margin-bottom: 0in">echoVoid - Operation that does not
-accept any input parameters and also provide no out put parameters. Just
-perform some task </p>
-</li>-->
-</p>
-<ul>
- <li><p style="margin-bottom: 0in">echoString - Operation that echoes a
- String value </p>
- </li>
- <li><p style="margin-bottom: 0in">echoStringArray - Operation that accept
- string array as the input and echoes them back</p>
- </li>
- <li><p>echoStruct - Operation that accept a Struct as the input and echoes
- them back.</p>
- </li>
-</ul>
-<!--<h4>echoVoid </h4>
-
-<p>Locate the following code segment in the
-"Axis2SampleDocLitServiceSkeleton.java" and fill the business logic. For
-the explanation purpose we do not need anything to be implemented here.</p>
-<pre>public void echoVoid(){
-//Todo fill this with the necessary business logic
-}</pre> -->
-
-<h4><a name="echoString">echoString</a></h4>
-
-<p>Locate the following code segment in the
-"Axis2SampleDocLitServiceSkeleton.java" and fill the business logic as shown
-below.</p>
-<pre> public org.apache.axis2.userguide.xsd.EchoStringReturnDocument echoString
- (org.apache.axis2.userguide.xsd.EchoStringParamDocument param4 ){
- //Todo fill this with the necessary business logic
- throw new java.lang.UnsupportedOperationException();
- }
- </pre>
-
-<p>Once filled with the business logic it will be as follows. The code is
-simple and the explanations are given as comments.</p>
-<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.
- EchoStringReturnDocument retDoc = EchoStringReturnDocument.Factory.newInstance();
- //send the string back.
- retDoc.setEchoStringReturn(param4.getEchoStringParam());
- return retDoc;
- }</pre>
-
-<p>Similarly following code fragments shows how you can fill the business
-logic for our first Web service.</p>
-
-<h4><a name="echoStringArray">echoStringArray</a></h4>
-<pre>public org.apache.axis2.userguide.xsd.EchoStringArrayReturnDocument echoStringArray
- (org.apache.axis2.userguide.xsd.EchoStringArrayParamDocument param0) throws Exception {
- //Use the factory to create the output document.
- EchoStringArrayReturnDocument retDoc = EchoStringArrayReturnDocument.Factory.newInstance();
- //Get the String array from the input parameters.
- String[] inParams = param0.getEchoStringArrayParam().getStringArray();
- ArrayOfstringLiteral retParams = ArrayOfstringLiteral.Factory.newInstance();
- //Set the input parameters to the output parameters for echoing.
- for (int i = 0; i < inParams.length; i++) {
- retParams.addString(inParams[i]);
- }
- //return the output document.
- retDoc.setEchoStringArrayReturn(retParams);
- return retDoc;
-}</pre>
-
-<h4><a name="echoStruct">echoStruct</a></h4>
-<pre>public org.apache.axis2.userguide.xsd.EchoStructReturnDocument echoStruct
- (org.apache.axis2.userguide.xsd.EchoStructParamDocument param2) throws Exception {
- //Use the factory to create the output document.
- EchoStructReturnDocument retDoc = EchoStructReturnDocument.Factory.newInstance();
-
- //Get the SOAPStrcut from the incoming parameters
- SOAPStruct inStruct = param2.getEchoStructParam();
-
- //Struct for the sending back
- SOAPStruct outStruct = SOAPStruct.Factory.newInstance();
-
- //Fill the outgoing struct
- outStruct.setVarFloat(inStruct.getVarFloat());
- outStruct.setVarInt(inStruct.getVarInt());
- outStruct.setVarString(inStruct.getVarString());
- //Set the outgoing document.
- retDoc.setEchoStructReturn(outStruct);
-
- return retDoc;
-}</pre>
-
-<h4><a name="services_xml">services.xml</a></h4>
-
-<p> Axis2 uses "services.xml" to hold the configurations for a particular Web
-service deployed in the Axis2 engine. When we generate the skeleton using the
-WSDL2Java tool, it will also generate the required services.xml for this Web
-service as well. This can be found in the same directory as the skeleton. The
-generated services.xml is as follows.</p>
-<pre><!-- This file was auto-generated from WSDL -->
-<!-- by the Apache Axis2 version: #axisVersion# #today# -->
-<serviceGroup>
- <service name="Axis2SampleDocLitService">
- <messageReceivers>
- <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
- class="org.apache.axis2.userguide.Axis2SampleDocLitServiceMessageReceiverInOut"/>
- </messageReceivers>
- <parameter locked="false" name="ServiceClass">
- org.apache.axis2.userguide.Axis2SampleDocLitServiceSkeleton</parameter>
- <operation name="echoStringArray" mep="http://www.w3.org/2004/08/wsdl/in-out">
- <actionMapping>echoStringArray</actionMapping>
- </operation>
- <operation name="echoStruct" mep="http://www.w3.org/2004/08/wsdl/in-out">
- <actionMapping>echoStruct</actionMapping>
- </operation>
- <operation name="echoString" mep="http://www.w3.org/2004/08/wsdl/in-out">
- <actionMapping>echoString</actionMapping>
- </operation>
- </service>
-</serviceGroup></pre>
-
-<p>First line of the "services.xml" gives the name of the Web Service. This
-is used in the URL to the service as the service name. Next comes the
-description and the service class. The next xml tags describe the operations
-that are available in this service with respective message receivers.</p>
-
-<h4><a name="Packaging">Packaging</a></h4>
-
-<p>Next step in the process is to package the classes in a .aar (axis2
-archive) and deploy it in Axis2. When the WSDL2Java tool generate the
-skeleton it will also generate the required data binding classes. These
-schema related classes are located in the
-<strong>schemaorg_apache_xmlbeans</strong> directory inside resources
-directory of the generated code. Copy this to your class path, compile the
-skeleton and the supporting classes. In order to create the .aar file, let's
-create the following directory structure with the required files and then
-simply use jar command to package it.</p>
-
-<p><img src="images/userguide/DirectoryStructure.jpg" align="bottom"
-border="0"></p>
-
-<p>Go to the top level directory where you can find the class files for the
-above service (i.e. one level up on the directory structure shown above),
-then type the following command in a command line.</p>
-<pre style="margin-bottom: 0.2in">jar -cf Axis2SampleDocLitService.aar .</pre>
-
-<p>Deploying the service is just a matter of dropping the ".aar" in to
-"services" directory that can be found in the "\webapps\axis2\WEB-INF" of
-your servlet container, hence copy the "Axis2SampleDocLitService.aar" into
-the "<b>services</b>" directory. Once these steps are completed, please start
-the servlet container (if you have not already started) and check 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 the Axis2SampleDocLitService is deployed properly. If you can see the
-following output then you have successfully deployed Axis2SampleDocLitService
-on Axis2.</p>
-
-<p align="center"><img src="images/userguide/ServiceDeployed.jpg"
-name="Graphic4" align="bottom" border="0"></p>
-
-<p>Note: Axis2 provides an easy way to deploy Web Services using the "Upload
-Service" tool on Axis2 Web Application's Administration module. (See the <a
-href="webadminguide.html" target="_blank">Web Administration Guide</a> for
-more information on this)</p>
-
-<p align="right"><a href="userguide1.html"><img src="images/arrow_left.gif">
-Previous</a> | <a href="userguide3.html">Next <img
-src="images/arrow_right.gif"></a></p>
-
-<p>Pages: <a href="userguide.html">Content</a>, <a
-href="userguide1.html">1</a>, <b>2</b>, <a href="userguide3.html">3</a>, <a
-href="userguide4.html">4</a>, <a href="userguide5.html">5</a></p>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+ <title>Axis2 User's Guide</title>
+</head>
+
+<body lang="en-US" dir="ltr">
+<h4><a name="Axis2_User's_Guide">Axis2 User's Guide</a></h4>
+
+<p><i>User Feedback: <a
+href="mailto:axis-user@ws.apache.org">axis-user@ws.apache.org</a></i>. Prefix
+subject with [Axis2]. To subscribe to mailing list see <a
+href="http://ws.apache.org/axis2/mail-lists.html">here.</a></p>
+
+<p align="right">Pages: <a href="userguide.html">Content</a>, <a
+href="userguide1.html">1</a>, <b>2</b>, <a href="userguide3.html">3</a>, <a
+href="userguide4.html">4</a>, <a href="userguide5.html">5</a></p>
+
+<p><b><font size="4">Note (on samples):</font></b> In this page of the user's
+guide we will look at how to write and deploy Web services using Axis2. All
+samples mentioned in this guide are located in the
+<b>"samples\userguide\src"</b> directory of the binary distribution.</p>
+
+<h2><a name="Web_Services_Using_Axis2">Web Services Using Axis2</a></h2>
+
+<p>Before starting, please check if you have deployed the "axis2.war" in your
+servlet container and it is working properly. (See <a
+href="installationguide.html" target="_blank">Installation Guide</a>). Users
+can select any of the following two ways to write Web services using Axis2.
+</p>
+<ol>
+ <li><a href="#Writing_Web_Services_Using Axis2's_Primary_APIs">Use Axis2's
+ primary interfaces (APIs) and implement the business logic.</a></li>
+ <li><p><a href="#Writing_Web_Services_by_Code_Generating_Skeleton">Start
+ from the WSDL ->Code generate the Skeleton ->Implement the Business
+ Logic.</a></p>
+ </li>
+</ol>
+
+<h3><a name="Writing_Web_Services_Using Axis2's_Primary_APIs">Writing Web
+Services Using Axis2's Primary APIs</a></h3>
+
+<h4><a name="Creating_Web_Service__MyService_">Creating Web Service
+(MyService)</a></h4>
+
+<p>First let's see how we can write a simple Web service (MyService) using
+Axis2's primary interfaces and deploy it. For this purpose we will create a
+Web service with two operations as follows.</p>
+<pre>public void ping(OMElement element){} //IN-ONLY operation, just accepts the OMElement and do some processing.
+public OMElement echo(OMElement element){}//IN-OUT operation, accepts an OMElement and
+ // sends back the same again </pre>
+
+<p>Complete code for this example Web service (MyService) can be found in the
+"Axis2Home/samples/userguide/src" directory under "userguide/example1"
+package. As you can see, the two operations are very simple and need no
+explanations on what they do. Now let's see how we can write the deployment
+descriptors for the service and deploy it.</p>
+
+<h4><a name="How_to_write_the_Web_Service_">How to write the Web
+Service?</a></h4>
+Writing a new Web service with Axis2 involves four steps:
+<ol>
+ <li><p style="margin-bottom: 0in">Write the Implementation Class</p>
+ </li>
+ <li><p style="margin-bottom: 0in">Write a services.xml file to explain the
+ Web service</p>
+ </li>
+ <li><p style="margin-bottom: 0in">create a *.aar archive (Axis Archive) for
+ the Web service</p>
+ </li>
+ <li><p>Deploy the Web service</p>
+ </li>
+</ol>
+
+<h4><a name="Step1_:Write_the_Implementation_Class">Step1 :Write the
+Implementation Class</a></h4>
+
+<p>Provide an implementation class that has the business logic for the Web
+service. It should have methods that match the operations in the Web service.
+Unless you have data binding, the signature of the methods can have only one
+parameter of type OMElement.</p>
+<pre>public class MyService{
+ public void ping(OMElement element){
+ ......
+ }
+ public OMElement echo(OMElement element){
+ ......
+ }
+}</pre>
+
+<h4><a name="Step2_:Write_the_services_xml_file">Step2 :Write the
+services.xml file</a></h4>
+
+<p>Axis2 uses "services.xml" to keep configurations for a Web service. Each
+Web service deployed in Axis2 needs a "services.xml" containing the
+configurations. "services.xml" for MyService will be as follows.</p>
+<pre><service >
+ <description>
+ This is a sample Web service with two operations, echo and ping.
+ </description>
+ <parameter name="ServiceClass" locked="false">userguide.example1.MyService</parameter>
+ <operation name="echo">
+ <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+ <actionMapping>urn:echo</actionMapping>
+ </operation>
+ <operation name="ping">
+ <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
+ <actionMapping>urn:ping</actionMapping>
+ </operation>
+ </service></pre>
+
+<p><em>The above XML tags can be explained as follows:</em></p>
+
+<p>First comes the description and the service class.</p>
+<pre><parameter name="serviceClass" locked="false">userguide.example1.MyService</parameter></pre>
+
+<p>We provide the name of the service implementation class a parameter in the
+services.xml file.</p>
+
+<p>The next two xml tags describe the operations that are available in this
+service with respective message receivers.</p>
+<pre> <operation name="echo">
+ <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+ <actionMapping>urn:echo</actionMapping>
+ </operation>
+ <operation name="ping">
+ <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
+ <actionMapping>urn:ping</actionMapping>
+ </operation></pre>
+
+<p>Every operation must have a corresponding MessageReceiver class. When
+Axis2 engine receives a message, after the message is being processed by the
+handlers, it will be handed over to a MessageReceiver. <br>
+For the "echo" operation we have used a
+<strong>RawXMLINOutMessageReceiver</strong> since it is an IN-OUT operation.
+For IN-ONLY operation "ping", we have used
+<strong>RawXMLINOnlyMessageReceiver</strong> as the message receiver.</p>
+
+<p>The actionMapping is required only if you want to enable WS-Addressing.
+This will be used later in this user guide.</p>
+
+<p>You can write a services.xml file to include a group of services instead
+of a single service. This makes 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><serviceGroup>
+ <service name="Service1">
+ <!-- details for Service1 -->
+ </service>
+ <service name="Service2">
+ <!-- details for Service2 -->
+ </service>
+ <module ref="ModuleName" />
+ <parameter name="serviceGroupParam1" locked="false">value 1</parameter>
+</serviceGroup></pre>
+
+<p>Note : name of the service is a compulsory attribute</p>
+
+<h4><a name="Step3_:Create_the_Web_Service_Archive">Step3 :Create the Web
+Service Archive</a></h4>
+
+<p>Axis2 uses ".aar" (Axis Archive) file as the deployment package for Web
+services. Therefor, for MyService we will use "MyService.aar" with the
+"services.xml" packaged in the META-INF as shown in the following picture.
+(Name of the service will be the name of the archive file , if and 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 "MyService.aar" user can first create a jar file containing all
+the files necessary for the service and then rename the "jar" to "aar" so
+that Axis2 understands it as a service archive. This has already been created
+in the "Axis2Home/samples/userguide" directory. Now let's use it...</p>
+
+<h4><a name="Step4_:Deploy_the_Web_Service">Step4 :Deploy the Web
+Service</a></h4>
+
+<p>Deploying the service is just a matter of dropping the ".aar" in to
+"services" directory that can be found in the "\webapps\axis2\WEB-INF" of
+your servlet container, hence copy the "MyService.aar" into the
+"<b>services</b>" directory. Once these steps are completed, start the
+servlet container (if you have not already started) and check 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 the MyService is deployed properly. If you can see the following
+output then you have successfully deployed MyService on Axis2.</p>
+
+<p align="center"><img src="images/userguide/MyServiceDeployed.jpg"
+name="Graphic2" align="bottom" border="0"></p>
+
+<p>Note: Axis2 provides an easy way to deploy Web services using the "Upload
+Service" tool on Axis2 Web Application's Administration module. (See the <a
+href="webadminguide.html" target="_blank">Web Administration Guide</a> for
+more information on this)</p>
+
+<h3><a name="Writing_Web_Services_by_Code_Generating_Skeleton">Writing Web
+Services by Code Generating Skeleton</a></h3>
+
+<p>This is the second method of writing Web services using Axis2. Let's see
+how we can generate the skeleton from a given WSDL and implement the business
+logic using Axis2. For this we use Axis2SampleDocLit.wsdl that can be found
+in the <b>wsdl</b> directory under samples.</p>
+
+<h4><a name="WSDL2Java_Tool">WSDL2Java Tool</a></h4>
+
+<p>To generate the skeleton and the 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 is as follows and users can specify these
+values depending on their requirements.</p>
+<pre>Usage WSDL2Code -uri <Location of WSDL> : WSDL file location
+-o <output Location> : output file location
+-a : Generate async style code only. Default is off
+-s : Generate sync style code only. Default is off. takes precedence over -a
+-p <package name> : set custom package name
+-l <language> : valid languages are java and csharp. Default is java
+-t : Generate TestCase to test the generated code
+-ss : Generate server side code (i.e. skeletons). Default is off
+-sd : Generate service descriptor (i.e. services.xml). Default is off. Valid with -ss
+-d <databinding> : valid databinding(s) are adb, xmlbeans and jaxme. Default is adb
+-g Generates all the classes. valid only with the -ss
+-pn <port_name> : name of port in the presence of multiple ports
+-sn <service_name> : name of service in the presence of multiple services
+-u : unpacks the databinding classes
+-r <repository_path> : path of the repository against which code is generated</pre>
+
+<p>We will use the tool with the following parameters and generate the
+skeleton and the other required classes.</p>
+
+<p>Windows users can use the following command in the console:</p>
+<pre style="margin-bottom: 0.2in">WSDL2Java.bat -uri ..\samples\wsdl\Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans -o ..\samples -p org.apache.axis2.userguide</pre>
+
+<p>Linux users should switch the file separator:</p>
+<pre style="margin-bottom: 0.2in">WSDL2Java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans -o ../samples -p org.apache.axis2.userguide</pre>
+
+<p>This will generate the required classes in the <b>src</b> directory inside
+samples, and the schema classes in <strong>schemaorg_apache_xmlbeans</strong>
+directory which is inside resources directory and also inside samples
+dir<strong></strong>. Note that these are not source files and should be
+available in the class path in order to compile the generated classes.</p>
+
+<h4><a name="Implement_the_Business_Logic">Implement the Business
+Logic</a></h4>
+
+<p>Locate the skeleton class that can be found under
+src/org/apache/axis2/userguide directory with the name
+"Axis2SampleDocLitServiceSkeleton.java". This is the skeleton for our Web
+service and we can now easily implement the business logic. The WSDL we have
+used has three operations: <!--<li><p style="margin-bottom: 0in">echoVoid - Operation that does not
+accept any input parameters and also provide no out put parameters. Just
+perform some task </p>
+</li>-->
+</p>
+<ul>
+ <li><p style="margin-bottom: 0in">echoString - echoes a String value </p>
+ </li>
+ <li><p style="margin-bottom: 0in">echoStringArray - accept string array as
+ the input and echoes them back</p>
+ </li>
+ <li><p>echoStruct - accept a Struct as the input and echoes them back.</p>
+ </li>
+</ul>
+<!--<h4>echoVoid </h4>
+
+<p>Locate the following code segment in the
+"Axis2SampleDocLitServiceSkeleton.java" and fill the business logic. For
+the explanation purpose we do not need anything to be implemented here.</p>
+<pre>public void echoVoid(){
+//Todo fill this with the necessary business logic
+}</pre> -->
+
+<h4><a name="echoString">echoString</a></h4>
+
+<p>Locate the following code segment in the
+"Axis2SampleDocLitServiceSkeleton.java" and fill the business logic as shown
+below.</p>
+<pre> public org.apache.axis2.userguide.xsd.EchoStringReturnDocument echoString
+ (org.apache.axis2.userguide.xsd.EchoStringParamDocument param4 ){
+ //Todo fill this with the necessary business logic
+ throw new java.lang.UnsupportedOperationException();
+ }
+ </pre>
+
+<p>Once filled with the business logic it will be as follows. The code is
+simple and the explanations are given as comments.</p>
+<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.
+ EchoStringReturnDocument retDoc = EchoStringReturnDocument.Factory.newInstance();
+ //send the string back.
+ retDoc.setEchoStringReturn(param4.getEchoStringParam());
+ return retDoc;
+ }</pre>
+
+<p>Similarly, the following code fragments shows how you can fill the
+business logic for our first Web service.</p>
+
+<h4><a name="echoStringArray">echoStringArray</a></h4>
+<pre>public org.apache.axis2.userguide.xsd.EchoStringArrayReturnDocument echoStringArray
+ (org.apache.axis2.userguide.xsd.EchoStringArrayParamDocument param0) throws Exception {
+ //Use the factory to create the output document.
+ EchoStringArrayReturnDocument retDoc = EchoStringArrayReturnDocument.Factory.newInstance();
+ //Get the String array from the input parameters.
+ String[] inParams = param0.getEchoStringArrayParam().getStringArray();
+ ArrayOfstringLiteral retParams = ArrayOfstringLiteral.Factory.newInstance();
+ //Set the input parameters to the output parameters for echoing.
+ for (int i = 0; i < inParams.length; i++) {
+ retParams.addString(inParams[i]);
+ }
+ //return the output document.
+ retDoc.setEchoStringArrayReturn(retParams);
+ return retDoc;
+}</pre>
+
+<h4><a name="echoStruct">echoStruct</a></h4>
+<pre>public org.apache.axis2.userguide.xsd.EchoStructReturnDocument echoStruct
+ (org.apache.axis2.userguide.xsd.EchoStructParamDocument param2) throws Exception {
+ //Use the factory to create the output document.
+ EchoStructReturnDocument retDoc = EchoStructReturnDocument.Factory.newInstance();
+
+ //Get the SOAPStrcut from the incoming parameters
+ SOAPStruct inStruct = param2.getEchoStructParam();
+
+ //Struct for the sending back
+ SOAPStruct outStruct = SOAPStruct.Factory.newInstance();
+
+ //Fill the outgoing struct
+ outStruct.setVarFloat(inStruct.getVarFloat());
+ outStruct.setVarInt(inStruct.getVarInt());
+ outStruct.setVarString(inStruct.getVarString());
+ //Set the outgoing document.
+ retDoc.setEchoStructReturn(outStruct);
+
+ return retDoc;
+}</pre>
+
+<h4><a name="services_xml">services.xml</a></h4>
+
+<p> Axis2 uses "services.xml" to hold the configurations for a particular Web
+service deployed in the Axis2 engine. When we generate the skeleton using the
+WSDL2Java tool, it will also generate the required services.xml for this Web
+service as well. This can be found in the same directory as the skeleton. The
+generated services.xml is as follows.</p>
+<pre><!-- This file was auto-generated from WSDL -->
+<!-- by the Apache Axis2 version: #axisVersion# #today# -->
+<serviceGroup>
+ <service name="Axis2SampleDocLitService">
+ <messageReceivers>
+ <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
+ class="org.apache.axis2.userguide.Axis2SampleDocLitServiceMessageReceiverInOut"/>
+ </messageReceivers>
+ <parameter locked="false" name="ServiceClass">
+ org.apache.axis2.userguide.Axis2SampleDocLitServiceSkeleton</parameter>
+ <operation name="echoStringArray" mep="http://www.w3.org/2004/08/wsdl/in-out">
+ <actionMapping>echoStringArray</actionMapping>
+ </operation>
+ <operation name="echoStruct" mep="http://www.w3.org/2004/08/wsdl/in-out">
+ <actionMapping>echoStruct</actionMapping>
+ </operation>
+ <operation name="echoString" mep="http://www.w3.org/2004/08/wsdl/in-out">
+ <actionMapping>echoString</actionMapping>
+ </operation>
+ </service>
+</serviceGroup></pre>
+
+<p>First line of the "services.xml" gives the name of the Web service. This
+is used in the URL to the service as the service name. Next comes the
+description and the service class. The following xml tags describe the
+operations that are available in this service with respective message
+receivers.</p>
+
+<h4><a name="Packaging">Packaging</a></h4>
+
+<p>The next step in this process is to package the classes in an .aar (axis2
+archive) and deploy it in Axis2. When the WSDL2Java tool generates the
+skeleton it will also generate the required data binding classes. These
+schema related classes are located in the
+<strong>schemaorg_apache_xmlbeans</strong> directory inside resources
+directory of the generated code. Copy this to your class path, compile the
+skeleton and the supporting classes. In order to create the .aar file, let's
+create the following directory structure with the required files and then
+simply use jar command to package it.</p>
+
+<p><img src="images/userguide/DirectoryStructure.jpg" align="bottom"
+border="0"></p>
+
+<p>Go to the top level directory where you can find the class files for the
+above service (i.e. one level up on the directory structure shown above),
+then type the following command in a command line.</p>
+<pre style="margin-bottom: 0.2in">jar -cf Axis2SampleDocLitService.aar .</pre>
+
+<p>Deploying the service is just a matter of dropping the ".aar" in to
+"services" directory that can be found in the "\webapps\axis2\WEB-INF" of
+your servlet container, hence copy the "Axis2SampleDocLitService.aar" into
+the "<b>services</b>" directory. Once these steps are completed, please start
+the servlet container (if you have not already started) and check 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 the Axis2SampleDocLitService is deployed properly. If you can see the
+following output then you have successfully deployed Axis2SampleDocLitService
+on Axis2.</p>
+
+<p align="center"><img src="images/userguide/ServiceDeployed.jpg"
+name="Graphic4" align="bottom" border="0"></p>
+
+<p>Note: Axis2 provides an easy way to deploy Web Services using the "Upload
+Service" tool on Axis2 Web Application's Administration module. (See the <a
+href="webadminguide.html" target="_blank">Web Administration Guide</a> for
+more information on this)</p>
+
+<p align="right"><a href="userguide1.html"><img src="images/arrow_left.gif">
+Previous</a> | <a href="userguide3.html">Next <img
+src="images/arrow_right.gif"></a></p>
+
+<p>Pages: <a href="userguide.html">Content</a>, <a
+href="userguide1.html">1</a>, <b>2</b>, <a href="userguide3.html">3</a>, <a
+href="userguide4.html">4</a>, <a href="userguide5.html">5</a></p>
+</body>
+</html>
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org