<?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?subject=subscribe</subscribe>
            <unsubscribe>axis-c-dev-unsubscribe@ws.apache.org?subject=unsubscribe</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?subject=subscribe</subscribe>
            <unsubscribe>axis-c-user-unsubscribe@ws.apache.org?subject=unsubscribe</unsubscribe>
            <archive>http://marc.theaimsgroup.com/?l=axis-c-user&amp;r=1&amp;w=2</archive>
        </mailingList>
    </mailingLists>

    <!-- ################################################################ -->
    <!--        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>
