<?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>
	
        <!-- ========== -->
	<!-- Developers -->
	<!-- ========== -->
	<developers>
		<developer>
			<name>Samisa Abeysinghe</name>
			<id>samisa</id>
			<email>samisa AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Sahan Gamage</name>
			<id>sahan</id>
			<email>sahans AT gmail.com</email>
			<organization>Purdue University</organization>
		</developer>
		<developer>
			<name>Nandika Jayawardana</name>
			<id>nandika</id>
			<email>nandika AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Kaushalye Kapuruge</name>
			<id>kaushalye</id>
			<email>kaushalye AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Damitha Kumarage</name>
			<id>damitha</id>
			<email>damitha AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Dinesh Premalal</name>
			<id>dinesh</id>
			<email>dinesh AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Sanjaya Rathnaweera</name>
			<id>pini</id>
			<email>sanjaya AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Nabeel Yoosuf</name>
			<id>nabeel</id>
			<email>nabeel.yoosuf AT gmail.com</email>
			<organization>Purdue University</organization>
		</developer>
		<developer>
		        <name>Dimuthu Gamage</name>
			<id>dimuthucg</id>
			<email>dimuthuc AT gmail.com</email>
			<organization>Univerisity of Moratuwa</organization>
		</developer>
		<developer>
			<name>Paul Fremantle</name>
			<id>pzf</id>
			<email>paul AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Davanum Srinivas</name>
			<id>dims</id>
			<email>dims AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
		<developer>
			<name>Sanjiva Weerawarana</name>
			<id>sanjiva</id>
			<email>sanjiva AT wso2.com</email>
			<organization>WSO2</organization>
		</developer>
	</developers>
	<contributors>
		<contributor>
			<name>James Clark</name>
			<email>jjc AT public.jclark.com</email>
            <roles>
                <role>Technical Adviser on Building a Portable/Re-usable C library</role>
            </roles>
		</contributor>
	</contributors>

    <!-- ################################################################ -->
    <!--        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>
