<?xml version="1.0" encoding="UTF-8"?>
<!--
/*
 * 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>
    <pomVersion>3</pomVersion>
    <extend>../../etc/project.xml</extend>

    <name>Apache Axis 2.0 - Kernel</name>
    <id>axis2-kernel</id>
    <groupId>org.apache.axis2</groupId>
    <description>Core Parts of Axis 2.0. This includes Axis 2.0 engine, Client API, Addressing support, etc.,</description>

    <dependencies>
       <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-api</artifactId>
            <version>${axiom.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-impl</artifactId>
            <version>${axiom.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-java2wsdl</artifactId>
            <version>${pom.currentVersion}</version>
        </dependency>


        <!-- external JARs -->
        
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>${commons.logging.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>${stax.impl.groupid}</groupId>
            <artifactId>${stax.impl.artifactid}</artifactId>
            <version>${stax.impl.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>stax</groupId>
            <artifactId>stax-api</artifactId>
            <version>${stax.api.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
      <dependency>
        <groupId>servletapi</groupId>
        <artifactId>servletapi</artifactId>
        <version>${servletapi.version}</version>
        <properties>
          <module>true</module>
        </properties>
      </dependency>
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>${commons.httpclient.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>${commons.codec.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
       <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>${commons.fileupload.version}</version>
          <properties>
              <module>true</module>
          </properties>
       </dependency>      
        <dependency>
            <groupId>httpcomponents-httpcore</groupId>
            <artifactId>jakarta-httpcore</artifactId>
            <version>${jakarta.httpcore.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency> 
        <!--added this to support to keep WSDL information in AxisService-->
         <dependency>
            <groupId>org.apache.ws.commons.schema</groupId>
            <artifactId>XmlSchema</artifactId>
            <version>${XmlSchema.version}</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>${wsdl4j.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>${javamail.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>geronimo-spec</groupId>
            <artifactId>geronimo-spec-jms</artifactId>
            <version>${geronimo.spec.jms.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>${activation.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>backport-util-concurrent</groupId>
            <artifactId>backport-util-concurrent</artifactId>
            <version>${backport_util_concurrent.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        
	<dependency>
	    <groupId>jaxen</groupId>
	    <artifactId>jaxen</artifactId>
	    <version>${jaxen.version}</version>
	    <properties>
	        <module>true</module>
	    </properties>
	    <url>http://www.ibiblio.org/maven/jaxen/jars/</url>
	 </dependency>
	
	<!--for java2wsdl generation we use JAM , so there should be a dependency on the annogen jar or-->
        <!--XML Beans-->
         <dependency>
            <groupId>annogen</groupId>
            <artifactId>annogen</artifactId>
            <version>${annogen.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <!-- Added this to support WS Policy in Axis2 -->
        <dependency>
            <groupId>org.apache.neethi</groupId>
            <artifactId>neethi</artifactId>
            <version>${neethi.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
        <dependency>
            <groupId>org.apache.woden</groupId>
            <artifactId>woden</artifactId>
            <version>${woden.version}</version>
            <properties>
                <module>true</module>
            </properties>
        </dependency>
    </dependencies>
    <build>
		<resources>
			<resource>
				<directory>conf</directory>
				<excludes>
					<exclude>**/*.properties</exclude>
				</excludes>
			</resource>
			<resource>
				<directory>src</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
					<include>**/*.xsl</include>
				</includes>
			</resource>
			<resource>
      <directory>../../</directory>
      <targetPath>META-INF</targetPath>
      <includes>
        <include>NOTICE.txt</include>
        <include>LICENSE.txt</include>
      </includes>
   </resource>
		</resources>
	<unitTest>
      <resources>
		<resource>
		  <targetPath>../test-resources</targetPath>
	      <directory>test-resources</directory>
	    </resource>
	  </resources>
	</unitTest>
    </build>
</project>
