<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project [
        <!ELEMENT project (modelVersion|parent|artifactId|packaging|name|dependencies|build)*>
        <!ATTLIST project
                xmlns CDATA #REQUIRED
                xmlns:xsi CDATA #REQUIRED
                xsi:schemaLocation CDATA #REQUIRED>
        <!ELEMENT modelVersion (#PCDATA)>
        <!ELEMENT parent (groupId|artifactId|version)*>
        <!ELEMENT groupId (#PCDATA)>
        <!ELEMENT artifactId (#PCDATA)>
        <!ELEMENT version (#PCDATA)>
        <!ELEMENT packaging (#PCDATA)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT dependencies (dependency)*>
        <!ELEMENT dependency (groupId|artifactId|scope)*>
        <!ELEMENT scope (#PCDATA)>
        <!ELEMENT build (plugins)*>
        <!ELEMENT plugins (plugin)*>
        <!ELEMENT plugin (groupId|artifactId|executions|configuration)*>
        <!ELEMENT executions (execution)*>
        <!ELEMENT execution (id|phase|configuration|goals)*>
        <!ELEMENT id (#PCDATA)>
        <!ELEMENT phase (#PCDATA)>
        <!ELEMENT configuration (sourceRoot|wsdlOptions|instructions|mainClass|includePluginDependencies)*>
        <!ELEMENT sourceRoot (#PCDATA)>
        <!ELEMENT wsdlOptions (wsdlOption)*>
        <!ELEMENT wsdlOption (wsdl)*>
        <!ELEMENT wsdl (#PCDATA)>
        <!ELEMENT goals (goal)*>
        <!ELEMENT goal (#PCDATA)>
        <!ELEMENT instructions (Bundle-SymbolicName|Import-Package|Require-Bundle|Export-Package)*>
        <!ELEMENT Bundle-SymbolicName (#PCDATA)>
        <!ELEMENT Import-Package (#PCDATA)>
        <!ELEMENT Require-Bundle (#PCDATA)>
        <!ELEMENT Export-Package (#PCDATA)>
        <!ELEMENT mainClass (#PCDATA)>
        <!ELEMENT includePluginDependencies (#PCDATA)>
        ]>
<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/xsd/maven-4.0.0.xsd">

    <!--

        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.
    -->

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.servicemix.examples</groupId>
        <artifactId>cxf</artifactId>
        <version>4.4.1</version>
    </parent>

    <artifactId>cxf-ws-addressing</artifactId>
    <packaging>bundle</packaging>
    <name>Apache ServiceMix :: Features :: Examples :: CXF WS-Addressing OSGI</name>
    <description>CXF example using WS-Addressing</description>

    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.servicemix</groupId>
            <artifactId>servicemix-utils</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-test-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/wsdl/hello_world_addr.wsdl</wsdl>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Description>${project.description}</Bundle-Description>
                        <Import-Package>
                            javax.jws,
                            javax.wsdl,
                            javax.xml.bind,
                            javax.xml.bind.annotation,
                            javax.xml.namespace,
                            javax.xml.soap,
                            javax.xml.transform,
                            javax.xml.ws,
                            javax.xml.ws.handler,
                            javax.xml.ws.handler.soap,
                            META-INF.cxf,
                            org.apache.cxf.bus,
                            org.apache.cxf.bus.spring,
                            org.apache.cxf.bus.resource,
                            org.apache.cxf.configuration.spring,
                            org.apache.cxf.resource,
                            org.apache.cxf.transport.http,
                            org.apache.cxf.feature,
                            org.apache.cxf.interceptor,
                            org.apache.cxf.ws.addressing,
                            org.apache.cxf.ws.addressing.soap,
                            org.apache.servicemix.util,
                            org.springframework.beans.factory.config
                        </Import-Package>
                        <Export-Package>
                            org.apache.servicemix.examples.cxf.wsaddressing,
                            org.apache.hello_world_soap_http,
                            org.apache.hello_world_soap_http.types,
                        </Export-Package>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <configuration>
                    <mainClass>org.apache.servicemix.examples.cxf.wsaddressing.Client</mainClass>
                    <includePluginDependencies>false</includePluginDependencies>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>
