<?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.
-->
<obr>
    <require extend="false"
        filter="(service=org.osgi.service.log.LogService)"
        multiple="false" name="service" optional="true">
        Import Service org.osgi.service.log.LogService
    </require>
    <capability name="service">
        <p n="service" v="org.apache.felix.cm.PersistenceManager" />
        <p n="service.description"
            v="Platform Filesystem Persistence Manager" />
        <p n="service.pid"
            v="org.apache.felix.cm.file.FilePersistenceManager" />
        <p n="service.vendor" v="Apache Software Foundation" />
    </capability>
    <capability name="service">
        <p n="service" v="org.osgi.service.cm.ConfigurationAdmin" />
        <p n="service.description"
            v="Configuration Admin Service Specification 1.3 Implementation" />
        <p n="service.pid" v="org.apache.felix.cm.ConfigurationAdmin" />

        <p n="service.vendor" v="Apache Software Foundation" />
    </capability>
</obr>
