You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ch...@apache.org on 2006/03/23 08:38:40 UTC

svn commit: r388085 [5/6] - in /webservices/axis2/trunk/java/xdocs/latest: ./ adb/ adb/images/ images/ images/archi-guide/ images/tools/ images/tools/service/ images/tools/wsdl/ images/userguide/ resources/ resources/schemas/ sec-conf/

Added: webservices/axis2/trunk/java/xdocs/latest/rest-ws.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/rest-ws.html?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/rest-ws.html (added)
+++ webservices/axis2/trunk/java/xdocs/latest/rest-ws.html Wed Mar 22 23:38:30 2006
@@ -0,0 +1,129 @@
+<html>
+<head>
+  <meta http-equiv="content-type" content="">
+  <title>RESTful Web Services Support</title>
+</head>
+
+<body lang="en">
+<h1>RESTful Web services Support</h1>
+
+<p>REST provides access to resources through the two methods GET and POST.
+REST Web services are a reduced subset of the usual Web service stack.</p>
+
+<p>The Axis2 REST implementation assumes the following properties:</p>
+<ol>
+  <li>REST Web services are Synchronous and Request Response in nature.</li>
+  <li>When REST Web services are accessed via GET, the service and the
+    operations are identified based on the URL. The parameters are assumed as
+    parameters of the Web service. In this case the GET based REST Web
+    services supports only simple types as arguments.</li>
+  <li>POST based web services do not need a SOAP Envelope or a SOAP Body.
+    REST Web Services do not have Headers and the payload is sent
+  directly.</li>
+</ol>
+
+<p>Axis2 can be configured as a REST Container and can be used to send and
+receive RESTful Web services requests and responses. REST Web services can be
+accessed in two ways, i.e. using HTTP GET and POST.</p>
+
+<h2>Doing REST web services with HTTP POST</h2>
+
+<p>The REST default HTTP interface is POST. It can be enabled in the
+Server/Client side by adding the following line to the axis2.xml file.</p>
+<font color="blue">&lt; parameter name="enableREST" locked="false" &gt; true
+&lt;/parameter&gt; </font>
+
+<p>It however acts as both a REST endpoint and SOAP endpoint. When a Message
+is received, if the content type is text/xml and if the SOAP Action Headers
+are missing, then the Message is treated as a RESTful Message. Else it is
+treated as a usual SOAP Message.</p>
+
+<p>On sending a message out, the fact that the message is RESTful or not, can
+be decided from the client API or by deployment descriptor of the client.</p>
+<ol>
+  <li>By adding an entry in the client repositories axis2.xml file.</li>
+  <li>Setting as a property in client API e.g. <source>
+    <pre>...
+Options options = new Options();
+options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
+...</pre>
+    </source></li>
+</ol>
+
+<h3>Sample REST - HTTP POST Client</h3>
+
+<p>There is an example named, userguide.clients.RESTClient.java which
+demonstrates the usage of the above, using the "echo"operation of the
+    </p>
+<pre>userguide.example1.MyService </pre>
+
+<p>of the samples.The class source will be as follows:</p>
+
+<source>
+<pre>public class RESTClient {
+
+    private static String toEpr = "http://localhost:8080/axis2/services/MyService";
+    
+    public static void main(String[] args) throws AxisFault {
+
+        Options options = new Options();
+        options.setTo(new EndpointReference(toEpr));
+        options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+        options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
+
+        ServiceClient sender = new ServiceClient();
+        sender.engageModule(new QName(Constants.MODULE_ADDRESSING));
+        sender.setOptions(options);
+        OMElement result = sender.sendReceive(getPayload());
+
+        try {
+            XMLStreamWriter writer = XMLOutputFactory.newInstance()
+                    .createXMLStreamWriter(System.out);
+            result.serialize(writer);
+            writer.flush();
+        } catch (XMLStreamException e) {
+            e.printStackTrace();
+        } catch (FactoryConfigurationError e) {
+            e.printStackTrace();
+        }
+    }
+    private static OMElement getPayload() {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace omNs = fac.createOMNamespace(
+                "http://example1.org/example1", "example1");
+        OMElement method = fac.createOMElement("echo", omNs);
+        OMElement value = fac.createOMElement("Text", omNs);
+        value.addChild(fac.createText(value, "Axis2 Echo String "));
+        method.addChild(value);
+
+        return method;
+    }
+}</pre>
+</source>
+<h2>Access a REST Web Service Via HTTP GET</h2>
+
+<p>Axis2 allow users to access Web services that have simple type parameters
+via HTTP GET. For example the following URL requests the Version Service via
+HTTP GET. But the Web service arriving via GET assumes REST. Other parameters
+are converted in to XML and put in to the SOAP Body.</p>
+<source><pre>http://127.0.0.1:8080/axis2/services/version/getVersion</pre>
+</source>
+<p>Result can be shown in the browser as follows:</p>
+<img src="images/userguide/http-get-ws.jpg" alt="" />
+
+<p>For example, the following request, </p><source>
+<pre>http://127.0.0.1:8080/axis2/services/version/getVersion</pre>
+</source>will be converted to the following SOAP Message for processing by
+Axis2.<source>
+<pre> 
+   &lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;
+      &lt;soapenv:Body&gt;   
+          &lt;axis2:getVersion xmlns:axis2="http://ws.apache.org/goGetWithREST" /&gt;
+      &lt;/soapenv:Body&gt;
+   &lt;/soapenv:Envelope&gt;
+    </pre>
+</source>
+
+</body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/latest/sec-conf/in-sample.png
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/sec-conf/in-sample.png?rev=388085&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/latest/sec-conf/in-sample.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/latest/sec-conf/in.action.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/sec-conf/in.action.xsd?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/sec-conf/in.action.xsd (added)
+++ webservices/axis2/trunk/java/xdocs/latest/sec-conf/in.action.xsd Wed Mar 22 23:38:30 2006
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+	<xs:element name="action">
+		<xs:annotation>
+			<xs:documentation>Inflow security 'action' configuration</xs:documentation>
+		</xs:annotation>
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="items" type="xs:string"/>
+				<xs:element name="passwordCallbackClass" type="xs:string" minOccurs="0"/>
+				<xs:element name="signaturePropFile" type="xs:string" minOccurs="0"/>
+				<xs:element name="decryptionPropFile" type="xs:string" minOccurs="0"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>

