<?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.
-->
<!-- START SNIPPET: beans -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:cxf="http://cxf.apache.org/core" 
    xmlns:osgi="http://www.springframework.org/schema/osgi"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd 
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
        http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">

    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-http.xml" />
    <import resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml" />

    <jaxws:endpoint id="SoapHandlerEndpoint"
        implementor="org.apache.servicemix.examples.cxf.springcfghandler.AddNumbersImpl"
        address="/SpringConfigHandler"
        wsdlLocation="wsdl/addNumbers.wsdl"
        endpointName="e:AddNumbersPort"
        serviceName="s:AddNumbersService"
        xmlns:e="http://apache.org/springcfg/handlers"
            xmlns:s="http://apache.org/springcfg/handlers">
        <jaxws:handlers>
            <bean class="org.apache.servicemix.examples.cxf.springcfghandler.ModifyNumberHandler"/>
            </jaxws:handlers>
        </jaxws:endpoint>

       
       <jaxws:client id="client" 
             serviceClass="org.apache.springcfg.handlers.AddNumbers"    
        endpointName="e:AddNumbersPort"
        serviceName="s:AddNumbersService"
        xmlns:e="http://apache.org/springcfg/handlers"
            xmlns:s="http://apache.org/springcfg/handlers"
             wsdlLocation="wsdl/addNumbers.wsdl"
             address="http://localhost:8080/cxf/SpringConfigHandler">
             <jaxws:handlers>
            <bean class="org.apache.servicemix.examples.cxf.springcfghandler.ModifyNumberHandler"/>
            </jaxws:handlers>
         </jaxws:client>
 
       <osgi:service id="testSpringCfgHandler" ref="client"
            interface="org.apache.springcfg.handlers.AddNumbers"/>

       
</beans>
<!-- END SNIPPET: beans -->
