The release comes in two forms, source and binary. 

To get both the binary and source distributions working, you need libxml2 from
http://xmlsoft.org/downloads.html

NOTE: Most Linux systems have libxml2 installed by default. On Windows you need
      to download and install libxml2.

Table of Contents
=================

1. Getting Axis2C working with the binary release on Linux
2. Getting Axis2C working with the source release on Linux
3. Getting Axis2C working with the binary release on Windows (win32)
    3.1 Requirements
    3.2 Binaries in the release
    3.3 Running the binaries
4. Getting Axis2C working with the source release on Windows (win32)
    4.1 Requirements
    4.2 Editing Configure.in file
    4.3 Compiling the source
    4.4 Running the binaries
5. Installing Apache2 Web Server integration module (mod_axis2)
    

1. Getting Axis2C working with the binary release on Linux.
==========================================================

1. Extract the binary tar package to a directory.

2. Set AXIS2C_HOME environment variable pointing to the location where you have
   extracted Axis2C
        AXIS2C_HOME='/your_path_to_axis2c'
        export AXIS2C_HOME

   NOTE: You will need to set AXIS2C_HOME only if you need to run Axis2C samples
         or tests. The reason is that the samples and test codes use AXIS2C_HOME
         to get the path to Axis2C. To write your own services or clients this is
         not a requirement.

3. Run the simple axis server:
        cd /your_path_to_axis2c/bin
        ./axis2_http_server
   This will start the simple axis server on port 9090. To see the possible
   command line options run
        ./axis2_http_server -h

   NOTE: If you run into shared lib problems, set the LD_LIBRARY_PATH
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_path_to_axis2c/lib

4. Run the sample clients in a new shell
        cd /your_path_to_axis2c/bin/samples
        ./echo
   This will invoke the echo service.

        ./math
   This will invoke the math service.

   To see the possible command line options for sample clients run them with
   '-h' option

   NOTE: If you run into shared lib problems, set the LD_LIBRARY_PATH
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_path_to_axis2c/lib


2. Getting Axis2C working with the source release on Linux.
==========================================================

1. Extract the source tar package to a directory

2. Set AXIS2C_HOME environment variable pointing to the location where you want
   to install Axis2C.
        AXIS2C_HOME='/your_desired_path_to_axis2c_installation'
        export AXIS2C_HOME

   NOTE: You will need to set AXIS2C_HOME only if you need to run Axis2C samples
         or tests. The reason is that the samples and test codes use AXIS2C_HOME
         to get the path to Axis2C. To write your own services or clients this is
         not a requirement.

3. Go to the directory where you extracted the source
        cd /your_path_to_axis2c_source

4. Build the source
   This can be done by running the following command sequence in the directory
   where you have extracted the source.

        ./configure --prefix=${AXIS2C_HOME}
        make
        sudo make install

   Please run './configure --help' in respective sub folders for more information 
   on these configure options. 

   NOTE: If you don't provide the --prefix configure option, it will by default
         be installed into "/usr/local/axis2c" directory.

   You may need to try Axis2C with guththila xml parser. You can do it by giving
   "--enable-guththila=yes" as a configure option.
    
        ./configure --enable-guththila=yes [other configuration options]
        make
        sudo make install

   If you need to build with rampart (axis2c security module), 
	./configure --enable-rampart=yes [other configuration options]
	make
	make install

   NOTE : rampart has a dependancy with libssl-dev and openssl

   If you need to get the samples working, you also need to build the samples.
   
   To build the samples:

        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/axis2c/lib/
        cd samples
        ./configure --prefix=${AXIS2C_HOME} --with-axis2_util=${AXIS2C_HOME}/include 
            --with-axiom=${AXIS2C_HOME}/include
        make
        sudo make install

   Please run "./configure --help" in samples folder for more information on
   configure options.

   NOTE: If you don't provide a --prefix configure option, samples will by default
         be installed into "/usr/local/axis2c/samples" directory.

5. Go to the folder where you installed Axis2C.

6. Start simple axis server
        cd ${AXIS2C_HOME}/bin
        ./axis2_http_server

   This will start the simple axis server on port 9090. To see the possible command
   line options run:
        ./axis2_http_server -h

   NOTE: You may need to be login as superuser to run the simple axis server.

8. Run the sample clients in a new shell
        cd ${AXIS2C_HOME}/bin/samples
        ./echo
   This will invoke the echo service.

        ./math
   This will invoke the math service.

   To see the possible command line options for sample clients, run them with
   '-h' option.


3. Getting Axis2C working with the binary release on Windows.
============================================================

