<?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-Beta3</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>itest-ws-contribution-java-first</artifactId>
    <name>Apache Tuscany SCA iTest WS Contribution Java First </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-ws-runtime-axis2</artifactId>
            <version>2.0-Beta3</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.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>wsgen1</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>wsgen</goal>
                        </goals>
                        <configuration>
                            <sei>org.apache.tuscany.sca.binding.ws.HelloWorldImpl</sei>
                            <genWsdl>true</genWsdl>
                            <staleFile>${project.build.directory}/jaxws/stale/.wsgen1StaleFlag</staleFile>
                        </configuration>
                    </execution>                  
                    <execution>
                        <id>wsimport1</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/.wsimport1StaleFlag</staleFile>
                        </configuration>
                    </execution>                                      
                </executions>
                <configuration>
                    <target>2.1</target>
                    <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir>
                    <resourceDestDir>${project.build.directory}/jaxws-source</resourceDestDir>
                    <verbose>true</verbose>
                    <xnocompile>true</xnocompile>
                </configuration>
            </plugin>                     
        </plugins>
    </build>
</project>
