                          Apache Axis2/C

  What is it?
  -----------

  The Apache Axis2/C is a SOAP engine implementation that can be used 
  to provide and consume Web Services. Axis2/C is an effort to implement Axis2 
  architecture, in C. Please have a look at 
  http://ws.apache.org/axis2/1_0/Axis2ArchitectureGuide.html
  for an overview on Axis2 architecture.
  
  Axis2/C supports both SOAP 1.1 and SOAP 1.2. The soap processing model is
  built on the AXIOM XML object model. Axis2/C is capable of handling 
  one-way messaging (In-Only) as well as request response messaging (In-Out).
  It can be used in both synchronous and asynchronous modes.

  Axis2/C has built in WS-Addressing support. It implements WS-Addressing 1.0
  specification completely. It also has built in MTOM/XOP support for handling
  binary attachments.
  
  As a project of the Apache Software Foundation, the
  developers aim to collaboratively develop and maintain a robust,
  commercial-grade, standards-based Web Services stack implementation with 
  freely available source code.

  The Latest Version
  ------------------

  Details of the latest version can be found on the Apache Axis2/C
  project page under http://ws.apache.org/axis2/c.

  Documentation
  -------------

  The documentation available as of the date of this release is
  included in HTML format in the docs/ directory. The most
  up-to-date documentation can be found at
  http://ws.apache.org/axis2/c/docs/index.html.

  Installation
  ------------

  Please see the file named INSTALL. You can also have a look at 
  docs/installationguide.html.

  Licensing
  ---------

  Please see the file named LICENSE.

  Contacts
  --------

     o If you want freely available support for using Apache Axis2/C please 
       join the Apache Axis2/C user community by subscribing to users mailing 
       list, axis-c-user@ws.apache.org' as described at 
       http://ws.apache.org/axis2/c/mail-lists.html

     o If you have a bug report for Apache Axis2/C please go log a Jira issue 
       at http://issues.apache.org/jira/browse/AXIS2C

     o If you want to participate in actively developing Apache Axis2/C please
       subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at
       http://ws.apache.org/axis2/c/mail-lists.html

  Acknowledgements
  ----------------

  Apache Axis2/C relies heavily on the use of autoconf and libtool to provide
  a build environment.


















