<?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.camel</groupId>
    <artifactId>components</artifactId>
    <version>2.21.2</version>
  </parent>

  <artifactId>camel-atom</artifactId>
  <packaging>jar</packaging>
  <name>Camel :: Atom</name>
  <description>Camel Atom support</description>

  <properties>
    <camel.osgi.export.pkg>
        org.apache.camel.component.atom.*;${camel.osgi.version},
        org.apache.camel.component.feed.*</camel.osgi.export.pkg>
    <camel.osgi.import.pkg>
        !org.apache.camel.component.atom.*,
        !org.apache.camel.component.feed.*,
        ${camel.osgi.import.defaults},
        *
    </camel.osgi.import.pkg>
    <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=atom</camel.osgi.export.service>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.abdera</groupId>
      <artifactId>abdera-core</artifactId>
      <version>${abdera-version}</version>
      <exclusions>
          <exclusion>
              <groupId>org.apache.geronimo.specs</groupId>
              <artifactId>geronimo-activation_1.0.2_spec</artifactId>
          </exclusion>
          <exclusion>
              <groupId>org.apache.geronimo.specs</groupId>
              <artifactId>geronimo-stax-api_1.0_spec</artifactId>
          </exclusion>
          <exclusion>
              <groupId>commons-codec</groupId>
              <artifactId>commons-codec</artifactId>
          </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.abdera</groupId>
      <artifactId>abdera-parser</artifactId>
      <version>${abdera-version}</version>
      <exclusions>
          <exclusion>
              <groupId>xml-apis</groupId>
              <artifactId>xml-apis</artifactId>
          </exclusion>
          <exclusion>
              <groupId>stax</groupId>
              <artifactId>stax-api</artifactId>
          </exclusion>
          <exclusion>
              <artifactId>xmlParserAPIs</artifactId>
              <groupId>xerces</groupId>
          </exclusion>
          <exclusion>
              <artifactId>xercesImpl</artifactId>
              <groupId>xerces</groupId>
          </exclusion>
          <exclusion>
              <artifactId>xom</artifactId>
              <groupId>xom</groupId>
          </exclusion>
          <exclusion>
              <artifactId>xalan</artifactId>
              <groupId>xalan</groupId>
          </exclusion>
          <exclusion>
              <artifactId>xml-apis</artifactId>
              <groupId>xml-apis</groupId>
          </exclusion>
          <exclusion>
              <groupId>org.codehaus.woodstox</groupId>
              <artifactId>wstx-asl</artifactId>
          </exclusion>
      </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-api</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>geronimo-javamail_1.4_spec</artifactId>
                <groupId>org.apache.geronimo.specs</groupId>
            </exclusion>
            <exclusion>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
            </exclusion>
            <exclusion>
                <groupId>stax</groupId>
                <artifactId>stax-api</artifactId>
            </exclusion>
            <exclusion>
                <artifactId>xmlParserAPIs</artifactId>
                <groupId>xerces</groupId>
            </exclusion>
            <exclusion>
                <artifactId>xercesImpl</artifactId>
                <groupId>xerces</groupId>
            </exclusion>
            <exclusion>
                <artifactId>xom</artifactId>
                <groupId>xom</groupId>
            </exclusion>
            <exclusion>
                <artifactId>xalan</artifactId>
                <groupId>xalan</groupId>
            </exclusion>
            <exclusion>
                <artifactId>xml-apis</artifactId>
                <groupId>xml-apis</groupId>
            </exclusion>
            <exclusion>
                <groupId>org.codehaus.woodstox</groupId>
                <artifactId>wstx-asl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-impl</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>geronimo-javamail_1.4_spec</artifactId>
                <groupId>org.apache.geronimo.specs</groupId>
            </exclusion>
            <exclusion>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
            </exclusion>
            <exclusion>
                <groupId>stax</groupId>
                <artifactId>stax-api</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.codehaus.woodstox</groupId>
                <artifactId>wstx-asl</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- testing -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
      <version>${jetty-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-security</artifactId>
      <version>${jetty-version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

	<!-- skip tests on AIX -->
	<profiles>
		<profile>
			<id>aix</id>
			<activation>
				<os>
					<family>AIX</family>
				</os>
			</activation>
			<properties>
				<skipTests>true</skipTests>
			</properties>
		</profile>
	</profiles>

</project>