Added: webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-action.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-action.xsd?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-action.xsd (added)
+++ webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-action.xsd Wed Mar 22 23:38:30 2006
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+	<xs:element name="action">
+		<xs:annotation>
+			<xs:documentation>Outflow security 'action' configuration</xs:documentation>
+		</xs:annotation>
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="items" type="xs:string"/>
+				<xs:element name="user" type="xs:string"/>
+				<xs:element name="passwordCallbackClass" type="xs:string" minOccurs="0"/>
+				<xs:element name="signaturePropFile" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionPropFile" type="xs:string" minOccurs="0"/>
+				<xs:element name="signatureKeyIdentifier" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionKeyIdentifier" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionUser" type="xs:string" minOccurs="0"/>
+				<xs:element name="signatureParts" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionParts" type="xs:string" minOccurs="0"/>
+				<xs:element name="optimizeParts" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionSymAlgorithm" type="xs:string" minOccurs="0"/>
+				<xs:element name="EmbeddedKeyCallbackClass" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionKeyTransportAlgorithm" type="xs:string" minOccurs="0"/>
+				<xs:element name="EmbeddedKeyName" type="xs:string" minOccurs="0"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>

Added: webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-sample.png
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-sample.png?rev=388085&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-sample.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-sample2.png
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-sample2.png?rev=388085&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/latest/sec-conf/out-sample2.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/latest/security-module.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/security-module.html?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/security-module.html (added)
+++ webservices/axis2/trunk/java/xdocs/latest/security-module.html Wed Mar 22 23:38:30 2006
@@ -0,0 +1,211 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><title>The Security Module</title>
+
+<body>
+<h1>Securing SOAP Messages with WSS4J</h1>
+
+<p>Axis2 comes with a module based on WSS4J [1] to provide WS-Security features. This section
+   explains how to engage and configure the security module. Since the security module inserts
+   handlers in the system specific pre-dispatch phase, it must be engaged globally. But it is
+   possible to activate the security module for the inflow or the outflow when required by the
+   service or the clients.</p>
+
+<p>The security module (security.mar) is available in the axis2.war but it is not engaged by
+   default.</p>
+
+<p>First it should be engaged by inserting the following in the axis2.xml file.</p>
+<source><pre>
+    &lt;module ref="security"/&gt;
+</pre></source>
+
+<p>The web admin interface can be used when Axis2 is deployed in a servlet container such as Apache
+   Tomcat.</p>
+
+<p>At the server it is possible to provide security on a per service basis. The configuration
+   parameters should be set in the service.xml file of the service. The client side config
+   parameters should be set in the axis2.xml of the client's Axis2 repository.</p>
+
+<p>The security module uses two parameters:</p>
+<ul>
+    <li>OutflowSecurity</li>
+    <li>InflowSecurity</li>
+</ul>
+
+The configuration that can go in each of these parameters are described below:
+
+<h3>OutflowSecurity parameter</h3>
+
+This parameter is used to configure the outflow security handler. The outflow
+handler can be invoked more than once in the outflow one can provide
+configuration for each of these invocations. The 'action' element describes
+one of these configurations. Therefore the 'OutflowSecurity' parameter can
+contain more than one 'action' elements. The schema of this 'action' element
+is available <a href="sec-conf/out-action.xsd">here</a>.
+<p>An outflow configuration to add a timestamp, sing and encrypt
+   the message once, is shown in<a href="#ex1"> Example 1</a> and <a href="#ex1">
+    Example 2</a> shows how to sign the message twice by chaining the outflow
+                  handler (using two 'action' elements)</p>
+
+<p>Following is a description of the elements that can go in an 'action'
+   element of the OutflowSecurity parameter</p>
+<br/>
+<table border="1">
+    <tr>
+        <td><b>Parameter</b></td>
+        <td><b>Description</b></td>
+        <td><b>Example</b></td>
+    </tr>
+    <tr>
+        <td>items</td>
+        <td>Security actions for the inflow</td>
+        <td>Add a Timestamp, Sign the SOAP body and Encrypt the SOAP body <br/>&lt;items&gt;
+            Timestamp Signature Encrypt&lt;/items&gt;</td>
+    </tr>
+    <tr>
+        <td>user</td>
+        <td>The user's name</td>
+        <td>Set alias of the key to be used to sign<br/>&lt;user&gt; bob&lt;/user&gt;</td>
+    </tr>
+    <tr>
+        <td>passwordCallbackClass</td>
+        <td>Callback class used to provide the password required to create the UsernameToken or to
+            sign the message</td>
+        <td>&lt;passwordCallbackClass&gt; org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;</td>
+    </tr>
+    <tr>
+        <td>signaturePropFile</td>
+        <td>property file used to get the signature parameters such as crypto provider, keystore and
+            its password</td>
+        <td>Set example.properties file as the signature property file<br/>&lt;signaturePropFile&gt;
+            example.properties&lt;/signaturePropFile&gt;</td>
+    </tr>
+    <tr>
+        <td>signatureKeyIdentifier</td>
+        <td>Key identifier to be used in referring the key in the signature</td>
+        <td>Use the serial number of the certificate<br/>&lt;signatureKeyIdentifier&gt; IssuerSerial&lt;/signatureKeyIdentifier&gt;
+        </td>
+    </tr>
+    <tr>
+        <td>encryptionKeyIdentifier</td>
+        <td>Key identifier to be used in referring the key in encryption</td>
+        <td>Use the serial number of the certificate <br/>&lt;encryptionKeyIdentifier&gt;IssuerSerial&lt;/encryptionKeyIdentifier&gt;
+        </td>
+    </tr>
+    <tr>
+        <td>encryptionUser</td>
+        <td>The user's name for encryption.</td>
+        <td><br/>&lt;encryptionUser&gt;alice&lt;/encryptionUser&gt;</td>
+    </tr>
+    <tr>
+        <td>encryptionSymAlgorithm</td>
+        <td>Symmetric algorithm to be used for encryption</td>
+        <td>Use AES-128<br/>&lt;encryptionSymAlgorithm&gt;
+            http://www.w3.org/2001/04/xmlenc#aes128-cbc&lt;/encryptionSymAlgorithm&gt;</td>
+    </tr>
+    <tr>
+        <td>encryptionKeyTransportAlgorithm</td>
+        <td>Key encryption algorithm</td>
+        <td>Use RSA-OAEP<br/>&lt;parameter name="encryptionSymAlgorithm"&gt;
+            http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p&lt;/parameter&gt;</td>
+    </tr>
+    <tr>
+        <td>signatureParts</td>
+        <td>Sign multiple parts in the SOAP message</td>
+        <td>Sign Foo and Bar elements qualified by "http://app.ns/ns"<br/>&lt;signatureParts&gt;
+            {Element}{http://app.ns/ns}Foo;{Element}{http://app.ns/ns}Bar &lt;/signatureParts&gt;
+        </td>
+    </tr>
+    <tr>
+        <td>optimizeParts</td>
+        <td>MTOM Optimize the elements specified by the XPath query</td>
+        <td>Optimize the CipherValue<br/>&lt;optimizeParts&gt;
+            //xenc:EncryptedData/xenc:CipherData/xenc:CipherValue &lt;/optimizeParts&gt;</td>
+    </tr>
+</table>
+<br/>
+
+<h3>InflowSecurity parameter</h3>
+
+<p>This parameter is used to configure the inflow security handler. The 'action' element is used to
+   encapsulate the configuration elements here as well. The schema of the 'action' element is
+   available here.
+    <a href="#ex3">Example 3</a> shows the configuration to decrypt, verify signature and validate
+                                 timestamp.</p>
+<table border="1">
+    <tr>
+        <td><b>Parameter</b></td>
+        <td><b>Description</b></td>
+        <td><b>Example</b></td>
+    </tr>
+    <tr>
+        <td>items</td>
+        <td>Security actions for the inflow</td>
+        <td>first the incoming message should be decrypted and then the signatures should be
+            verified and should be checked for the availability of the Timestamp <br/>&lt;items&gt;
+            Timestamp Signature Encrypt&lt;/items&gt;</td>
+    </tr>
+    <tr>
+        <td>passwordCallbackClass</td>
+        <td>Callback class used to obtain password for decryption and UsernameToken
+            verification</td>
+        <td><br/>&lt;passwordCallbackClass&gt; org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;
+        </td>
+    </tr>
+    <tr>
+        <td>signaturePropFile</td>
+        <td>Property file used for signature verification</td>
+        <td><br/>&lt;signaturePropFile&gt; sig.properties&lt;/signaturePropFile&gt;</td>
+    </tr>
+    <tr>
+        <td>decryptionPropFile</td>
+        <td>Property file used for decryption</td>
+        <td><br/>&lt;decryptionPropFile&gt; dec.properties&lt;/decryptionPropFile&gt;</td>
+    </tr>
+</table>
+<br/>
+
+<p>Please note that the '.properties' files used in properties such as OutSignaturePropFile are the
+   same property files that are using in the WSS4J project.
+   Following shows the properties defined in a sample property file</p>
+
+<source>
+    <pre>
+        org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+        org.apache.ws.security.crypto.merlin.keystore.type=pkcs12
+        org.apache.ws.security.crypto.merlin.keystore.password=security
+        org.apache.ws.security.crypto.merlin.keystore.alias=16c73ab6-b892-458f-abf5-2f875f74882e
+        org.apache.ws.security.crypto.merlin.alias.password=security
+        org.apache.ws.security.crypto.merlin.file=keys/x509.PFX.MSFT
+    </pre>
+</source>
+
+org.apache.ws.security.crypto.provider defines the implementation of the
+org.apache.ws.security.components.crypto.Crypto
+interface to provide the crypto information required by WSS4J. The other properties defined are the
+configuration
+properties used by the implementation class (org.apache.ws.security.components.crypto.Merlin).
+
+<p><b>References</b></p>
+
+<p>1. <a href="http://ws.apache.org/wss4j">Apache WSS4J</a></p>
+<br/>
+
+<p><b>Examples</b></p>
+
+<p id="ex1">Example 1: An outflow configuration to add a timestamp, sing and encrypt
+            the message once</p>
+
+<p><img alt="" src="sec-conf/out-sample.png"/>
+</p>
+
+<p id="ex2">Example 2: An outflow configuration to sign the message twice and add a timestamp</p>
+
+<p><img alt="" src="sec-conf/out-sample2.png"/>
+</p>
+
+<p id="ex3">Example 3: An inflow configuration to decrypt, verify signature and validate
+            timestamp</p>
+
+<p><img alt="" src="sec-conf/in-sample.png"/>
+</p>
+</body></html>
\ No newline at end of file

Added: webservices/axis2/trunk/java/xdocs/latest/tcp-transport.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/tcp-transport.html?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/tcp-transport.html (added)
+++ webservices/axis2/trunk/java/xdocs/latest/tcp-transport.html Wed Mar 22 23:38:30 2006
@@ -0,0 +1,96 @@
+<html>
+<head>
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta http-equiv="content-type" content="">
+  <title>TCP transport</title>
+</head>
+
+<body lang="en">
+<h1>TCP transport</h1>
+
+<p>Axis2 supports TCP as a transport. Axis2 has support for both send and
+receive SOAP Messages via TCP. TCP transport does not have any application
+level headers and the SOAP Message that is send should be self contained.
+This makes the interaction fast and simple. Since there are no application
+headers, it does not have the privilege of having request URI, and Service
+dispatching should be done with a alternative method. Thus,
+RequestURIBasedDispatcher can not be used. Following are the two main
+alternatives available in dispatching in Axis2 Environment.</p>
+<ol>
+  <li>Use the name space URI of the first child element of SOAPBody.
+    (SOAPMessageBodyBasedDispatcher)</li>
+  <li>Enable the WS-Addressing. In the case of 0.95 release addressing is
+    default (SOAPActionBasedDispatcher)</li>
+</ol>
+
+<p>When TCP request is sent it's user's responsibility to use either
+addressing or SOAP body base mechanism.</p>
+
+<h2>How to start the TCPServer</h2>
+
+<p>The TCP server can be started by running the class
+org.apache.axis2.transport.tcp.TCPServer with two parameters <a
+href="faq.html#b5">repository</a> and port number as argument. This class
+needs all the axis dependency jars in the classpath. New Services can be
+added in the usual way by dropping the archives to repository (See <a
+href="userguide.html">User Guide</a> for more information)</p>
+
+<p>Alternatively the TCP Server can run with tcp-server.bat/ tcp-server.sh
+file in the bin directory of the Binary distribution of TCP Server.</p>
+
+<h2>How to send SOAP Messages using TCP transport</h2>
+
+<p>The TCP transport can be enabled easily from the call API. Following code
+segment demonstrate how it can be done.</p>
+<source><pre>OMElement payload = ...
+
+ServiceClient serviceClient = new ServiceClient();
+Options options = new Options();
+options.setTo(targetEPR);
+options.useSeperateListener(false);
+serviceClient.setOptions(options);
+
+OMElement response =
+        serviceClient.sendReceive(payload);</pre>
+</source>
+<p>The transport that should be invoked is inferred from the targetEPR
+(tcp://...). In this case it is TCP and the listener, also TCP . SOAP Message
+has to be self contained in order to use addressing. Only other option one
+can think of is to use the URI of the first child of the SOAP Body to
+dispatch the service. The Parameter is of the type <a
+href="faq.html#a2">OMElement</a>, the XML representation of Axis2.</p>
+
+<h2>Sample</h2>
+
+<p>Sample for a TCP Client can be found from the
+samples/userguide/src/userguide/clients/TCPClient.java in the binary
+distribution. This access the same web service explained in the <a
+href="userguide.html">Axis2 userguide</a>. The client first starts the
+TCPServer with the same repository used for the <a
+href="userguide.html#samples">Axis2 userguide samples</a>. Since sample is
+already deployed in the repository while trying the userguide it will be
+automatically available.</p>
+
+<h2>Transport Components</h2>
+
+<p>Axis2 TCP transport has two components, a transport Listener for receiving
+the Messages and transport Sender to send the SOAP Messages. Axis2
+installation has both the components built in to itself by default. In the
+axis2.xml configuration file the two TCP transport components would look like
+as follows.</p>
+
+<p>If the TCP server is started manually this configuration does not take
+effect. In return this effects the transport Listener's start by Axis2. (e.g.
+Listener started by the Complete Async interaction)</p>
+
+<p>Following xml lines initializes the TCPTransport Receiver:</p>
+<source><pre>&lt;transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPServer"&gt;
+    &lt;parameter name="port" locked="false"&gt;6060&lt;/parameter&gt;
+&lt;/transportReceiver&gt;</pre>
+</source>
+<p>Following xml lines adds the TCPTransport Sender:</p>
+<source><pre>&lt;transportSender name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportSender"/&gt;</pre>
+</source></body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/latest/transport_howto.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/transport_howto.html?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/transport_howto.html (added)
+++ webservices/axis2/trunk/java/xdocs/latest/transport_howto.html Wed Mar 22 23:38:30 2006
@@ -0,0 +1,218 @@
+<html>
+<head>
+  <meta http-equiv="content-type" content="">
+  <title></title>
+</head>
+
+<body>
+<h1>How to write your own Axis2 transport</h1>
+
+<h2>Prologue</h2>
+
+<p>To stop you from reinventing the wheel I will quickly list the transports
+that are already supported in Axis2 with a small description before we get
+started.</p>
+
+<p></p>
+<ul>
+  <li><b>HTTP</b> - In the HTTP transport, the transport Listener is a
+    Servlet or a Simple HTTP server provided by Axis2. The transport Sender
+    uses sockets to connect and send the SOAP Message. Currently we have the
+    commons-httpclient based HTTP Transport sender as the default
+  transport.</li>
+  <li><b>TCP</b> This is the most simple transport, but needs addressing
+    support to be functional.</li>
+  <li><b>SMTP</b> This can work off a single email account or a mailserver.
+    The Mail Transport Receiver is a tread that checks for emails in fixed
+    time intervals.</li>
+</ul>
+
+<p>To understand the rest of this document you will need some understanding
+of the Architecture of Axis2. Therefor if you are not familiar with the
+Architecture of Axis2 you will have to first read the <a
+href="Axis2ArchitectureGuide.html">Axis2 Architecture Guide</a> before you
+read any further.</p>
+
+<h2>Introduction</h2>
+
+<p>Broadly speaking a transport inside Axis2 can be classified as a way of
+getting a messages that arrive though some channel into the Axis2 engine. The
+core of Axis2 is transport independent. All data that is transport specific
+is striped out of the incoming message and inserted into the MessageContext
+and on the outgoing message all transport specific information like headers
+are added and sent.</p>
+
+<p>To write your own transport you will need to primarily write two classes,
+one is the TransportSender and the other is the TransportReceiver. To
+register a transport with Axis2 you will need to put two entries in the
+axis2.xml file. One for the transport receiver and the other for the
+transport sender. We will walk though the process of adding the entries in
+the relevent sections.</p>
+
+<h2>Transport Receiver</h2>
+
+<p>Any message that is comming into Axis2 needs to go though a transport
+receiver. All information about how the message is received at the Axis2
+server from the wire [or by snail mail for that matter:)] is isolated inside
+the transport receiver. It extracts the data that is coming on the wire and
+transforms it into a state that the Axis2 server understands.</p>
+
+<p>So now that we have some background information about how transports work
+inside Axis2 with out further delay why don't we dive into some coding and
+start building out own transport.</p>
+
+<p></p>
+
+<p>To get things stared you will first need to extend from the
+org.apache.Axis2.transport.TransportListener class and write you own
+transport listener. To create an engine to process the MessageContext we need
+a configuration context. The following code fragment will do this. This
+should ideally be only done once for the lifetime of the Transport
+receiver.</p>
+
+<p><source></p>
+<pre>try {
+        //Create a factory 
+        ConfigurationContextFactory factory = new ConfigurationContextFactory();
+        //Use the factory and an Axis2 repository to create a new Configuration Context
+        configurationContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repository_directory, 
+axis2xmllocation);
+} catch (Exception e) {
+        log.info(e.getMessage());
+}</pre>
+</source>
+<p>Now we need some kind of a listener to listen to the requests that come
+in. This you will need to implement according to the transport that you are
+trying to build. After a message is received at the receiver you can use the
+following code to process the request and then forward the message context to
+the engine using thing the engine.receive(msgContext) method.{Following code
+snippet extracted from MailListener as an example}</p>
+<source><pre>AxisEngine engine = new AxisEngine(configurationContext);
+MessageContext msgContext = null;
+// create and initialize a message context
+try {
+        TransportInDescription transportIn =
+                reg.getAxisConfiguration().getTransportIn(new QName(Constants.TRANSPORT_NAME));
+        TransportOutDescription transportOut =
+                reg.getAxisConfiguration().getTransportOut(new QName(Constants.TRANSPORT_NAME));
+        if (transportIn != null &amp;&amp; transportOut != null) {
+                //create Message Context
+                msgContext = new MessageContext(configurationContext, transportIn, transportOut);
+                msgContext.setServerSide(true);
+                msgContext.setProperty(MailSrvConstants.CONTENT_TYPE, message.getContentType());
+                msgContext.setProperty(MessageContext.CHARACTER_SET_ENCODING, message.getEncoding());
+
+                String soapAction = message.getSOAPActionHeader();
+                msgContext.setWSAAction(soapAction);
+                msgContext.setSoapAction(soapAction);
+
+                // Here we are trying to set the reply to if it is present in the transport information.
+                msgContext.setReplyTo(new EndpointReference(message.getReplyTo());
+
+                //Create the SOAP Message -- This code in from the mail transport and will change depending
+                //on how the data is handled in each transport.
+                ByteArrayInputStream bais = new ByteArrayInputStream(message.getContent().toString().getBytes());
+                XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(bais);
+
+                String soapNamespaceURI = "";
+                if(message.getContentType().indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) &gt; -1){
+                        soapNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+                }else if(message.getContentType().indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) &gt; -1){
+                        soapNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+                }
+
+                StAXBuilder builder = new StAXSOAPModelBuilder(reader, soapNamespaceURI);
+
+                SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
+                msgContext.setEnvelope(envelope);
+                if (envelope.getBody().hasFault()) {
+                        engine.receiveFault(msgContext);
+                } else {
+                        engine.receive(msgContext);
+                }
+        } else {
+                throw new AxisFault(Messages.getMessage("unknownTransport",Constants.TRANSPORT_NAME));
+        }
+
+} catch (Exception e) {
+        try {
+                if (msgContext != null) {
+                        MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                        engine.sendFault(faultContext);
+                } else {
+                        log.error(e);
+                }
+        } catch (AxisFault e1) {
+                log.error(e);
+        }
+}</pre>
+</source>
+<p>Now we have the coding in place and we need to let Axis2 know about our
+new transport receiver. How we do this is by addind an entry into the
+axis2.xml file. If you need to pass any properties for the transport to
+operate it can also be done through the axis2.xml file.</p>
+<source><pre>   &lt;transportReceiver name="TRANSPORT_NAME" class="org.apache.Axis2.transport.TRANSPORT_NAME.TRANSPORT_LISTNER_CLASS"&gt;
+        &lt;parameter name="PROPERTY_NAME" locked="false"&gt;PROPERTY_VALUE&lt;/parameter&gt;
+        &lt;parameter name="PROPERTY_NAME_2" locked="false"&gt;PROPERTY_VALUE_2&lt;/parameter&gt;
+  &lt;/transportReceiver&gt;
+  </pre>
+</source>
+<p>Using a code fragment like
+Utils.getParameterValue(transportOut.getParameter(MailSrvConstants.SMTP_USER))
+we can extract the parameters that we insert into the axis2.xml file.</p>
+
+<p>So as you can see getting a new transport receiver up and running is a
+task that requires very little effort.</p>
+
+<h2>Transport Sender</h2>
+
+<p>Any message that is to be sent out from Axis2 is sent through the
+Transport Sender. The Transport Sender needs to be extended from the
+org.apache.Axis2.transport.AbstractTransportSender class.</p>
+
+<p>The following bit of code from the abstract transport sender will call the
+Transport Sender that you wrote.</p>
+<source><pre>// If an EPR is present then the message is going on a diffrent channel.
+if (epr != null) {
+        out = openTheConnection(epr, msgContext);
+        OutputStream newOut = startSendWithToAddress(msgContext, out);
+        if (newOut != null) {
+                out = newOut;
+        }
+        writeMessage(msgContext, out);
+        finalizeSendWithToAddress(msgContext, out);
+        } else {
+        out = (OutputStream) msgContext.getProperty(MessageContext.TRANSPORT_OUT);
+        if (out != null) {
+                startSendWithOutputStreamFromIncomingConnection(msgContext, out);
+                writeMessage(msgContext, out);
+                finalizeSendWithOutputStreamFromIncomingConnection(msgContext, out);
+        } else {
+                throw new AxisFault(
+                        "Both the TO and Property MessageContext.TRANSPORT_WRITER is Null, No way to send response.");
+        }
+}</pre>
+</source>
+<p>So depending on whether your transport is using the same channel to send
+the responce or using a different channel you will need to implement a
+sub-set of the methods from the abstract class.</p>
+
+<p>After implementing the necessary methods you can let Axis2 know about your
+new transport sender by adding an entry to the axis2.xml file like you did
+for the Transport Receiver.</p>
+<source><pre>   &lt;transportSender name="TRANSPORT_NAME" class="org.apache.Axis2.transport.TRANSPORT_NAME.TRANSPORT_SENDER_CLASS"&gt;
+        &lt;parameter name="PROPERTY_NAME" locked="false"&gt;PROPERTY_VALUE&lt;/parameter&gt;
+        &lt;parameter name="PROPERTY_NAME_2" locked="false"&gt;PROPERTY_VALUE_2&lt;/parameter&gt;
+  &lt;/transportSender&gt;
+  </pre>
+</source>
+<p>Have a look at org.apache.Axis2.transport.mail.MailTransportSender for a
+very simple Transport Sender. Also have a look at
+org.apache.Axis2.transport.http.CommonsHTTPTransportSender which is used to
+send HTTP responses.</p>
+
+<p>Once we have written our transport receiver and our transport sender, and
+inserted the needed entries into the axis2.xml file we are done. It is as
+simple as that. :-)</p>
+</body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/latest/userguide.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/userguide.html?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/userguide.html (added)
+++ webservices/axis2/trunk/java/xdocs/latest/userguide.html Wed Mar 22 23:38:30 2006
@@ -0,0 +1,183 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <meta http-equiv="content-type" content="">
+  <title>Axis2 User's Guide</title>
+</head>
+
+<body lang="en-US" dir="ltr">
+<h1 align="center"><a name="_Toc96697849" id="_Toc96697849"></a>Axis2 User's
+Guide</h1>
+
+<p><i>Version 0.95</i></p>
+
+<p align="right">Pages: <b>Content</b>, <a href="userguide1.html">1</a>, <a href="userguide2.html">2</a>, <a
+href="userguide3.html">3</a>, <a href="userguide4.html">4</a>, <a href="userguide5.html" >5</a></p>
+
+<h2>Content</h2>
+<ul>
+  <li><p><a href="userguide1.html#Axis2_User's_Guide">Introduction</a></p>
+    <ul>
+      <li><a href="userguide1.html#Attention">Attention</a></li>
+      <li><a href="userguide1.html#What_is_Axis2_">What is Axis2?</a></li>
+      <li><a href="userguide1.html#Axis2_Complete_Features_List">Axis2
+        Complete Features List</a>
+        <ul>
+          <li><a
+            href="userguide1.html#Experimental_Features_List">Experimental
+            Features List</a></li>
+          <li><a
+            href="userguide1.html#Major_Changes_Since_Last_Release">Major
+            Changes Since Last Release</a></li>
+        </ul>
+      </li>
+      <li><a href="userguide1.html#Tools_included_in this_Release">Tools
+        included in this Release</a></li>
+      <li><a href="userguide1.html#What's_still_to_do_">What's still to
+        do?</a></li>
+    </ul>
+  </li>
+  <li><p><a href="userguide2.html#Axis2_User's_Guide">Web Services Using
+    Axis2</a></p>
+    <ul>
+      <li><a
+        href="userguide2.html#Writing_Web_Services_Using Axis2's_Primary_APIs">Writing
+        Web Services using Axis2 APIs</a>
+        <ul>
+          <li><a
+            href="userguide2.html#Creating_Web_Service__MyService_">Creating
+            Web Service (MyService)</a></li>
+          <li><a href="userguide2.html#How_to_write_the_Web_Service_">How to
+            write the Web Service?</a>
+            <ul>
+              <li><a
+                href="userguide2.html#Step1_:Write_the_Implementation_Class">Step1
+                :Write the Implementation Class</a></li>
+              <li><a
+                href="userguide2.html#Step2_:Write_the_services_xml_file">Step2
+                :Write the services.xml file</a></li>
+              <li><a
+                href="userguide2.html#Step3_:Create_the_Web_Service_Archive">Step3
+                :Create the Web Service Archive</a></li>
+              <li><a
+                href="userguide2.html#Step4_:Deploy_the_Web_Service">Step4
+                :Deploy the Web Service</a></li>
+            </ul>
+          </li>
+        </ul>
+      </li>
+      <li><p><a
+        href="userguide2.html#Writing_Web_Services_by_Code_Generating_Skeleton">Writing
+        Web Services by Code Generating Skeleton</a></p>
+        <ul>
+          <li><a href="userguide2.html#WSDL2Java_Tool">WSDL2Java Tool</a></li>
+          <li><a
+            href="userguide2.html#Implement_the_Business_Logic">Implement the
+            Business Logic</a></li>
+          <li><a href="userguide2.html#echoString">echoString</a></li>
+          <li><a
+          href="userguide2.html#echoStringArray">echoStringArray</a></li>
+          <li><a href="userguide2.html#echoStruct">echoStruct</a></li>
+          <li><a href="userguide2.html#services_xml">services.xml</a></li>
+          <li><a href="userguide2.html#Packaging">Packaging</a></li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+</ul>
+<ul>
+  <li><p><a href="userguide3.html#Axis2_User's_Guide">Web Service Clients
+    Using Axis2</a></p>
+    <ul>
+      <li><a
+        href="userguide3.html#Writing_Web_Service_Clients_using_Axis2's_Primary_APIs">Writing
+        Web Service Clients using Axis2's Primary APIs</a>
+        <ul>
+          <li><a
+            href="userguide3.html#EchoBlockingClient">EchoBlockingClient</a></li>
+          <li><a href="userguide3.html#PingClient">PingClient</a></li>
+          <li><a
+            href="userguide3.html#EchoNonBlockingClient">EchoNonBlockingClient</a></li>
+          <li><a
+            href="userguide3.html#EchoNonBlockingDualClient">EchoNonBlockingDualClient</a></li>
+          <li><a
+            href="userguide3.html#EchoBlockingDualClient">EchoBlockingDualClient</a></li>
+        </ul>
+      </li>
+      <li><p><a
+        href="userguide3.html#Writing_Web_Service_Clients_using_Code_Generation_with_Data_Binding_Support">Writing
+        Web Service Clients using Code Generation with Data Binding
+        Support</a></p>
+        <ul>
+          <li><a href="userguide3.html#Client_for_echoVoid_Operation">Client
+            for echoVoid Operation</a></li>
+          <li><a
+            href="userguide3.html#Client_for_echoString_Operation">Client for
+            echoString Operation</a></li>
+          <li><a href="userguide3.html#Client_for_echoStringArray_Operation">Cient for
+            echoStringArray Operation</a></li>
+          <li><a
+            href="userguide3.html#Client_for_echoStruct_Operation">Client for
+            echoStruct Operation</a></li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li><p><a href="userguide4.html#Axis2_User's_Guide">Modules</a></p>
+    <ul>
+      <li><a href="userguide4.html#MyService_with_a_Logging_Module">MyService
+        with a Logging Module</a>
+        <ul>
+          <li><a href="userguide4.html#Step1_:_LoggingModule_Class">Step1 :
+            LoggingModule Class</a></li>
+          <li><a href="userguide4.html#Step2_:_LogHandler">Step2 :
+            LogHandler</a></li>
+          <li><a href="userguide4.html#Step3_:_module_xml">Step3 :
+            module.xml</a></li>
+          <li><a
+            href="userguide4.html#Step_4:_Modify_the_&quot;axis2_xml&quot;">Step
+            4: Modify the "axis2.xml"</a></li>
+          <li><a
+            href="userguide4.html#Step5_:_Modify_the_&quot;services_xml&quot;">Step5
+            : Modify the "services.xml"</a></li>
+          <li><a href="userguide4.html#Step6_:_Packaging">Step6 :
+            Packaging</a></li>
+          <li><a
+            href="userguide4.html#Step7_:_Deploy_the_Module_in_Axis2">Step7 :
+            Deploy the Module in Axis2</a></li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li><p><a href="userguide5.html#Axis2_User's_Guide">Other Samples</a></p>
+    <ul>
+      <li><a href="userguide5.html#Google_Spell_Checker_Sample">Google Spell
+        Checker Sample</a></li>
+      <li><a href="userguide5.html#Google_Search_Sample">Google Search
+        Sample</a></li>
+      <li><a href="userguide5.html#Amazon_Queuing_Service">Amazon Queuing
+        Service</a></li>
+    </ul>
+  </li>
+  <li><p>Advanced Topics</p>
+    <ul>
+      <li><a href="rest-ws.html" target="_blank">RESTful Web Services</a></li>
+      <li><a href="tcp-transport.html" target="_blank">TCP transport</a></li>
+      <li><a href="mail-transport.html" target="_blank">Mail
+      Transport</a></li>
+      <li><a href="http-transport.html" target="_blank">HTTP
+      Transports</a></li>
+      <li><a href="mtom-guide.html" target="_blank">MTOM with Axis2</a></li>
+      <li><a href="security-module.html" target="_blank">Securing SOAP
+        Messages with WSS4J</a></li>
+    </ul>
+  </li>
+</ul>
+
+<p align="right"><a href="userguide1.html">Next Page <img
+src="images/arrow_right.gif"></a></p>
+
+<p>Pages: <b>Content</b>, <a href="userguide1.html">1</a>, <a href="userguide2.html">2</a>, <a href="userguide3.html">3</a>, <a href="userguide4.html">4</a>, <a
+href="userguide5.html">5</a></p>
+</body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/latest/userguide1.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/userguide1.html?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/userguide1.html (added)
+++ webservices/axis2/trunk/java/xdocs/latest/userguide1.html Wed Mar 22 23:38:30 2006
@@ -0,0 +1,227 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+  <meta http-equiv="content-type" content="">
+  <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>Version 0.95</i></p>
+<i>User Feedback: <a
+href="mailto:axis-user@ws.apache.org">axis-user@ws.apache.org</a></i>
+
+<p align="right">Pages: <a href="userguide.html">Content</a>, <b>1</b>, <a href="userguide2.html">2</a>, <a href="userguide3.html">3</a>, <a
+href="userguide4.html">4</a>, <a href="userguide5.html">5</a></p>
+
+<h2><a name="Introduction">Introduction</a></h2>
+
+<p>Welcome to Axis2, the next generation of Apache Axis!!! This User's Guide
+will help you to understand what Axis2 has to offer and how to get started
+with it. We hope you will benefit from the power of Axis2.</p>
+
+<h3><a name="Attention">Attention</a></h3>
+<ul>
+  <li><p style="margin-bottom: 0in">This User's Guide is written based on
+    Axis2 standard binary distribution. (The standard binary distribution can
+    be created from the source distribution using the maven goal <code>$maven
+    dist-std-bin</code>). Please refer the <a
+    href="installationguide.html#Download_Axis2">installation guide</a> for further
+    information on the downloadables available in this release.</p>
+  </li>
+  <li><p>If you are new to Axis, it's highly recommended that you read <a
+    href="http://ws.apache.org/axis/java/user-guide.html" target="_blank">Axis 1.x User's
+    Guide</a> before you go any further in this guide.</p>
+  </li>
+</ul>
+
+<h3><a name="What_is_Axis2_">What is Axis2?</a></h3>
+
+<p>Axis2 is the next generation of Apache Axis. In late August 2004, during
+the Axis2 Summit held in Colombo, Sri Lanka, a new architecture for Axis was
+introduced which was much more flexible, efficient and configurable. Although
+the architecture is new, some of the well established concepts from Axis 1.x
+like handlers are preserved in Axis2. Axis2 comes with many new features,
+enhancements and industry specification implementations.</p>
+
+<p>After months of continued discussion and coding in this direction, Axis2
+now delivers the following key features:</p>
+<ul>
+  <li><p style="margin-bottom: 0in"><strong>Speed</strong> - Axis2 uses its
+    own object model and StAX (Streaming API for XML) parsing to achieve
+    significantly greater speed than earlier versions of Apache Axis.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Low memory foot print</strong>-
+    Axis2 was designed ground-up keeping low memory foot print in mind.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>AXIOM</strong> - Axis2 comes with
+    its own light-weight object model, AXIOM, for message processing which is
+    extensible, high performance and developer convenient</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong><a name="Hot_Deployment">Hot
+    Deployment</a></strong> - Axis2 is equipped with the capability of
+    deploying web service &amp; handlers while system is up and running. In
+    other words, new services can be added to the system without having to
+    shut down server.Drop the required Web service archive into the services
+    directory in the repository and deployment model will automatically
+    deploy the service and make it available for use.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Asynchronous Web
+    Services</strong> - Axis2 now supports asynchronous web services &amp;
+    asynchronous web services invocation using non-blocking clients and
+    transports .</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>MEP Support</strong> - Axis2 now
+    comes handy with the flexibility to support Message Exchange Patterns
+    (MEPs) with in-built support for basic MEPs defined in WSDL 2.0.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Flexibility</strong> - The Axis2
+    architecture gives the developer complete freedom to insert extensions
+    into the engine for custom header processing, system management, or
+    <em>anything else you can imagine</em>.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Stability</strong> - Axis2
+    defines a set of published interfaces which change relatively slowly
+    compared to the rest of Axis.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Component-oriented
+    Deployment</strong> - You can easily define reusable networks of Handlers
+    to implement common patterns of processing for your applications, or to
+    distribute to partners.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Transport Framework</strong> - We
+    have a clean and simple abstraction for integrating and using Transports
+    (i.e., senders and listeners for SOAP over various protocols such as
+    SMTP, FTP, message-oriented middleware, etc), and the core of the engine
+    is completely transport-independent.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>WSDL support</strong> - Axis2
+    supports the <a href="http://www.w3.org/TR/wsdl" target="_blank">Web Service Description
+    Language</a>, version 1.1 and 2.0, which allows you to easily build stubs
+    to access remote services, and also to automatically export
+    machine-readable descriptions of your deployed services from Axis2.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Add-ons</strong> Several web
+    services specifications have been incorporated including <a
+    href="http://ws.apache.org/wss4j/" target="_blank">WSS4J</a> for security, <a
+    href="http://ws.apache.org/sandesha/" target="_blank">Sandesha</a> for reliable
+    messaging, <a href="http://ws.apache.org/kandula/" target="_blank">Kandula</a> which is
+    an encapsulation of WS-Coordination, WS-AtomicTransaction and
+    WS-BusinessActivity.</p>
+  </li>
+  <li><p style="margin-bottom: 0in"><strong>Composition and
+    Extensibility</strong> - modules and phases improve support for
+    composability and extensibility. Modules supports composability and is
+    able to add support for new WS-* specifications in a simple and clean
+    manner. They are however not <a href="#Hot_Deployment">hot deployable</a>
+    as they change the overall behavior of the system.</p>
+  </li>
+</ul>
+
+<p>We hope you enjoy using Axis2. Please note that this is an open-source
+effort. If you feel the code could use some new features or fixes, please get
+involved and lend us a hand! The Axis developer community welcomes your
+participation.</p>
+
+<p>Let us know what you think!</p>
+
+<p>Please send your feedback on Axis2 to "<a
+href="mailto:axis-user@ws.apache.org">axis-user@ws.apache.org</a>" and make
+sure to prefix the subject of the mail with [Axis2].</p>
+
+<h3><a name="Axis2_Complete_Features_List">Axis2 Complete Features
+List</a></h3>
+<ol type="1"> 
+ <li>AXIOM, an XML object model working on StAX (Streaming API for XML) parsing optimized for SOAP 1.1/1.2 Messages. This has complete XML infoset support.</li>
+ <li>Support for One-Way Messaging (In-Only) and Request Response Messaging (In-Out)</li>
+ <li>Module Architecture, mechanism to extend the SOAP Processing Model</li>
+ <li>Module version support , can have multiple versions of the same module and use them depending on the requirement.</li>
+ <li>Content hierarchy</li>
+ <li>Archive based deployment Model and Directory based deployment model</li>
+ <li>JWS like deployment (making Java class into Web service)</li>
+ <li>WSDL Code Generation Tool for Stub and skeletons</li>
+ <li>WS-Addressing, both the submission (2004/08) and final (2005/08) versions</li>
+ <li>WSS4J module for security</li>
+ <li>Improved and user friendly Client API</li>
+ <li>WSDL2Java and Java2WSDL</li>
+ <li>REST (REpresentational State Transfer) Support</li>
+ <li>Transports supports: HTTP, SMTP, TCP, JMS</li>
+ <li>Raw XML providers</li>
+ <li>Support for MTOM/ MIME/ SwA</li>
+ <li>SAAJ implementation</li>
+ <li>DOOM</li>
+ <li>Pack/Unpack capability for the generated code</li>
+ <li>Axis Data Binding - ADB (Framework and Schema Compiler)</li>
+ <li>Numerous bug fixes since last release</li>
+ <li>Transport framework improvements (ListenerManager)- <span style="color: #FF0000">New</span></li>
+ <li>AxisServlet auto start when application server get start up- <span style="color: #FF0000">New</span></li>
+ <li>Module dis-engagemnt support- <span style="color: #FF0000">New</span></li>
+ <li>Loading module (.mar) from classpath- <span style="color: #FF0000">New</span></li>
+ <li>Sessions scoping for Application, SOAP, Transport and Request levels-<span style="color: #FF0000">New</span></li>
+</ol>
+
+<h4><a name="Experimental_Features_List">Experimental Features List</a></h4>
+<ol type="1">
+ <li><a href="WS_policy.html" target="_blank">Server side & client side Web Service Policy support</a></li>
+ <li>?wsdl and ?xsd support</li>
+ <li>Generating ServiceClient for a given WSDL and invoke the corresponding service using generated client.</li>
+</ol>
+
+<h4><a name="Major_Changes_Since_Last_Release">Major Changes Since Last
+Release</a></h4>
+<ol type="1">
+   <li>Transport framework improvements (ListenerManager)</li>
+   <li>Changed the way of adding action to mapping (wsamapping) from parameter to child element so with this version onward the way of adding mapping is as follows:</li>
+   <pre>
+   
+&lt;actionMapping&gt;MyMapping&lt;/actionMapping&gt;
+
+</pre>
+<li>Refactored following packages in Axiom.
+    <ul>
+     <li>org.apache.ws.commons.om.impl.llom.builder to org.apache.ws.commons.om.impl.builder</li>
+     <li>org.apache.ws.commons.om.impl.llom.mtom to org.apache.ws.commons.om.impl.mtom</li>
+     <li>org.apache.ws.commons.om.impl.llom.serialize to org.apache.ws.commons.om.impl.serialize</li>
+     <li>org.apache.ws.commons.om.impl.llom.traverse to org.apache.ws.commons.om.impl.traverse</li> 
+   </li>
+</ol>
+
+<h3><a name="Tools_included_in this_Release">Tools Included In This
+Release</a></h3>
+<ol type="1">
+  <li>Axis2 Web Application (Web App)</li>
+  <li>WSDL2WS- <a href="CodegenTools-EclipsePlugin.html" target="_blank">Eclipse
+    plugin</a><a>/</a><a href="CodegenToolReference.html" target="_blank">Command line
+    version</a><!--<a>/</a><a
+    href="tools\idea\Idea_plug-in_userguide.html#WSDL2Java_Code_Generation" target="_blank">IntelliJ
+    IDEA plugin</a>--></li>
+  <li>Service Archive Wizard- <a
+    href="ServiceArchiveToolReference.html" target="_blank">Eclipse plugin</a><!--/ <a
+    href="tools\idea\Idea_plug-in_userguide.html#Create_Service_Archive" target="_blank">IntelliJ
+    IDEA plugin</a>--></li>
+</ol>
+<a href="http://ws.apache.org/axis2/download.cgi" target="_blank">Download</a> above plugins
+
+<h3><a name="What's_still_to_do_">What's Still To Do?</a></h3>
+
+<p>See list of what we think needs to be done, and consider helping out if
+you're interested &amp; able!</p>
+<ol type="1">
+ <li>JAX-RPC 1.1 and/or JAX-WS compliance</li>
+ <li>SOAP Encoding</li>
+ <li>Binary serialization and de-serialization support</li>
+ <li>Management Interface for Axis2</li>
+ <li>Implementation of other Transports.</li>
+ <li>Resource framework implementation (WS-RF) and Enterprise web services such as JSR 109 support</li>
+ <li>Completion of Interop tests</li>
+</ol>
+
+<p align="right"><a href="userguide.html"><img
+src="images/arrow_left.gif"> Previous</a> | <a href="userguide2.html">Next <img src="images/arrow_right.gif"></a></p>
+
+Pages: <a href="userguide.html">Content</a>,
+<b>1</b>, <a href="userguide2.html">2</a>, <a href="userguide3.html"
+>3</a>, <a href="userguide4.html">4</a>, <a
+href="userguide5.html">5</a></body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/latest/userguide2.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/latest/userguide2.html?rev=388085&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/latest/userguide2.html (added)
+++ webservices/axis2/trunk/java/xdocs/latest/userguide2.html Wed Mar 22 23:38:30 2006
@@ -0,0 +1,394 @@
+<!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>
+  <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/">
+</head>
+
+<body lang="en-US" dir="ltr">
+<h4><a name="Axis2_User's_Guide">Axis2 User's Guide</a></h4>
+
+<p><i>Version 0.95</i></p>
+<i>User Feedback: <a
+href="mailto:axis-user@ws.apache.org">axis-user@ws.apache.org</a></i>
+
+<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
+the user's guide samples 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 -&gt;Code generate the Skeleton -&gt;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 
+                                          //responds with another OMElement after processing.</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 a implementation class that provide 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
+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>&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;/operation&gt;
+     &lt;operation name="ping"&gt;
+        &lt;messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/&gt;
+    &lt;/operation&gt;
+ &lt;/service&gt;</pre>
+
+<p><em>The above XML tags can be explained as follows:</em></p>
+
+<p>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>Next comes the description and the service class.</p>
+
+<p>The next two xml tags describe the operations that are available in this
+service with respective message receivers. 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>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>&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 : 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 use ".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.</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/index.jsp"
+target="_blank">Home Page of Axis2 Web Application</a>
+(http://localhost:8080/axis2/index.jsp) 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 &lt;Location of WSDL&gt; : WSDL file location
+-o &lt;output Location&gt; : 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 &lt;package name&gt; : set custom package name
+-l &lt;language&gt; : 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 &lt;databinding&gt; : valid databinding(s) are adb, xmlbeans and jaxme. Default is adb
+-g Generates all the classes. valid only with the -ss
+-pn &lt;port_name&gt; : name of port in the presence of multiple ports
+-sn &lt;service_name&gt; : name of service in the presence of multiple services
+-u : unpacks the databinding classes
+-r &lt;repository_path&gt; : 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 -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 -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/userguide directory
+with the name "Axis2SampleDocLitPortTypeSkeleton.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
+"Axis2SampleDocLitPortTypeSkeleton.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
+"Axis2SampleDocLitPortTypeSkeleton.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) {
+    //To do fill this with the necessary business logic
+    return null;
+ }</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 &lt; 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>&lt;!-- This services.xml file was auto-generated from WSDL --&gt;
+&lt;!-- by the Apache Axis2 version: #axisVersion# #today# --&gt;
+&lt;serviceGroup&gt;
+   &lt;service name="Axis2SampleDocLitService"&gt;
+      &lt;messageReceivers&gt;
+      &lt;messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.userguide.Axis2SampleDocLitPortTypeMessageReceiverInOut"/&gt;
+      &lt;/messageReceivers&gt;
+      &lt;parameter locked="false" name="ServiceClass"&gt;org.apache.axis2.userguide.Axis2SampleDocLitPortTypeSkeleton
+      &lt;/parameter&gt;
+    &lt;!--All public methods of the service class are exposed by default--&gt; 
+   &lt;/service&gt;
+&lt;/serviceGroup&gt;</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 Axis2SampleDocLitPortType.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 "echo.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/index.jsp" target="_blank">Home Page of
+Axis2 Web Application</a> (http://localhost:8080/axis2/index.jsp) and see
+whether the Axis2SampleDocLitPortType is deployed properly. If you can see
+the following output then you have successfully deployed
+Axis2SampleDocLitPortType 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>