<?xml version="1.0"?>
<!--
  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>
    <groupId>org.apache.cxf.systests.wsdl_maven</groupId>
    <artifactId>cxf-systests-codegen</artifactId>
    <name>Test for generating code from wsdl in repo</name>
    <description>Test for generating code from wsdl in repo</description>
    <parent>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-parent</artifactId>
        <version>3.1.7</version>
        <relativePath>../../../parent/pom.xml</relativePath>
    </parent>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>${project.version}</version>
                <executions>
                    <!-- Codegen with default settings.
                         This test shows some of the defaults that work without configuration.  
                         In this case the wsdl dependency to the service "cxf-systests-java2ws"
                         will be processed.
                         As we have a file named defaultBinding.xml in the classpath
                         this binding will be applied.
                         The binding file contains an empty wsdlLocation. This means that
                         the binding will be applied to the wsdl currently processed.  -->
                    <execution>
                        <id>generate-java-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                        <configuration>
                            <fork>${cxf.codegenplugin.forkmode}</fork>
                            <defaultOptions>
                                <markGenerated>true</markGenerated>
                                <asyncMethods />
                            </defaultOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <!-- Codegen with default settings.
                             This test shows some of the defaults that work without configuration.  
                             In this case the wsdl dependency to the service "cxf-systests-java2ws"
                             will be processed.
                             As we have a file named defaultBinding.xml in the classpath
                             this binding will be applied.
                             The binding file contains an empty wsdlLocation. This means that
                             the binding will be applied to the wsdl currently processed.  -->
                        <id>generate-js-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>wsdl2js</goal>
                        </goals>
                        <configuration>
                            <fork>${cxf.codegenplugin.forkmode}</fork>
                        </configuration>
                    </execution>
                    <execution>
                        <id>process-sources</id>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                        <configuration>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdlArtifact>
                                        <groupId>org.apache.cxf.systests.wsdl_maven</groupId>
                                        <artifactId>cxf-systests-java2ws</artifactId>
                                        <version>${project.version}</version>
                                        <classifier>test</classifier>
                                    </wsdlArtifact>
                                </wsdlOption>
                            </wsdlOptions>
                            <fork>${cxf.codegenplugin.forkmode}</fork>
                            <defaultOptions>
                                <markGenerated>true</markGenerated>
                                <asyncMethods />
                            </defaultOptions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--
                      <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-invoker-plugin</artifactId>
                    <version>1.5</version>
                        <configuration>
                          <projectsDirectory>src/it</projectsDirectory>
                          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
                          <preBuildHookScript>setup</preBuildHookScript>
                          <postBuildHookScript>verify</postBuildHookScript>
                          <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
                          <settingsFile>src/it/settings.xml</settingsFile>
                          <pomIncludes>
                            <pomInclude>*/pom.xml</pomInclude>
                          </pomIncludes>
                        </configuration>
                        <executions>
                          <execution>
                            <id>integration-test</id>
                            <goals>
                              <goal>install</goal>
                              <goal>integration-test</goal>
                              <goal>verify</goal>
                            </goals>
                          </execution>
                        </executions>
                      </plugin>
            -->
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.cxf.systests.wsdl_maven</groupId>
            <artifactId>cxf-systests-java2ws</artifactId>
            <version>${project.version}</version>
            <classifier>test</classifier>
            <type>wsdl</type>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf.xjc-utils</groupId>
            <artifactId>cxf-xjc-runtime</artifactId>
            <version>${cxf.xjc-utils.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf.systests.wsdl_maven</groupId>
            <artifactId>cxf-systests-java2ws</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>
