<?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>commons-build</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../pom</relativePath>
    </parent>
    
  <properties>
    <pkgArtifactId>xml-apis</pkgArtifactId>
    <pkgVersion>1.3.4</pkgVersion>
    <realPkgVersion>1.3.04</realPkgVersion>
    <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}-${realPkgVersion}.jar.
    </description>

    <organization>
        <name>Apache Felix Project</name>
        <url>http://felix.apache.org/</url>
    </organization>

    <scm>
      <connection>scm:svn:http://svn.apache.org/repos/felix/trunk/commons/xml-apis</connection>
      <developerConnection>scm:svn:https://svn.apache.org/repos/felix/trunk/commons/xml-apis</developerConnection>
      <url>http://svn.apache.org/viewcvs/felix/trunk/commons/xml-apis</url>
    </scm>

    <dependencies>
        <dependency>
            <groupId>${pkgArtifactId}</groupId>
            <artifactId>${pkgArtifactId}</artifactId>
            <version>${realPkgVersion}</version>
      </dependency>
      <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.0</version>
      </dependency>
      <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.8.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.bcel</groupId>
        <artifactId>bcel</artifactId>
        <version>5.2</version>
      </dependency>
        <dependency>
            <groupId>xml-resolver</groupId>
            <artifactId>xml-resolver</artifactId>
            <version>1.2</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>
                        <Import-Package>org.xml.sax.*, org.w3c.dom.*, javax.xml.*, org.apache.xml.resolver.*,javax.swing,javax.swing.border,javax.swing.event</Import-Package>
                        <Export-Package>
                            org.xml.sax.*, org.w3c.dom.*, javax.xml.*, org.apache.xml.resolver.*
                        </Export-Package>
                        <Private-Package>
                          org.apache.xalan.*,org.apache.xml.*,org.apache.xpath.*,org.apache.html.dom,
                          org.apache.wml.*,org.apache.xerces.*,java_cup.runtime,
                          org.apache.bcel.*,org.apache.env.*
                        </Private-Package>
                        <Include-Resource>
                          src/main/resources,
                          @xercesImpl-2.8.1.jar!/META-INF/services/**,
                          @xalan-2.7.0.jar!/META-INF/services/**
                        </Include-Resource>
                        <DynamicImport-Package>javax.naming</DynamicImport-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
