<?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.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:cxf="http://camel.apache.org/schema/cxf"
       xmlns:httpj="http://cxf.apache.org/transports/http-jetty/configuration"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://cxf.apache.org/transports/http-jetty/configuration http://cxf.apache.org/schemas/configuration/http-jetty.xsd
       
    ">
   <import resource="classpath:META-INF/cxf/cxf.xml"/>
   <!-- Added the import for testing the CAMEL-329 -->

   <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

   <!-- START SNIPPET: example -->
   <cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:${CXFTestSupport.port2}/CXFGreeterRouterTest/CamelContext/RouterPort"
    		serviceClass="org.apache.hello_world_soap_http.GreeterImpl"
    		skipFaultLogging="true">
        <cxf:outInterceptors>
            <!-- This interceptor will force the CXF server send the XML start document to client -->
            <bean class="org.apache.camel.component.cxf.WriteXmlDeclarationInterceptor"/>
        </cxf:outInterceptors>
        <cxf:properties>
            <!-- Set the publishedEndpointUrl which could override the service address from generated WSDL as you want -->
    	    <entry key="publishedEndpointUrl" value="http://www.simple.com/services/test" />
    	</cxf:properties>
   </cxf:cxfEndpoint>
   <!-- END SNIPPET: example --> 		

   <cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:${CXFTestSupport.port1}/CXFGreeterRouterTest/SoapContext/SoapPort"
    		wsdlURL="testutils/hello_world.wsdl"
    		serviceClass="org.apache.hello_world_soap_http.Greeter"
    		endpointName="s:SoapPort"
    		serviceName="s:SOAPService"
    	xmlns:s="http://apache.org/hello_world_soap_http" />
    	
   
   <httpj:engine-factory>
        <httpj:engine port="${CXFTestSupport.port1}">
            <httpj:threadingParameters minThreads="20" maxThreads="20"/>
        </httpj:engine>
    </httpj:engine-factory>
   
   <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <route errorHandlerRef="noErrorHandler">
      <from uri="cxf:bean:routerEndpoint" />
      <to uri="cxf:bean:serviceEndpoint" />
    </route>
   </camelContext>

   <bean id="noErrorHandler" class="org.apache.camel.builder.NoErrorHandlerBuilder"/>

</beans>