<?xml version="1.0"?>

<project>

  <!-- the version of maven's project object model -->
  <pomVersion>3</pomVersion>
  
  <!-- a unique name for this project -->
  <id>wss4j</id>
  
  <!-- a short but descriptive name for the project -->
  <name>Apache WSS4J</name>
  
  <!-- The version of the project under development, e.g.
       1.1, 1.2, 2.0-SNAPSHOT -->
  <currentVersion>1.5</currentVersion>
  
  <!-- details about the organization that 'owns' the project -->
  <organization>
    <name>Apache Web Services</name>
    <url>http://ws.apache.org/</url>
    <logo>http://ws.apache.org/images/project-logo.jpg</logo>
  </organization>
  
  <!-- the year the project started -->
  <inceptionYear>2004</inceptionYear>
  <package>org.apache.ws</package>
  <logo></logo>
  <description>
    Apache WSS4J is an implementation of the Web Services Security (WS-Security) being developed at 
    OASIS Web Services Security TC. WSS4J is a primarily a Java library that can be used to sign and 
    verify SOAP Messages with WS-Security information. WSS4J will use Apache Axis and Apache XML-Security 
    projects and will be interoperable with JAX-RPC based server/clients and .NET server/clients. 
  </description>
  <!-- a short description of what the project does -->
  <shortDescription>
    WS-Security implementation for Apache Axis
  </shortDescription>

  <!-- the project home page -->
  <url>http://ws.apache.org/wss4j/</url>
  <issueTrackingUrl>http://issues.apache.org/jira/browse/WSS</issueTrackingUrl>
  <siteAddress>ws.apache.org</siteAddress>
  <siteDirectory>/wss4j/</siteDirectory>
  <distributionSite>www.apache.org</distributionSite>
  <distributionDirectory>//dyn/closer.cgi/ws/wss4j/</distributionDirectory>

  <!-- the version control repository and http url for online access
       the connection element has the form:
       scm:<system>:<system specific connection string> -->
  <repository>
  	<connection>scm:svn:http://svn.apache.org:repos/asf/webservices:wss4j/trunk</connection>
	<developerConnection>scm:svn:http://svn.apache.org:repos/asf/webservices:wss4j/trunk</developerConnection>
	<url>http://svn.apache.org/viewcvs.cgi/webservices/wss4j/trunk?root=Apache-SVN</url>
  </repository>

  <!-- any mailing lists for the project -->
    <mailingLists>
        <mailingList>
            <name>WSS4J Developer List</name>
            <subscribe>wss4j-dev-subscribe@ws.apache.org</subscribe>
            <unsubscribe>wss4j-dev-unsubscribe@ws.apache.org</unsubscribe>
            <archive>http://mail-archives.apache.org/mod_mbox/ws-wss4j-dev/</archive>
        </mailingList>
    </mailingLists>
  
  <!-- who the developers are for the project -->
  <developers>
        <developer>
            <name>Davanum Srinivas</name>
            <id>dims</id>
            <email>dims@yahoo.com</email>
            <organization></organization>
        </developer>
        <developer>
            <name>Werner Dittmann</name>
            <id>werner</id>
            <email>werner@apache.org</email>
            <organization></organization>
        </developer>
        <developer>
            <name>Ias</name>
            <id>ias</id>
            <email>ias@apache.org</email>
            <organization></organization>
        </developer>
        <developer>
            <name>Ruchith Fernando</name>
            <id>ruchithf</id>
            <email>ruchithf@apache.org</email>
            <organization></organization>
        </developer>
  </developers>

    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
  
  <!-- build information for the project -->
  <build>
    <nagEmailAddress>wss4j-dev@ws.apache.org</nagEmailAddress>
    <sourceDirectory>src</sourceDirectory>
    <unitTestSourceDirectory>test</unitTestSourceDirectory>

    <unitTest>
      <includes>
        <include>**/*PackageTests*.java</include>
      </includes>
      <excludes>
          <exclude>**/wssec/PackageTests.java</exclude>
          <exclude>**/interop/PackageTests.java</exclude>
          <exclude>**/TestScenario7.java</exclude>
      </excludes>
    </unitTest>

    <resources>
      <resource>
        <directory>src</directory>
        <includes>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>

    <!-- ============ -->
    <!-- Dependencies -->
    <!-- ============ -->

    <dependencies>

        <!-- Module Dependencies -->
        <!--
        <dependency>
            <groupId>axis</groupId>
            <artifactId>axis</artifactId>
            <version>SNAPSHOT</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>axis</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>SNAPSHOT</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>axis</groupId>
            <artifactId>commons-logging</artifactId>
            <version>SNAPSHOT</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>axis</groupId>
            <artifactId>jaxrpc</artifactId>
            <version>SNAPSHOT</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>axis</groupId>
            <artifactId>saaj</artifactId>
            <version>SNAPSHOT</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>axis</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>SNAPSHOT</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        -->
    </dependencies>

    <!-- ======= -->
    <!-- Reports -->
    <!-- ======= -->

    <reports>
        <report>maven-license-plugin</report>
        <report>maven-checkstyle-plugin</report>
        <report>maven-pmd-plugin</report>
        <report>maven-jdepend-plugin</report>
        <!--<report>maven-changelog-plugin</report> -->
        <!-- <report>maven-statcvs-plugin</report> -->
        <!-- <report>maven-file-activity-plugin</report> -->
        <!-- <report>maven-developer-activity-plugin</report> -->
        <report>maven-jxr-plugin</report>
        <report>maven-javadoc-plugin</report>
        <!-- <report>maven-junit-report-plugin</report> -->
        <!-- <report>maven-clover-plugin</report> -->
    </reports>
    
</project>

