<?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.
-->
<features name="karaf-soap-example-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.6.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.5.0">

    <repository>mvn:org.apache.cxf.karaf/apache-cxf/${cxf.version}/xml/features</repository>

    <feature name="karaf-soap-example-common" version="${project.version}">
        <bundle>mvn:org.apache.karaf.examples/karaf-soap-example-api/${project.version}</bundle>
        <bundle dependency="true">mvn:org.ow2.asm/asm/${asm6.version}</bundle>
        <bundle dependency="true">mvn:org.ow2.asm/asm-util/${asm6.version}</bundle>
        <bundle dependency="true">mvn:org.ow2.asm/asm-tree/${asm6.version}</bundle>
        <bundle dependency="true">mvn:org.ow2.asm/asm-analysis/${asm6.version}</bundle>
        <bundle dependency="true">mvn:org.ow2.asm/asm-commons/${asm6.version}</bundle>
    </feature>
    
    <feature name="karaf-soap-example-blueprint" version="${project.version}">
        <feature>karaf-soap-example-common</feature>
        <feature>aries-blueprint</feature>
        <feature version="${cxf.version}">cxf-core</feature>
        <feature version="${cxf.version}">cxf-jaxws</feature>
        <feature version="${cxf.version}">cxf-databinding-jaxb</feature>
        <bundle>mvn:org.apache.karaf.examples/karaf-soap-example-blueprint/${project.version}</bundle>
    </feature>

    <feature name="karaf-soap-example-client" version="${project.version}">
        <feature version="${cxf.version}">cxf-core</feature>
        <feature version="${cxf.version}">cxf-jaxws</feature>
        <feature version="${cxf.version}">cxf-databinding-jaxb</feature>
        <bundle>mvn:org.apache.karaf.examples/karaf-soap-example-client/${project.version}</bundle>
    </feature>

    <feature name="karaf-soap-example-scr" version="${project.version}">
        <feature>karaf-soap-example-common</feature>
        <feature>scr</feature>
        <feature version="${cxf.version}">cxf-core</feature>
        <feature version="${cxf.version}">cxf-jaxws</feature>
        <feature version="${cxf.version}">cxf-databinding-jaxb</feature>
        <bundle>mvn:org.apache.karaf.examples/karaf-soap-example-scr/${project.version}</bundle>
    </feature>

</features>
