<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
    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:camel="http://camel.apache.org/schema/spring" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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     ">

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

  <cxf:cxfEndpoint xmlns:person="http://camel.apache.org/wsdl-first" address="http://localhost:${CXFTestSupport.port2}/CxfWsdlFirstTest/PersonService/" endpointName="person:soap" id="routerEndpoint" serviceClass="org.apache.camel.wsdl_first.Person" serviceName="person:PersonService" wsdlURL="classpath:person.wsdl">
      <cxf:properties>            
            <entry key="schema-validation-enabled" value="true"/>
      </cxf:properties>      
      <cxf:handlers>
          <ref bean="fromEndpointJaxwsHandler"/> 
      </cxf:handlers>     
  </cxf:cxfEndpoint> 


   <cxf:cxfEndpoint xmlns:person="http://camel.apache.org/wsdl-first" address="http://localhost:${CXFTestSupport.port1}/CxfWsdlFirstTest/PersonService/" endpointName="person:soap" id="serviceEndpoint" serviceClass="org.apache.camel.wsdl_first.Person" serviceName="person:PersonService">
      
      <cxf:handlers>
          <ref bean="toEndpointJaxwsHandler"/> 
      </cxf:handlers>     

   </cxf:cxfEndpoint>
      

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

   <camelContext xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="noErrorHandler" id="camel">
    <route id="route20">
        <from uri="cxf:bean:routerEndpoint"/>
        <to uri="cxf:bean:serviceEndpoint"/>
    </route>
    <route id="route21">
        <from uri="direct:producer"/>
        <to uri="cxf:bean:serviceEndpoint?dataFormat=POJO"/>
    </route>
</camelContext>

    <bean class="org.apache.camel.wsdl_first.JaxwsTestHandler" id="fromEndpointJaxwsHandler"/>
    <bean class="org.apache.camel.wsdl_first.JaxwsTestHandler" id="toEndpointJaxwsHandler"/>
    


</beans>