<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2</artifactId>
        <version>1.7.2</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>axis2-adb-tests</artifactId>
    <name>Apache Axis2 - ADB Tests</name>
    <description>ADB Tests</description>
    <url>http://axis.apache.org/axis2/java/core/</url>
    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/axis/axis2/java/core/tags/v1.7.2/modules/adb-tests</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/axis/axis2/java/core/tags/v1.7.2/modules/adb-tests</developerConnection>
        <url>http://svn.apache.org/viewvc/axis/axis2/java/core/tags/v1.7.2/modules/adb-tests</url>
    </scm>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>axis2-adb</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>axis2-transport-local</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>axis2-transport-http</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>testutils</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-rt</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>${project.groupId}</groupId>
                <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
                <version>${project.version}</version>
                <executions>
                    <execution>
                        <id>wsdl2code-mtom</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>wsdl2code</goal>
                        </goals>
                        <configuration>
                            <wsdlFile>src/test/wsdl/MTOMService.wsdl</wsdlFile>
                            <syncMode>sync</syncMode>
                            <packageName>org.apache.axis2.databinding.mtom.client</packageName>
                            <outputDirectory>${project.build.directory}/wsdl2code/mtom</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsdl2code-axis2-5741</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>wsdl2code</goal>
                        </goals>
                        <configuration>
                            <wsdlFile>src/test/wsdl/AXIS2-5741.wsdl</wsdlFile>
                            <packageName>org.apache.axis2.databinding.axis2_5741.service</packageName>
                            <generateServerSide>true</generateServerSide>
                            <generateServicesXml>true</generateServicesXml>
                            <outputDirectory>${project.build.directory}/wsdl2code/AXIS2-5741</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsdl2code-axis2-5749</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>wsdl2code</goal>
                        </goals>
                        <configuration>
                            <wsdlFile>src/test/wsdl/AXIS2-5749.wsdl</wsdlFile>
                            <packageName>org.apache.axis2.databinding.axis2_5749.service</packageName>
                            <generateServerSide>true</generateServerSide>
                            <generateServicesXml>true</generateServicesXml>
                            <outputDirectory>${project.build.directory}/wsdl2code/AXIS2-5749</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsdl2code-axis2-5750</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>wsdl2code</goal>
                        </goals>
                        <configuration>
                            <wsdlFile>src/test/wsdl/AXIS2-5750.wsdl</wsdlFile>
                            <syncMode>sync</syncMode>
                            <unpackClasses>true</unpackClasses>
                            <namespaceURIs>
                                <namespaceURI>
                                    <uri>http://ise-online.com/FixedValueService/</uri>
                                    <packageName>org.apache.axis2.databinding.axis2_5750.client</packageName>
                                </namespaceURI>
                            </namespaceURIs>
                            <packageName>org.apache.axis2.databinding.axis2_5750.client</packageName>
                            <outputDirectory>${project.build.directory}/wsdl2code/AXIS2-5750</outputDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsdl2code-axis2-5758</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>wsdl2code</goal>
                        </goals>
                        <configuration>
                            <wsdlFile>src/test/wsdl/AXIS2-5758.wsdl</wsdlFile>
                            <syncMode>sync</syncMode>
                            <unpackClasses>true</unpackClasses>
                            <namespaceURIs>
                                <namespaceURI>
                                    <uri>http://example.com/stockquote.xsd</uri>
                                    <packageName>org.apache.axis2.databinding.axis2_5758.client</packageName>
                                </namespaceURI>
                            </namespaceURIs>
                            <packageName>org.apache.axis2.databinding.axis2_5758.client</packageName>
                            <outputDirectory>${project.build.directory}/wsdl2code/AXIS2-5758</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <databindingName>adb</databindingName>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>xml-maven-plugin</artifactId>
                <version>1.0.1</version>
                <executions>
                    <execution>
                        <phase>generate-test-resources</phase>
                        <goals>
                            <goal>transform</goal>
                        </goals>
                        <configuration>
                            <transformationSets>
                                <transformationSet>
                                    <dir>${project.build.directory}/wsdl2code/AXIS2-5741/resources</dir>
                                    <includes>
                                        <include>services.xml</include>
                                    </includes>
                                    <stylesheet>src/test/xslt/AXIS2-5741.xsl</stylesheet>
                                    <outputDir>${project.build.directory}/repo/AXIS2-5741/services/FiverxLinkService/META-INF</outputDir>
                                </transformationSet>
                                <transformationSet>
                                    <dir>${project.build.directory}/wsdl2code/AXIS2-5749/resources</dir>
                                    <includes>
                                        <include>services.xml</include>
                                    </includes>
                                    <stylesheet>src/test/xslt/AXIS2-5749.xsl</stylesheet>
                                    <outputDir>${project.build.directory}/repo/AXIS2-5749/services/ColorService/META-INF</outputDir>
                                </transformationSet>
                            </transformationSets>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>2.4.1</version>
                <executions>
                    <execution>
                        <id>wsimport-mtom</id>
                        <goals>
                            <goal>wsimport-test</goal>
                        </goals>
                        <configuration>
                            <wsdlFiles>
                                <wsdlFile>${basedir}/src/test/wsdl/MTOMService.wsdl</wsdlFile>
                            </wsdlFiles>
                            <packageName>org.apache.axis2.databinding.mtom.service</packageName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsimport-axis2-5741</id>
                        <goals>
                            <goal>wsimport-test</goal>
                        </goals>
                        <configuration>
                            <wsdlFiles>
                                <wsdlFile>${basedir}/src/test/wsdl/AXIS2-5741.wsdl</wsdlFile>
                            </wsdlFiles>
                            <packageName>org.apache.axis2.databinding.axis2_5741.client</packageName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsimport-axis2-5749</id>
                        <goals>
                            <goal>wsimport-test</goal>
                        </goals>
                        <configuration>
                            <wsdlFiles>
                                <wsdlFile>${basedir}/src/test/wsdl/AXIS2-5749.wsdl</wsdlFile>
                            </wsdlFiles>
                            <packageName>org.apache.axis2.databinding.axis2_5749.client</packageName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsimport-axis2-5750</id>
                        <goals>
                            <goal>wsimport-test</goal>
                        </goals>
                        <configuration>
                            <wsdlFiles>
                                <wsdlFile>${basedir}/src/test/wsdl/AXIS2-5750.wsdl</wsdlFile>
                            </wsdlFiles>
                            <packageName>org.apache.axis2.databinding.axis2_5750.service</packageName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsimport-axis2-5758</id>
                        <goals>
                            <goal>wsimport-test</goal>
                        </goals>
                        <configuration>
                            <wsdlFiles>
                                <wsdlFile>${basedir}/src/test/wsdl/AXIS2-5758.wsdl</wsdlFile>
                            </wsdlFiles>
                            <packageName>org.apache.axis2.databinding.axis2_5758.service</packageName>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.sun.xml.ws</groupId>
                        <artifactId>jaxws-tools</artifactId>
                        <version>${jaxws.tools.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${project.build.directory}/wsdl2code/mtom/src</source>
                                <source>${project.build.directory}/wsdl2code/AXIS2-5741/src</source>
                                <source>${project.build.directory}/wsdl2code/AXIS2-5749/src</source>
                                <source>${project.build.directory}/wsdl2code/AXIS2-5750/src</source>
                                <source>${project.build.directory}/wsdl2code/AXIS2-5758/src</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <!-- Disable the Javadoc execution configured by the apache-release profile.
                     The wsdl2code goal adds sources as project source, not project test sources,
                     and that causes problems. Note that we don't need the Javadocs anyway. -->
                <artifactId>maven-javadoc-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <phase>none</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
