<?xml version="1.0"?>
<!--
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
-->

<project>
    <name>Axis2C</name>
    <pomVersion>3</pomVersion>

    <!-- a unique name for this project -->
    <name>Apache Axis2 C</name>
    <id>axis2c</id>
    <groupId>axis2c</groupId>

    <currentVersion>${axis2_version}</currentVersion>

    <!-- details about the organization that 'owns' the project -->
    <organization>
        <name>Apache Software Foundation</name>
        <url>http://www.apache.org/</url>
        <logo>http://www.apache.org/images/asf-logo.gif</logo>
    </organization>

    <inceptionYear>2005</inceptionYear>
    <logo>http://ws.apache.org/axis2/images/axis.jpg</logo>
    <description> Axis2 is an effort to re-design and totally re-implement both Axis/Java and (eventually) Axis/C++ on a new architecture. Evolving from the now standard "handler chain" model which Axis1 pioneered, Axis2 is developing a more flexible pipeline architecture which can yet be managed and packaged in a more organized manner. This new design acknowledges the maturing of the Web services space in terms of new protocols such as WS-ReliableMessaging, WS-Security and WS-Addressing that are built on top of the base SOAP system. At the time Axis1 was designed, while it was fully expected that other protocols such as WS-ReliableMessaging would be built on top of it, there was not a proper extension architecture defined to enable clean composition of such layers. Thus, one of the key motivations for Axis2 is to provide a clean and simple environment for like Apache Sandesha and Apache WSS4J to layer on top of the base SOAP system. Another driving force for Axis2 as well as the move away from RPC oriented Web services towards more document-oriented, message style asynchronous service interactions. The Axis2 project is centered on a new representation for SOAP messages called AXIOM (AXIs Object Model). AXIOM consists of two parts: a complete XML Infoset representation and a SOAP Infoset representation on top of that. The XML Infoset representation provides a JDOM-like simple API but is built on a deferred model via a StAX-based (Streaming API for XML) pull parsing API. A key feature of AXIOM is that it allows one to stop building the XML tree and just access the pull stream directly; thus enabling both maximum flexibility and maximum performance. This approach allows us to support multiple levels of abstraction for consuming and offering Web services: using plain AXIOM, using generated code and statically data-bound data types and so on. At the time of Axis1's design, RPC-style, synchronous, request-response interactions were the order of the day for Web services. Today service interactions are much more message
-oriented and exploit many different message exchange patterns. The Axis2 engine architecture is careful to not build in any assumptions of request-response patterns to ensure that it can be used easily to support arbitrary message exchange patterns.</description>
    <shortDescription>Axis2 C</shortDescription>
    <!-- the project home page -->
    <url>http://ws.apache.org/axis2/c</url>
    <issueTrackingUrl>http://issues.apache.org/jira/browse/AXIS2C</issueTrackingUrl>
    <siteAddress>ws.apache.org/axis2/c</siteAddress>
    <siteDirectory>/www/ws.apache.org/axis2/c</siteDirectory>
    <distributionDirectory>/www/ws.apache.org/builds/c</distributionDirectory>
    <!-- repository>
<connection>scm|svn|http://svn.apache.org/repos/asf/webservices/axis/trunk</connection>
<developerConnection>scm|svn|https://svn.apache.org/repos/asf/webservices/axis/trunk</developerConnection>
<url>http://svn.apache.org/viewcvs.cgi/webservices/axis/trunk/?root=Apache-SVN</url>
</repository -->
    <mailingLists>
        <mailingList>
            <name>Axis C Developer List</name>
            <subscribe>axis-c-dev-subscribe@ws.apache.org</subscribe>
            <unsubscribe>axis-c-dev-unsubscribe@ws.apache.org</unsubscribe>
            <archive>http://marc.theaimsgroup.com/?l=axis-c-dev&amp;r=1&amp;w=2</archive>
        </mailingList>
        <mailingList>
            <name>Axis C User List</name>
            <subscribe>axis-c-user-subscribe@ws.apache.org</subscribe>
            <unsubscribe>axis-c-user-unsubscribe@ws.apache.org</unsubscribe>
            <archive>http://marc.theaimsgroup.com/?l=axis-c-user&amp;r=1&amp;w=2</archive>
        </mailingList>
    </mailingLists>
    <developers>
    <developer>
      <name>Samisa Abeysinghe</name>
      <id>samisa</id>
      <email>samisa@apache.org</email>
      <organization>WSO2</organization>
      <roles>
        <role>C Developer</role>
      </roles>
    </developer>
    </developers>


    <!-- ################################################################ -->
    <!--        Project dependency section                                -->
    <!-- ################################################################ -->

    <dependencies/>


    <!-- ################################################################ -->
    <!--        Project build and reports section                         -->
    <!-- ################################################################ -->

    <build>

        <nagEmailAddress>axis-c-dev@apache.org</nagEmailAddress>
        <sourceDirectory>${basedir}/src</sourceDirectory>
        <unitTestSourceDirectory>${basedir}/src/test</unitTestSourceDirectory>

        <unitTest>
          <includes>
            <include>**/_test*.c</include>
          </includes>
          <excludes>
            <exclude>**/*Test*All.c</exclude>
          </excludes>
        </unitTest>

        <resources/>  <!-- (OPTIONAL) Resources packaged inside the JAR file. -->

    </build>

    <reports>
        <!--report>maven-changes-plugin</report>
        <report>maven-jdepend-plugin</report>
        <report>maven-checkstyle-plugin</report>
        <report>maven-pmd-plugin</report>
        <report>maven-junit-report-plugin</report>
        <report>maven-clover-plugin</report>
        <report>maven-changelog-plugin</report>
        <report>maven-file-activity-plugin</report>
        <report>maven-developer-activity-plugin</report>
        <report>maven-file-activity-plugin</report>
        <report>maven-license-plugin</report>
        <report>maven-linkcheck-plugin</report>
        <report>maven-jxr-plugin</report-->
        <report>maven-changes-plugin</report>
    </reports>

</project>
