<?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.
  -->
<definitions name="Echo"
             targetNamespace="urn:test"
             xmlns:tns="urn:test"
             xmlns="http://schemas.xmlsoap.org/wsdl/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
    <types>
        <schema xmlns="http://www.w3.org/2001/XMLSchema">
            <import namespace="urn:test" schemaLocation="test.xsd" />
        </schema>
    </types>

    <message name="EchoRequest">
        <part name="echo" element="tns:Echo" />
    </message>

    <message name="EchoResponse">
        <part name="echoResponse" element="tns:EchoResponse" />
    </message>

    <portType name="EchoPort">
        <operation name="Echo">
            <input message="tns:EchoRequest" />
            <output message="tns:EchoResponse" />
        </operation>
    </portType>

    <binding name="EchoBinding" type="tns:EchoPort">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
        <operation name="Echo">
            <soap:operation soapAction="urn:test:echo" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
    </binding>

    <service name="EchoService">
        <port name="EchoPort" binding="tns:EchoBinding">
            <soap:address location="http://localhost:8080/axis2/services/EchoService" />
        </port>
    </service>
</definitions>
