<?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. 
-->
<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>
    <parent>
        <groupId>org.apache.felix.commons</groupId>
        <artifactId>build</artifactId>
        <version>0.9.0-incubator-SNAPSHOT</version>
    </parent>
    <properties>
        <pkgArtifactId>xercesImpl</pkgArtifactId>
        <pkgVersion>2.8.1</pkgVersion>
        <pomVersion>0001</pomVersion>
        <osgiVersion>${pkgVersion}</osgiVersion>
    </properties>
    <groupId>org.apache.felix.commons</groupId>
    <artifactId>${pom.groupId}.${pkgArtifactId}</artifactId>
    <version>${osgiVersion}-${pomVersion}-SNAPSHOT</version>
    <packaging>bundle</packaging>
    <name>${pkgArtifactId} bundle</name>
    <description>
        This bundle simply wraps ${pkgArtifactId}-${pkgVersion}.jar.
    </description>
    <organization>
        <name>Apache Felix Project</name>
        <url>http://incubator.apache.org/felix/</url>
    </organization>
    <dependencies>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>${pkgArtifactId}</artifactId>
            <version>${pkgVersion}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>
                            ${pom.artifactId}
                        </Bundle-SymbolicName>
                        <Export-Package>
                            org.apache.xml.serialize;version=${pkgVersion}
                        </Export-Package>
                        <Private-Package>
                            org.apache.html.dom, org.apache.wml,
                            org.apache.wml.dom, org.apache.xerces.dom,
                            org.apache.xerces.dom.events,
                            org.apache.xerces.dom3.as, org.apache.xerces.impl,
                            org.apache.xerces.impl.dtd,
                            org.apache.xerces.impl.dtd.models,
                            org.apache.xerces.impl.dv,
                            org.apache.xerces.impl.dv.dtd,
                            org.apache.xerces.impl.dv.util,
                            org.apache.xerces.impl.dv.xs,
                            org.apache.xerces.impl.io,
                            org.apache.xerces.impl.msg,
                            org.apache.xerces.impl.validation,
                            org.apache.xerces.impl.xpath,
                            org.apache.xerces.impl.xpath.regex,
                            org.apache.xerces.impl.xs,
                            org.apache.xerces.impl.xs.identity,
                            org.apache.xerces.impl.xs.models,
                            org.apache.xerces.impl.xs.opti,
                            org.apache.xerces.impl.xs.traversers,
                            org.apache.xerces.impl.xs.util,
                            org.apache.xerces.jaxp,
                            org.apache.xerces.jaxp.datatype,
                            org.apache.xerces.jaxp.validation,
                            org.apache.xerces.parsers, org.apache.xerces.util,
                            org.apache.xerces.xinclude, org.apache.xerces.xni,
                            org.apache.xerces.xni.grammars,
                            org.apache.xerces.xni.parser,
                            org.apache.xerces.xpointer, org.apache.xerces.xs,
                            org.apache.xerces.xs.datatypes, org.w3c.dom.html
                        </Private-Package>
                        <Include-Resource>
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/LICENSE,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/NOTICE,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/services,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/services/javax.xml.datatype.DatatypeFactory,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/services/javax.xml.parsers.DocumentBuilderFactory,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/services/javax.xml.parsers.SAXParserFactory,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/services/javax.xml.validation.SchemaFactory,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/services/org.w3c.dom.DOMImplementationSourceList,
                            @${pkgArtifactId}-${pkgVersion}.jar!/META-INF/services/org.xml.sax.driver
                        </Include-Resource>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
