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

Bundle-Activator: org.apache.aries.jax.rs.whiteboard.activator.CxfJaxrsBundleActivator
Provide-Capability: \
    osgi.implementation; \
        osgi.implementation='aries.jax-rs'; \
        version:Version='${Bundle-Version}',\
    osgi.implementation; \
        osgi.implementation='osgi.jaxrs'; \
        version:Version='1.0.0'; \
        uses:="javax.ws.rs,javax.ws.rs.core,javax.ws.rs.ext,javax.ws.rs.client,javax.ws.rs.container,javax.ws.rs.sse,org.osgi.service.jaxrs.whiteboard", \
    osgi.service; \
        objectClass:List<String>="org.osgi.service.jaxrs.runtime.JaxrsServiceRuntime"; \
        uses:="org.osgi.service.jaxrs.runtime,org.osgi.service.jaxrs.runtime.dto", \
    osgi.service; \
        objectClass:List<String>="javax.ws.rs.client.ClientBuilder"; \
        uses:="javax.ws.rs.client,org.osgi.service.jaxrs.client", \
    osgi.service; \
        objectClass:List<String>="org.osgi.service.jaxrs.client.SseEventSourceFactory"; \
        uses:="javax.ws.rs.client,org.osgi.service.jaxrs.client", \
    osgi.serviceloader; \
        osgi.serviceloader=javax.ws.rs.client.ClientBuilder; \
        uses:="javax.ws.rs.client,org.osgi.service.jaxrs.client", \
    osgi.serviceloader; \
        osgi.serviceloader=javax.ws.rs.ext.RuntimeDelegate; \
        uses:="javax.ws.rs.core,javax.ws.rs.ext", \
    osgi.serviceloader; \
        osgi.serviceloader=javax.ws.rs.sse.SseEventSource.Builder; \
        uses:="javax.ws.rs.client,javax.ws.rs.sse"

Require-Capability: \
    osgi.implementation; \
        filter:='(&(osgi.implementation=osgi.http)(version>=1)(!(version>=2)))',\
    osgi.extender;\
        filter:="(osgi.extender=osgi.serviceloader.registrar)";\
        resolution:='optional'

Import-Package:\
    !com.sun.*,\
    !javax.cache.*,\
    !javax.imageio.*,\
    !javax.jws.*,\
    !javax.security.*,\
    !javax.tools.*,\
    !javax.validation.*,\
    !javax.wsdl.*,\
    !net.sf.cglib.proxy.*,\
    !org.apache.abdera.*,\
    !org.apache.aries.*,\
    !org.apache.cxf.*,\
    !org.apache.log4j.*,\
    !org.apache.neethi.*,\
    !org.apache.velocity.*,\
    !org.apache.xerces.*,\
    !org.apache.xml.resolver.*,\
    !org.apache.xmlbeans.*,\
    !org.atmosphere.*,\
    !org.dom4j.*,\
    !org.junit.*,\
    !org.jvnet.fastinfoset.*,\
    !org.jvnet.staxex.*,\
    !org.ietf.jgss.*,\
    !org.objectweb.asm.*,\
    !org.osgi.service.blueprint.*,\
    !org.osgi.service.http,\
    !org.relaxng.datatype.*,\
    !org.slf4j.spi.*,\
    !org.springframework.*,\
    *

-contract: *

-exportcontents: org.apache.aries.jax.rs.whiteboard

-includeresource:\
    lib/component-dsl.jar=org.apache.aries.component-dsl.component-dsl-*.jar;lib:=true,\
    lib/cxf-core.jar=cxf-core-*.jar;lib:=true,\
    lib/cxf-rt-frontend-jaxrs.jar=cxf-rt-frontend-jaxrs-*.jar;lib:=true,\
    lib/cxf-rt-rs-client.jar=cxf-rt-rs-client-*.jar;lib:=true,\
    lib/cxf-rt-rs-sse.jar=cxf-rt-rs-sse-*.jar;lib:=true,\
    lib/cxf-rt-transports-http.jar=cxf-rt-transports-http-*.jar;lib:=true,\
    lib/cxf-tools-common.jar=cxf-tools-common-*.jar;lib:=true,\
    lib/stax2-api.jar=stax2-api-*.jar;lib:=true,\
    lib/woodstox-core.jar=woodstox-core-*.jar;lib:=true,\
    lib/xmlschema-core.jar=xmlschema-core-*.jar;lib:=true
