<?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:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="            http://cxf.apache.org/jaxws                                                http://cxf.apache.org/schemas/jaxws.xsd            http://www.springframework.org/schema/beans               http://www.springframework.org/schema/beans/spring-beans.xsd">
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
    <jaxws:server id="hwg-service-endpoint" address="http://localhost:${testutil.ports.TestPort}/HelloWorldGreeter">
        <jaxws:serviceBean>
            <bean class="org.apache.hello_world.GreeterImpl"/>
        </jaxws:serviceBean>
        <jaxws:features>
            <bean class="org.apache.cxf.javascript.JavascriptOptionsFeature">
                <property name="namespacePrefixMap">
                    <map>
                        <entry>
                            <key>
                                <value>http://apache.org/hello_world</value>
                            </key>
                            <value>hg</value>
                        </entry>
                        <entry>
                            <key>
                                <value>http://apache.org/hello_world/types</value>
                            </key>
                            <value>hgt</value>
                        </entry>
                    </map>
                </property>
            </bean>
        </jaxws:features>
    </jaxws:server>
</beans>
