<?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>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.tuscany.sca</groupId>
        <artifactId>tuscany-itest</artifactId>
        <version>2.0-Beta3</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>itest-async-integrations</artifactId>
    <name>Apache Tuscany Async Integration Tests</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-base-runtime-pom</artifactId>
            <type>pom</type>
            <version>2.0-Beta3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-binding-jms-runtime</artifactId>
            <version>2.0-Beta3</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
            <version>5.2.0</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <id>add-jaxws</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${project.build.directory}/jaxws-source</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>1.10</version>
                <!-- Explicitly add the transitive dependencies for jaxws-api http://jira.codehaus.org/browse/MEV-498 -->
                <dependencies>
                    <dependency>
                        <groupId>javax.jws</groupId>
                        <artifactId>jsr181-api</artifactId>
                        <version>1.0-MR1</version>
                    </dependency>
                    <dependency>
                        <groupId>javax.annotation</groupId>
                        <artifactId>jsr250-api</artifactId>
                        <version>1.0</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>wsimport-client</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>creditcard.wsdl</wsdlFile>
                            </wsdlFiles>
                            <bindingDirectory>${basedir}/src/main/resources/wsdl</bindingDirectory>
                            <bindingFiles>
                                <bindingFile>creditcard-client.xml</bindingFile>
                            </bindingFiles>
                            <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir>
                            <!-- Configure the stale file so that two executions will work -->
                            <staleFile>${project.build.directory}/wsimport-client.stale</staleFile>
                            <verbose>false</verbose>
                            <xnocompile>true</xnocompile>

                            <xjcArgs>
                                <xjcArg>-p</xjcArg>
                                <xjcArg>com.example.test.jaxb.client</xjcArg>
                            </xjcArgs>

                        </configuration>
                    </execution>
                    <execution>
                        <id>wsimport-server</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>creditcard.wsdl</wsdlFile>
                            </wsdlFiles>
                            <bindingDirectory>${basedir}/src/main/resources/wsdl</bindingDirectory>
                            <bindingFiles>
                                <bindingFile>creditcard-server.xml</bindingFile>
                            </bindingFiles>
                            <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir>
                            <staleFile>${project.build.directory}/wsimport-server.stale</staleFile>
                            <verbose>false</verbose>
                            <xnocompile>true</xnocompile>

                            <xjcArgs>
                                <xjcArg>-p</xjcArg>
                                <xjcArg>com.example.test.jaxb.server</xjcArg>
                            </xjcArgs>

                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