3.1 Requirements
----------------

    * The binaries shipped with this version are compiled with Microsoft Visual
      Studio compiler (cl) 

    Note: You can download Microsoft VS Express2005 Edition from Microsoft 
          website and install it to run these binaries

    * You also need the following dlls
        - libxml2.dll [http://www.xmlsoft.org - version >= libxml2-2.6.20.win32]
        - iconv.dll [http://www.xmlsoft.org - version >= iconv-1.9.1.win32]
        - zlib1.dll [http://www.xmlsoft.org - version >= zlib-1.2.3.win32]

3.2 Binaries in the release
---------------------------

    Extract the binary distribution to a folder of your choice. 
    (example: C:\axis2c-0.96)

    The c:\axis2c-0.96 folder structure is as follows.

    axis2c-0.96
      |
      +- bin         - server and other executables
      |   |
      |   +- samples - samples go here
      |         |
      |         +...
      |
      |
      +- conf        - codegen config files
      |
      +- docs        - documentation 
      |
      +- include     - all include files of axis2 
      |
      +- lib         - library modules
      |
      +- logs        - system and client logs are written to this folder
      |
      +- modules     - deployed modules 
      |
      +- rampart     - rampart include files
      |
      +- samples     - source files of the samples in bin
      |
      +- services    - deployed services 
      
    Copy the downloaded libxml2.dll, iconv.dll and zlib1.dll to C:\axis2c-0.96\lib
    (Or you can have these dll's some other place and add the location to PATH 
     environment variable)

3.3 Running the binaries
------------------------

    You need to set a couple of environment variables before you can run the
    server and samples.

    Set the variable AXIS2C_HOME to the deploy folder (C:\axis2c-0.96)
    Add the path to lib directory to the PATH variable (%AXIS2C_HOME%\lib)

    Now everything is set to run the server!

    C:\axis2c-0.96\bin>axis2_http_server.exe 

    You should see the message:
        Started Simple Axis2 HTTP Server...

    By default the log is created under %AXIS2C_HOME%\logs folder with the name
    axis2.log.

    NOTE: You may provide command line options to change the default behaviour.
    Type "axis2_http_server.exe -h" to learn about the usage)

    Now you can run any sample client deployed under %AXIS2C_HOME%\bin\samples\
    Example:
    C:\axis2c-0.96\bin\samples>echo.exe


4. Getting Axis2C working with the source release on Windows.
============================================================

4.1 Requirements
----------------

    * The makefile shipped with this version needs Microsoft Visual Studio 
      compiler (cl) and nmake build tool 
    
    NOTE: You can download Microsoft VS Express2005 Edition and Platform SDK from
          Microsoft website. You will need to add the path to Platform SDK Include
          and Lib folders to the makefile.

    * You also need 
        - libxml2 [http://www.xmlsoft.org - download the version >=  libxml2-2.6.20.win32]
        - iconv [http://www.xmlsoft.org - download the version >= iconv-1.9.1.win32]
        - zlib [http://www.xmlsoft.org - download the version >= zlib-1.2.3.win32]

4.2 Editing configure.in file
-----------------------------

    The default places for libxml2 and iconv are specified in configure.in. 

    Example:
    Default location for libxml2 is C:\libxml2
        You can either extract libxml2 to this folder. Folder structure should 
        look like the following.
        C:\libxml2
            |
            +- include
            |
            +- bin
            |
            +- lib

    Or extract to whatever place of your choice and edit the configure.in accordingly.

    You need to have zlib1.dll in a library path. You may copy this dll to libxml2/lib.

4.3 Compiling the source
------------------------

    Extract the source distribution to a folder of your choice. (Example: C:\axis2c)
    Open a DOS shell and type:
        cd C:\axis2c\build\win32
        C:\axis2c\build\win32>vcvars32.bat
                       to access .Net tools
                       (Note: You may need to set the PATH environment
                       variable to  vcvars32.bat if Windows complains 
                       that it cannot find this bat)
        C:\axis2c\build\win32>nmake install

    That's it! This will build the system and create a directory named 'deploy'
    under the build directory.

    The deploy folder structure is as follows.

    deploy
      |
      +- bin         - server and other executables
      |   |
      |   +- samples - samples go here
      |         |
      |         +...
      |
      +- lib         - library modules
      |
      +- services    - deployed services 
      |
      +- modules     - deployed modules 
      |
      +- include     - all include files of axis2 
      |
      +- logs        - system and client logs are written to this folder

4.4 Running the binaries
------------------------

    You need to set a couple of environment variables before you can run the 
    server and samples.

    Set the variable AXIS2C_HOME to the deploy folder (C:\axis2c\build\deploy)
    Add the path to lib directory to the PATH variable (%AXIS2C_HOME%\lib)

    Copy libxml2.dll, iconv.dll, and zlib1.dll to the Axis2C lib folder
    (%AXIS2C_HOME%\lib)

    Now everything is set to run the server!

    C:\axis2c\build\deploy\bin>axis2_http_server.exe 

    You should see the message
        Started Simple Axis2 HTTP Server...

    By default, the log is created under %AXIS2C_HOME%\logs folder with the 
    name axis2.log.
    (Note: You may provide command line options to change the default behaviour.
    Type "axis2_http_server.exe -h" to learn about the usage)

    Now you can run any sample client deployed under %AXIS2C_HOME%\bin\samples\
    Example:
        C:\axis2c\build\deploy\bin\samples>echo.exe


5. Installing Apache2 Web Server integration module (mod_axis2)
---------------------------------------------------------------

5.1 Building mod_axis2 the from source tree 

5.1.1 On the Linux Platform

    Provide the Apache2 include file location as a configure option
        ./configure --with-apache2="<apache2 directory>" [other configure options]

    NOTE: Some apache2 distributions install APR (Apache Portable Run-time) 
    include files in a separate location which is required to build mod_axis2.
    In that case use:
        ./configure --with-apache2="<apache2 directory>" 
            --with-apr="<apr include files location>" [other configure options]

    Then build the source tree
        make
        make install

    This will install mod_axis2.so into your "<your_path_to_axis2c>/lib"

5.1.2 On Win32 platform

    Provide the apache2 location in configure.in file in APACHE_INSTALL_DIR
    Example:
    APACHE_INSTALL_DIR = E:\Apache

    After compiling the sources (as described in section 4.3) build the
    mod_axis2.dll by issuing the command "nmake axis2_apache_module".
    This will build the mod_axis2.dll and copy it to %AXIS2C_HOME%\lib directory.
    Example:
    C:\axis2c\build\deploy\lib 

5.2 Deploying in Apache2 Web Server

    NOTE: To do the following tasks, you might need super user privileges in your 
          machine.

    Copy the mod_axis2 (libmod_axis2.so.0.0.0 on Linux and mod_axis2.dll in Windows)
    to "<apache2 modules directory>" as mod_axis2.so 
    Example:
    cp $AXIS2C_HOME/lib/libmod_axis2.so.0.0.0 /usr/lib/apache2/modules/mod_axis2.so
        in Linux or

    copy C:\axis2c\build\deploy\lib\mod_axis2.dll C:\Apache2\modules\mod_axis2.so
        in Windows

    Edit the Apache2's configuration file (generally httpd.conf) and add the
    following directives

    LoadModule axis2_module <apache2 modules directory>/mod_axis2.so
    Axis2RepoPath <axis2 repository path>
    Axis2LogFile <axis2 log file path>
    Axis2LogLevel LOG_LEVEL
    <Location /axis2>
        SetHandler axis2_module
    </Location>

    NOTE: Axis2 log file path should have write access to all users because by
          default Apache Web Server runs as nobody.

    LOG_LEVEL can be one of following
        crit - Log critical errors only
        error - Log errors critical errors
        warn - Log warnings and above
        info - Log info and above
        debug - Log debug and above (default)
        trace - Log trace messages

    NOTE: Use forward slashes "/" for path separators in <apache2 modules directory>, 
          <axis2 repository path> and <axis2 log file path>

    Make sure that the apache2 user has the correct permissions to above paths
        - Read permission to the repository
        - Write permission to the log file

    Restart apache2 and test whether mod_axis2 module is loaded by typing the URL
        http://localhost/axis2/services

    Enjoy the Axis2C soap engine!





FAQ
=======

1. Although I was able to get simple axis server up, unable to run samples.

        This could happen because the AXIS2C_HOME environment variable is not 
        set to the correct axis2 installation path.


2. What are the other dependencies Axis2C has?
     
        Basically if you are willing to use libxml2 as your parser, you need to
        have it installed on your system. and rampart (security module of Axis2C)
        has dependency on openssl.

        libxml2 - http://xmlsoft.org/downloads.html

3. I installed libxml2 installed in my system, but ./configure fails saying
   "libxml2 not found"

        Yes, you need to install libxml2-dev packages. 
        
        1. If you are using a debian based system
                apt-get install libxml2-dev
        2. If you are using redhat/fedora based system.
                yum install libxml2-dev
        3. If you compile libxml2 from source you will not get this error.

4. I installed openssl in my system but, I'm getting an error while configuring
   rampart?
    
         You might need to get "libssl-dev" package installed.

5. Is there any recommended packages, that I need to instal in my system?

        1. automake, autoconf, libtool, aclocal
        2. libxml2 and libxml2-dev
        5. pkg-config
          
6. I tried several methods, browse through axis-c-dev and axis-c-user mail 
   archives but I was not able solve it.

        Then you can ask from Axis2C users or Axis2C developers about it by
        sending your question to 
            user      = axis-c-user@ws.apache.org    
            developer = axis-c-dev@ws.apache.org 

        You can get subscribe to

            axis-c-user list by sending request to  
                <axis-c-user-subscribe@ws.apache.org>

            axis-c-dev  list by sending request to  
                <axis-c-dev-subscribe@ws.apache.org>

            subject of the request should be "subscribe"


7. This FAQ is not enough...
       
       You can help us by reporting your suggestions, complaints, problems and bugs




Thank you for using Axis2C ...
