<?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</groupId>
        <artifactId>felix</artifactId>
        <version>1.0.2</version>
        <relativePath>../../pom</relativePath>
    </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>
    <scm>
      <connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/commons/xercesImpl</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/commons/xercesImpl</developerConnection>
      <url>http://svn.apache.org/viewcvs/felix/trunk/commons/xercesImpl</url>
    </scm>

    <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>
                <version>1.2.1</version>
                <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>
                            src/main/resources,
                            @${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>
