<!--
  ~ 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 xmlns:s1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
             xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:s="http://www.w3.org/2001/XMLSchema"
             xmlns:tns="http://xmlsoap.org/Ping"
             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
             xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
             xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
             targetNamespace="http://xmlsoap.org/Ping"
             xmlns="http://schemas.xmlsoap.org/wsdl/">
    <types>
        <s:schema elementFormDefault="qualified" targetNamespace="http://xmlsoap.org/Ping">
            <s:import namespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"/>
            <s:element name="Ping" nillable="true" type="tns:ping"/>
            <s:complexType name="ping">
                <s:sequence>
                    <s:element minOccurs="0" maxOccurs="1" name="ticket" type="tns:ticketType"/>
                    <s:element minOccurs="1" maxOccurs="1" name="text" nillable="true" type="s:string"/>
                </s:sequence>
            </s:complexType>
            <s:complexType name="ticketType">
                <s:simpleContent>
                    <s:extension base="s:string">
                        <s:attribute ref="s1:Id"/>
                    </s:extension>
                </s:simpleContent>
            </s:complexType>
            <s:element name="PingResponse" nillable="true" type="tns:pingResponse"/>
            <s:complexType name="pingResponse">
                <s:sequence>
                    <s:element minOccurs="1" maxOccurs="1" name="text" nillable="true" type="s:string"/>
                </s:sequence>
            </s:complexType>
        </s:schema>
        <s:schema elementFormDefault="qualified" targetNamespace="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <s:attribute name="Id" type="s:string"/>
        </s:schema>
    </types>
    <message name="PingRequest">
        <part name="ping" element="tns:Ping"/>
    </message>
    <message name="PingResponse">
        <part name="pingResponse" element="tns:PingResponse"/>
    </message>
    <portType name="PingPort">
        <operation name="Ping">
            <input message="tns:PingRequest"/>
            <output message="tns:PingResponse"/>
        </operation>
    </portType>
    <!-- Bindings are removed -->
</definitions>
