<?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>itest-ws</artifactId>
        <version>2.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>itest-ws-contribution-wsdl-first</artifactId>
    <name>Apache Tuscany SCA iTest WS Contribution WSDL First</name>

    <dependencies>
        
        <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-base-runtime-pom</artifactId>
            <type>pom</type>
            <version>2.0</version>
        </dependency>

       <dependency>
            <groupId>org.apache.tuscany.sca</groupId>
            <artifactId>tuscany-binding-ws-runtime-axis2</artifactId>
            <version>2.0</version>
       </dependency>
                
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
            <version>6.1.19</version>
        </dependency>
                
    </dependencies>

    <build>
       <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.0</version>
                <executions>
                    <execution>
                        <id>add-source</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>target/jaxws-source</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>2.1</version>
                <dependencies>
                   <dependency>
                      <groupId>com.sun.xml.ws</groupId>
                      <artifactId>jaxws-tools</artifactId>
                      <version>2.2.6-promoted-b10</version>
                   </dependency>
                </dependencies>
                <executions>
                    <!-- execution>
                        <id>wsimport1</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <packageName>org.apache.tuscany.sca.binding.ws.sca</packageName>
                            <wsdlDirectory>${basedir}/target/classes</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>HelloWorldImplService.wsdl</wsdlFile>
                            </wsdlFiles>
                            <staleFile>${project.build.directory}/jaxws/stale/.wsimport1StaleFlag</staleFile>
                        </configuration>
                    </execution-->  
                    <execution>
                        <id>wsimport2</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <packageName>org.apache.tuscany.sca.binding.ws.jaxws.external.service.iface</packageName>
                            <wsdlDirectory>${basedir}/target/classes</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>helloworld-external-service.wsdl</wsdlFile>
                            </wsdlFiles>
                            <staleFile>${project.build.directory}/jaxws/stale/.wsimport2StaleFlag</staleFile>
                        </configuration>
                    </execution>                                                         
                </executions>
                <configuration>
                    <target>2.1</target>
                    <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir>
                    <verbose>true</verbose>
                    <xnocompile>true</xnocompile>
                </configuration>
            </plugin>                     
        </plugins>
    </build>
</project>
