<?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-bpel</artifactId>
		<version>2.0</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<artifactId>itest-bpel-helloworld</artifactId>
	<name>Apache Tuscany SCA iTest BPEL HelloWorld</name>

	<repositories>
		<repository>
			<id>apache.incubator</id>
			<url>http://people.apache.org/repo/m2-incubating-repository
			</url>
		</repository>
	</repositories>

	<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-implementation-bpel-runtime</artifactId>
           <version>2.0</version>
           <scope>runtime</scope>
        </dependency>
		
	</dependencies>

	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<!-- http://jira.codehaus.org/browse/SUREFIRE-322 -->
				<version>2.3.1</version>
				<configuration>
					<useFile>false</useFile>
					<trimStackTrace>false</trimStackTrace>
					<useSystemClassLoader>true</useSystemClassLoader>
                              <argLine>-Djava.endorsed.dirs=target/endorsed</argLine>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>unpack</id>
						<phase>test-compile</phase>
						<goals>
							<goal>unpack</goal>
						</goals>
						<configuration>
							<artifactItems>
								<artifactItem>
									<groupId>org.apache.ode</groupId>
									<artifactId>ode-dao-jpa-ojpa-derby</artifactId>
									<version>1.1</version>
									<type>zip</type>
									<overWrite>true</overWrite>
									<outputDirectory>${project.build.directory}/test-classes/</outputDirectory>
								</artifactItem>
							</artifactItems>
						</configuration>
					</execution>
				</executions>
			</plugin>
			
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.0</version>
                <executions>
                    <execution>
                        <id>add-test-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>
                <configuration>
                    <target>2.1</target>
                </configuration>
                <executions>
                    <execution>
                        <id>wsimport</id>
                        <phase>generate-test-sources</phase>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <packageName>org.apache.tuscany.implementation.bpel.example.helloworld</packageName>
                            <wsdlDirectory>${basedir}/src/test/resources/helloworld/</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>helloworld.wsdl</wsdlFile>
                            </wsdlFiles>
                            <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir>
                            <verbose>false</verbose>
                            <xnocompile>true</xnocompile>
                        </configuration>
                    </execution>

                    <!--
                    <execution>
                        <id>wsgen</id>
                        <phase>process-test-classes</phase>
                        <goals>
                            <goal>wsgen-test</goal>
                        </goals>
                        <configuration>
                            <sei>org.apache.tuscany.sca.interfacedef.java.jaxws.MyServiceImpl</sei>
                            <genWsdl>true</genWsdl>
                            <keep>true</keep>
                            <resourceDestDir>${project.build.directory}/jaxws-source</resourceDestDir>
                            <sourceDestDir>${project.build.directory}/jaxws-source</sourceDestDir>
                        </configuration>
                    </execution>
                    -->
                </executions>

            </plugin>

            <!--
            wsimport cannot handle WSDL files without a service/binding element.
            CXF wsdl2java plugin does support that. I had to override the default
            value of wsdlRoot/testWsdlRoot to a non-existent file to avoid NPE -->
            <!--
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>

                        <configuration>
                            <sourceRoot>${basedir}/target/jaxws-source</sourceRoot>
                            <wsdlRoot>NONE</wsdlRoot>
                            <testWsdlRoot>NONE</testWsdlRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/test/resources/wsdl/Stock.wsdl</wsdl>
                                    <outputDir>${basedir}/target/jaxws-source</outputDir>
                                    <packagenames>
                                        <packagename>com.example.stock.cxf</packagename>
                                    </packagenames>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
             -->
             
		</plugins>
	</build>

</project>
