<?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.services.wsn</groupId>
    <artifactId>cxf-services-wsn-api</artifactId>
    <packaging>bundle</packaging>
    <name>Apache CXF WSN API</name>
    <description>Apache CXF WSN API</description>
    <url>https://cxf.apache.org</url>
    <parent>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-parent</artifactId>
        <version>3.3.10</version>
        <relativePath>../../../parent/pom.xml</relativePath>
    </parent>
    <properties>
        <cxf.module.name>org.apache.cxf.wsn</cxf.module.name>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${project.version}</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>${project.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.cxf.xjcplugins</groupId>
                        <artifactId>cxf-xjc-dv</artifactId>
                        <version>${cxf.xjc-utils.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <configuration>
                            <fork>${cxf.codegenplugin.forkmode}</fork>
                            <defaultOptions>
                                <xjcargs>
                                    <xjcarg>-Xdv</xjcarg>
                                </xjcargs>
                                <markGenerated>true</markGenerated>
                                <faultSerialVersionUID>1</faultSerialVersionUID>
                            </defaultOptions>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/org/apache/cxf/wsn/wsdl/wsn.wsdl</wsdl>
                                    <extraargs>
                                        <extraarg>-verbose</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Import-Package>
                            javax.xml.bind*;version="${cxf.osgi.javax.bind.version}",
                            javax.jws*;version="${cxf.osgi.jws.version}",
                            javax.xml.ws*;version="${cxf.osgi.javax.xml.ws.version}",
                            org.apache.cxf*;version="[3.0,4)",
                            *
                        </Import-Package>
                        <Export-Package>
                            org.oasis_open.docs.wsn.*;version=1.3;-noimport:=true,
                            org.oasis_open.docs.wsrf.*;version=1.2,
                            org.apache.cxf.wsn.client;version=${cxf.osgi.version.clean},
                            org.apache.cxf.wsn.util;version=${cxf.osgi.version.clean},
                            org.apache.cxf.wsn.wsdl;version=${cxf.osgi.version.clean},
                            org.apache.cxf.wsn.jaxws;version=${cxf.osgi.version.clean}
                        </Export-Package>
                        <_nouses>true</_nouses>
                        <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
