<?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.12-SNAPSHOT</version>
  </parent>

  <artifactId>camel-cxf</artifactId>
  <packaging>bundle</packaging>
  <name>Camel :: CXF</name>
  <description>Camel CXF support</description>

  <properties>
    <camel.osgi.import>
      !org.apache.camel.component.cxf,
      !org.apache.camel.component.cxf.blueprint,
      !org.apache.camel.component.cxf.converter,
      !org.apache.camel.component.cxf.cxfbean,
      !org.apache.camel.component.cxf.feature,
      !org.apache.camel.component.cxf.interceptors,
      !org.apache.camel.component.cxf.jaxrs,
      !org.apache.camel.component.cxf.spring,
      !org.apache.camel.component.cxf.util,
      javax.activation*;version="[0.0,2)",
      javax.annotation*;version="[0.0,2)",
      javax.jws*;version="[0.0,3)",
      javax.ws.rs*;version="[0.0,3)",
      javax.xml.stream*;version="[0.0,2)",
      javax.xml.ws*;version="[0.0,3.0)",
      org.apache.camel.*;${camel.osgi.import.camel.version},
      ${camel.osgi.import.defaults},
      ${camel.osgi.import.additional},
      org.osgi.service.blueprint;resolution:=optional,
      org.osgi.service.blueprint.container;resolution:=optional,
      org.osgi.service.blueprint.reflect;resolution:=optional,
      org.apache.aries.blueprint;version="[1.0,2.0)";resolution:=optional,
      org.apache.aries.blueprint.reflect;version="[1.0,2.0)";resolution:=optional,
      org.apache.aries.blueprint.mutable;version="[1.0,2.0)";resolution:=optional,
      org.apache.camel.blueprint;resolution:=optional,
      org.osgi.framework;resolution:=optional,
      *
    </camel.osgi.import>

    <camel.osgi.export>
      org.apache.camel.component.cxf;${camel.osgi.version},
      org.apache.camel.component.cxf.blueprint;${camel.osgi.version},
      org.apache.camel.component.cxf.converter;${camel.osgi.version},
      org.apache.camel.component.cxf.cxfbean;${camel.osgi.version},
      org.apache.camel.component.cxf.feature;${camel.osgi.version},
      org.apache.camel.component.cxf.interceptors;${camel.osgi.version},
      org.apache.camel.component.cxf.jaxrs;${camel.osgi.version},
      org.apache.camel.component.cxf.spring;${camel.osgi.version},
      org.apache.camel.component.cxf.util;${camel.osgi.version}
    </camel.osgi.export>
    <camel.osgi.export.service>
      org.apache.camel.spi.ComponentResolver;component=cxf,
      org.apache.camel.spi.ComponentResolver;component=cxfrs,
      org.apache.camel.spi.ComponentResolver;component=cxfbean
    </camel.osgi.export.service>
    <camel.osgi.failok>true</camel.osgi.failok>

  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-cxf-transport</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-frontend-jaxrs</artifactId>
      <version>${cxf-version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-frontend-jaxws</artifactId>
      <version>${cxf-version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <!-- OSGi, Blueprint -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-blueprint</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.compendium</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.aries.blueprint</groupId>
      <artifactId>org.apache.aries.blueprint</artifactId>
      <version>${aries-blueprint-core-version}</version>
      <scope>provided</scope>
    </dependency>

    <!--  Test Dependencies -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core-xml</artifactId>
      <scope>test</scope>
    </dependency>
    
    <!-- Try to test convert PayLoad into POJO -->
    <dependency>
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-jaxb</artifactId>
       <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test-spring</artifactId>
      <scope>test</scope>
    </dependency>
    
    <!-- test for the cxf jms transport -->
    <dependency>
       <groupId>org.apache.activemq</groupId>
       <artifactId>activemq-broker</artifactId>
       <scope>test</scope>
    </dependency>
    
    <!-- test for cxf failover feature -->
	<dependency>
		<groupId>org.apache.cxf</groupId>
		<artifactId>cxf-rt-features-clustering</artifactId>
		<version>${cxf-version}</version>
	</dependency>
    
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-kahadb-store</artifactId>
        <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-jms</artifactId>
      <version>${cxf-version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-transports-http-jetty</artifactId>
      <version>${cxf-version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-bindings-soap</artifactId>
      <version>${cxf-version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-jetty</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>${httpclient4-version}</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpmime</artifactId>
  	    <version>${httpclient4-version}</version>
      	<scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-testutils</artifactId>
      <version>${cxf-version}</version>
      <scope>test</scope>
    </dependency>
    
    <!-- this dependency is just for testing -->
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-ws-rm</artifactId>
      <version>${cxf-version}</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-ws-security</artifactId>
      <version>${cxf-version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymockclassextension</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.cxf</groupId>
      <artifactId>cxf-rt-rs-extension-providers</artifactId>
      <version>${cxf-version}</version>
      <scope>test</scope>
    </dependency>  
    <dependency>
      <groupId>org.codehaus.jettison</groupId>
      <artifactId>jettison</artifactId>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <defaultGoal>install</defaultGoal>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>

    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <childDelegation>false</childDelegation>
          <forkMode>once</forkMode>
          <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
          <reportFormat>brief</reportFormat>
          <useFile>false</useFile>
          <runOrder>alphabetical</runOrder>
          <!--parallel>classes</parallel>
          <perCoreThreadCount>true</perCoreThreadCount>
          <threadCount>2</threadCount-->
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
              <goal>attach-artifact</goal>
            </goals>
            <configuration>
              <artifacts>
                <artifact>
                  <file>./src/main/resources/schema/cxfEndpoint.xsd</file>
                  <classifier>spring</classifier>
                  <type>xsd</type>
                </artifact>
                <artifact>
                  <file>./src/main/resources/schema/blueprint/camel-cxf.xsd</file>
                  <classifier>blueprint</classifier>
                  <type>xsd</type>
                </artifact>
              </artifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
              <testSourceRoot>${basedir}/target/generated/src/test/java</testSourceRoot>
              <defaultOptions>
                  <frontEnd>jaxws21</frontEnd>
              </defaultOptions>
              <wsdlOptions>
                <wsdlOption>
                  <wsdl>${basedir}/src/test/resources/mtom.wsdl</wsdl>
                </wsdlOption>
                <wsdlOption>
                  <wsdl>${basedir}/src/test/resources/hello_world_wssec.wsdl</wsdl>
                </wsdlOption>
                <wsdlOption>
                  <wsdl>${basedir}/src/test/resources/MultiPartTest.wsdl</wsdl>
                </wsdlOption>
                <wsdlOption>
                  <wsdl>${basedir}/src/test/resources/person.wsdl</wsdl>
                </wsdlOption>
                <wsdlOption>
                  <wsdl>${basedir}/src/test/resources/person-non-wrapper.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-b</extraarg>
                    <extraarg>${basedir}/src/test/resources/person-non-wrapper-binding.xml</extraarg>
                  </extraargs>
                </wsdlOption>
                <wsdlOption>
                  <wsdl>${basedir}/src/test/resources/soap_header.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-verbose</extraarg>
                  </extraargs>
                </wsdlOption>
                <wsdlOption>
                  <wsdl>${basedir}/src/test/resources/pizza_service.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-exsh</extraarg>
                    <extraarg>true</extraarg>
                  </extraargs>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>ibm-jdk</id>
      <activation>
        <property>
          <name>java.vendor</name>
          <value>IBM Corporation</value>
        </property>
      </activation>
      <!--
        Add the Sun jaxp-ri as a dependency when using the ibm jdk, so that
        cxf's dependency on the Sun saaj can work with the ibm jdk.
      -->
      <dependencies>
        <dependency>
          <groupId>com.sun.xml.parsers</groupId>
          <artifactId>jaxp-ri</artifactId>
        </dependency>
      </dependencies>
    </profile>
  </profiles>

</project>
