                 
                 Axis2 Standard Binary Distribution Installation Guide
                 =====================================================

1. Download and Install the Apache Axis2 Binary Distribution

  Download and install a Java Development Kit (JDK) release (version 1.4 or
  later) from http://java.sun.com/j2se/. Install the JDK according to the
  instructions included with the release. Set an environment variable JAVA_HOME 
  to the pathname of the directory into which you installed the JDK release.

  Download and unpack the Axis2 Standard Binary Distribution into a convenient 
  location so that the distribution resides in its own directory. Set an 
  environment variables AXIS2_HOME to the pathname of the extracted directory 
  of Axis2 (Eg: /opt/axis2-1.1).


2. Starting up Axis2 Standalone Server

  Standalone Axis2 server can be started by executing the following commands:
  			$AXIS2_HOME\bin\axis2server.bat (Windows)
  			$AXIS2_HOME/bin/axis2server.sh (Unix)

  After startup, the default web services included with Axis2 will be available 
  by visiting http://localhost:8080/axis2/services/


3. Building the Axis2 Web Application (axis2.war) Using Standard Binary 
Distribution

  Download and install Apache Ant (version 1.6.5 or later) from http://
  ant.apache.org. Install the Apache Ant according to the instructions included 
  with the Ant release.

  Locate the ant build file (build.xml) inside the webapp directory which 
  resides in your Axis2 home directory (i.e:- $AXIS_HOME/webapp)". Run the Ant 
  build by executing "ant create.war" inside the $AXIS2_HOME/webapps folder. 
  
  You can find the generated axis2.war inside the $AXIS2_HOME/dist directory. 
  All the services and modules that are present in the AXIS2_HOME/repository 
  will be packed in to the created axis2.war together with the Axis2 
  configuration file found at $AXIS2_HOME/conf/axis2.xml.

  Drop the war in the webapps folder of the servlet container. Most servlet 
  containers will automatically install war. (some servlet containers may 
  require a restart in order to capture the new Web application. Refer your 
  servlet container documentation for more information about this.) Once the 
  WAR is successfully installed, test it by pointing the Web browser to the 
  http://<host :port>/axis2. It should produce the the Axis2 Web Application 
  Home Page.
  
  Use the link "Validate" to ensure that everything is fine and smooth. If the 
  validation fails then the war has failed to install properly or some 
  essential jars are missing. At such a situation the documentation of the 
  particular servlet container should be consulted to find the problem. 
  
  Read http://ws.apache.org/axis2/1_1/installationguide.html#servlet_container 
  for more information.
  
   
4. Getting Familiar with the Axis2 Convenient Scripts

   It is advised to add the $AXIS2_HOME/bin to the PATH, so that you'll be able 
   to run the following scripts from any where.

   * axis2.{bat|sh} 	
   
   You can use this script to run Web service clients written using Axis2. This 
   script calls the "java" command after adding the classpath for Axis2 
   dependent libraries (*.jar files present in your AXIS2_HOME/lib), setting 
   the Axis2 repository location (AXIS2_HOME/repository) and setting the Axis2 
   configuration file location(AXIS2_HOME/conf/axis2.xml) for you. With this 
   you can be relieved from setting all the above Axis2 specific parameters.
   
    Usage : axis2.{sh.bat} [-options] class [args...]  

   * axis2server.{bat|sh} 
   
   This script will start an standalone Axis2 server using the AXIS2_HOME/
   repository directory as the Axis2 repository and the AXIS2_HOME/conf/
   axis2.xml as the Axis2 configuration file. This will start all the 
   transport listeners listed in the AXIS2_HOME/conf/axis2.xml.

   For an example, if you want to deploy a service using standalone Axis2 
   server,then copy your service archive to the AXIS2_HOME/repository/services 
   directory. After that go to the "Transport Ins" section of the AXIS2_HOME/
   conf/axis2.xml and configure the tranport receivers (simpleHttpServer in 
   port 8080 is listed by default). Then invoke this script.
   
   
   * wsdl2java.{bat|sh} 	
   
   This script generates Java code according to a given WSDL file to handle Web 
   service invocations (Client side Stubs). This script also has the ability to 
   generate service skeletons according to the given wsdl.
   
     Usage: WSDL2Java.{sh|bat} [OPTION]... -uri <Location of WSDL>
        Eg: WSDL2Java.sh -uri ../wsdl/Axis2Sample.wsdl
        
   A more detailed reference about this script can be found http://
   ws.apache.org/axis2/1_1/reference.html.
   
   
   * java2wsdl.{bat|sh} 	
   
   This script generates the appropriate WSDL file for a given java class.
     Usage: Java2WSDL.{sh|bat} [OPTION]... -cn <fully qualified class name>
        Eg: Java2WSDL.sh -cn ../samples/test/searchTool.Search
        
   A more detailed reference about this script can be found in http://
   ws.apache.org/axis2/1_1/reference.html

Complete Installation Guide
===========================
A complete Installation Guide on Apache Axis2 is available at
http://ws.apache.org/axis2/1_1/installationguide.html or at 
Axis2_HOME/xdocs/1_1/installationguide.html in the extracted Axis2 Docs Distribution.
   
   
