<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you 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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <parent>
        <groupId>org.apache.stratos</groupId>
        <artifactId>stratos-parent</artifactId>
        <version>4.1.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.stratos</groupId>
    <artifactId>stratos-service-stubs-parent</artifactId>
    <packaging>pom</packaging>
    <name>Apache Stratos - Service Stubs - Aggregator Module</name>
    <url>http://apache.org</url>

    <modules>                            
        <module>org.apache.stratos.cloud.controller.service.stub</module>
        <module>org.apache.stratos.manager.stub</module>
        <module>org.apache.stratos.account.mgt.stub</module>
        <module>org.apache.stratos.tenant.mgt.stub</module>
        <module>org.apache.stratos.common.stub</module>
        <module>org.apache.stratos.usage.stub</module>
        <module>org.apache.stratos.throttling.agent.stub</module>
        <module>org.apache.stratos.throttling.stub</module>
        <module>org.apache.stratos.tenant.register.stub</module>
        <module>org.apache.stratos.cartridge.agent.stub</module>
        <module>org.apache.stratos.tenant.activity.stub</module>
        <module>org.apache.stratos.theme.mgt.stub</module>
        <module>org.apache.stratos.validate.domain.stub</module>
        <module>org.apache.stratos.adc.instanceinfo.mgt.stub</module>
        <module>org.apache.stratos.tenant.register.gapp.stub</module>
        <module>org.apache.stratos.redirector.servlet.stub</module>
        <module>org.apache.stratos.adc.reponotification.service.stub</module>
        <module>org.apache.stratos.billing.mgt.stub</module>
        <module>org.apache.stratos.throttle.stub</module>
        <module>org.apache.stratos.usage.meteringqueryds.stub</module>
        <module>org.apache.stratos.manager.dashboard.stub</module>
        <module>org.apache.stratos.manager.cleanup.notification.stub</module>
        <module>org.apache.stratos.usage.meteringsummarygenerationds.stub</module>
        <module>org.apache.stratos.autoscaler.service.stub</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.7</version>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
	<dependencies>
            <!--axis2 dependency-->
            <dependency>
                <groupId>org.apache.axis2.wso2</groupId>
                <artifactId>axis2</artifactId>
                <version>${axis2.wso2.version}</version>
            </dependency>
	    <dependency>
            	<groupId>org.apache.axis2.wso2</groupId>
            	<artifactId>axis2-client</artifactId>
		<version>${axis2.wso2.client.version}</version>
            </dependency>
	    <dependency>
                <groupId>wsdl4j.wso2</groupId>
                <artifactId>wsdl4j</artifactId>
                <version>${wsdl4j.wso2.version}</version>
            </dependency>
	    <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.1.1</version>
            </dependency>
	    <dependency>
                <groupId>org.apache.ws.commons.schema.wso2</groupId>
                <artifactId>XmlSchema</artifactId>
                <version>${xmlschema.wso2.version}</version>
            </dependency>
	    <dependency>
                <groupId>org.apache.ws.commons.axiom.wso2</groupId>
                <artifactId>axiom</artifactId>
                <version>${axiom.wso2.version}</version>
            </dependency>
	    <dependency>
                <groupId>org.apache.neethi.wso2</groupId>
                <artifactId>neethi</artifactId>
                <version>${neethi.wso2.version}</version>
                    <!--exclusions>
                        <exclusion>
                            <groupId>org.apache.neethi</groupId>
                            <artifactId>neethi</artifactId>
                        </exclusion>
                    </exclusions-->
            </dependency>
        </dependencies>
    </dependencyManagement>

    <properties>
	<axis2.wso2.version>1.6.1.wso2v10</axis2.wso2.version>
	<axis2.wso2.client.version>${axis2.wso2.version}</axis2.wso2.client.version>
	<wsdl4j.wso2.version>1.6.2.wso2v4</wsdl4j.wso2.version>
	<version.commons.logging>1.1.1</version.commons.logging>
        <xmlschema.wso2.version>1.4.7.wso2v2</xmlschema.wso2.version>
	<axiom.wso2.version>1.2.11.wso2v4</axiom.wso2.version>
	<orbit.version.axiom>1.2.11.wso2v3</orbit.version.axiom>
	<neethi.wso2.version>2.0.4.wso2v4</neethi.wso2.version>
    </properties>     

</project>


