<!--
  ~ 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">
        <wsaw:UsingAddressing wsdl:required="false" />
        <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>