<?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://felix.apache.org/</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>
