
                          Apache Axiom/C

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

  Axiom stands for AXis Object Model (also known as OM - Object Model) and
  refers to the XML infoset model that is initially developed for Apache
  Axis2. This is an effort to implement Apache Axiom in C.

  Please have a look at

  http://ws.apache.org/axis2/c/docs/om_tutorial.html

  for an introduction about Apache Axiom/C.
  
  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
  ------------------

  You can get the latest svn checkout of Apache Axiom/C module from

  https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/axiom

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

  Please see the file called INSTALL. 

  Licensing
  ---------

  Please see the file called LICENSE.

  Contacts
  --------

     o If you want freely available support for using Apache Axiom/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 Axiom/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 Axiom/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

  Acknowledgments
  ----------------

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