<!--
  ~ 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.
  -->

<wsdl:definitions xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
                  xmlns:ns0="http://axisversion.sample/xsd"
                  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
                  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
                  xmlns:ns1="http://org.apache.axis2/xsd"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema"
                  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  targetNamespace="http://axisversion.sample/xsd">
    <wsdl:types>
        <xs:schema xmlns:ns="http://axisversion.sample/xsd" attributeFormDefault="qualified"
                   elementFormDefault="unqualified" targetNamespace="http://axisversion.sample/xsd">
            <xs:element name="ExceptionFault">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="Exception" nillable="true"
                                    type="xs:anyType"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="getVersionResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="getVersionRequest"/>
    <wsdl:message name="getVersionResponse">
        <wsdl:part name="parameters" element="ns0:getVersionResponse"/>
    </wsdl:message>
    <wsdl:message name="getVersionFault">
        <wsdl:part name="parameters" element="ns0:ExceptionFault"/>
    </wsdl:message>
    <wsdl:portType name="VersionPortType">
        <wsdl:operation name="getVersion">
            <wsdl:input message="ns0:getVersionRequest" wsaw:Action="urn:getVersion"/>
            <wsdl:output message="ns0:getVersionResponse" wsaw:Action="urn:getVersionResponse"/>
            <wsdl:fault message="ns0:getVersionFault" name="getVersionFault"
                        wsaw:Action="urn:getVersionFault"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="VersionSOAP11Binding" type="ns0:VersionPortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="getVersion">
            <soap:operation soapAction="urn:getVersion" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="getVersionFault">
                <soap:fault use="literal" name="getVersionFault"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="VersionSOAP12Binding" type="ns0:VersionPortType">
        <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="getVersion">
            <soap12:operation soapAction="urn:getVersion" style="document"/>
            <wsdl:input>
                <soap12:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap12:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="getVersionFault">
                <soap12:fault use="literal" name="getVersionFault"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:binding name="VersionHttpBinding" type="ns0:VersionPortType">
        <http:binding verb="POST"/>
        <wsdl:operation name="getVersion">
            <http:operation location="Version/getVersion"/>
            <wsdl:input>
                <mime:content type="text/xml" part="getVersion"/>
            </wsdl:input>
            <wsdl:output>
                <mime:content type="text/xml" part="getVersion"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="Version">
        <wsdl:port name="VersionSOAP11port_http" binding="ns0:VersionSOAP11Binding">
            <soap:address location="http://127.0.0.1:8000/axis2/services/Version"/>
        </wsdl:port>
        <wsdl:port name="VersionSOAP12port_http" binding="ns0:VersionSOAP12Binding">
            <soap12:address location="http://127.0.0.1:8000/axis2/services/Version"/>
        </wsdl:port>
        <wsdl:port name="VersionHttpport" binding="ns0:VersionHttpBinding">
            <http:address location="http://127.0.0.1:8000/axis2/services/Version"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>