<?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>
    <artifactId>cxf-rt-databinding-jaxb</artifactId>
    <packaging>bundle</packaging>
    <name>Apache CXF Runtime JAXB DataBinding</name>
    <description>Apache CXF Runtime JAXB DataBinding</description>
    <url>http://cxf.apache.org</url>
    <parent>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-parent</artifactId>
        <version>3.3.1</version>
        <relativePath>../../../parent/pom.xml</relativePath>
    </parent>
    <properties>
        <cxf.module.name>org.apache.cxf.databinding.jaxb</cxf.module.name>
        <cxf.osgi.import>
            javax.activation;version="${cxf.osgi.javax.activation.version}",
            javax.xml.bind*;version="${cxf.osgi.javax.bind.version}",
            javax.xml.stream*;version="${cxf.osgi.javax.stream.version}"
        </cxf.osgi.import>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-xjc-plugin</artifactId>
                <version>${cxf.xjc-utils.version}</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-test-sources</phase>
                        <configuration>
                            <fork>${cxf.xjcplugin.forkmode}</fork>
                            <additionalJvmArgs>${cxf.xjc.jvmArgs}</additionalJvmArgs>
                            <testSourceRoot>${basedir}/target/generated/src/test/java</testSourceRoot>
                            <xsdOptions>
                                <xsdOption>
                                    <xsd>${basedir}/src/test/resources/wsdl/jaxb/misc_test.xsd</xsd>
                                    <extensionArgs>
                                        <extensionArg>-Xdv</extensionArg>
                                    </extensionArgs>
                                </xsdOption>
                                <xsdOption>
                                    <xsd>${basedir}/src/test/resources/wsdl/jaxb/form_test.xsd</xsd>
                                </xsdOption>
                                <xsdOption>
                                    <xsd>${basedir}/src/test/resources/wsdl/jaxb/hello_world.xsd</xsd>
                                </xsdOption>
                                <xsdOption>
                                    <xsd>${basedir}/src/test/resources/wsdl/jaxb/doc_lit_bare.xsd</xsd>
                                </xsdOption>
                                <xsdOption>
                                    <xsd>${basedir}/src/test/resources/wsdl/jaxb/rpc_lit.xsd</xsd>
                                </xsdOption>
                            </xsdOptions>
                            <extensions>
                                <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:${cxf.xjc-utils.version}</extension>
                            </extensions>
                        </configuration>
                        <goals>
                            <goal>xsdtojava-tests</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-wsdl</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${cxf.asm.groupId}</groupId>
            <artifactId>${cxf.asm.artifactId}</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>
