<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="ShippingService"
    targetNamespace="http://ord-playground.example.org/shipping/v1"
    xmlns:tns="http://ord-playground.example.org/shipping/v1"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:documentation>Shipment tracking of the ORD playground shop. Shipment/OrderID joins to the Orders OData service.</wsdl:documentation>
  <wsdl:types>
    <xsd:schema targetNamespace="http://ord-playground.example.org/shipping/v1" elementFormDefault="qualified">
      <xsd:simpleType name="ShipmentStatus">
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="CREATED"/>
          <xsd:enumeration value="IN_TRANSIT"/>
          <xsd:enumeration value="DELIVERED"/>
        </xsd:restriction>
      </xsd:simpleType>
      <xsd:complexType name="TrackingEvent">
        <xsd:sequence>
          <xsd:element name="Timestamp" type="xsd:dateTime"/>
          <xsd:element name="Location" type="xsd:string"/>
          <xsd:element name="Status" type="xsd:string"/>
          <xsd:element name="Description" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="TrackingEvents">
        <xsd:sequence>
          <xsd:element name="TrackingEvent" type="tns:TrackingEvent" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="Shipment">
        <xsd:sequence>
          <xsd:element name="ShipmentID" type="xsd:string"/>
          <xsd:element name="OrderID" type="xsd:string"/>
          <xsd:element name="Carrier" type="xsd:string"/>
          <xsd:element name="TrackingNumber" type="xsd:string"/>
          <xsd:element name="Status" type="tns:ShipmentStatus"/>
          <xsd:element name="ShippedAt" type="xsd:dateTime" minOccurs="0"/>
          <xsd:element name="DeliveredAt" type="xsd:dateTime" minOccurs="0"/>
          <xsd:element name="DestinationCountry" type="xsd:string"/>
          <xsd:element name="Packages" type="xsd:int"/>
          <xsd:element name="WeightKg" type="xsd:decimal"/>
          <xsd:element name="TrackingEvents" type="tns:TrackingEvents"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="GetShipment">
        <xsd:complexType>
          <xsd:sequence>
              <xsd:element name="ShipmentID" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="GetShipmentResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Shipment" type="tns:Shipment"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="GetShipmentsByOrder">
        <xsd:complexType>
          <xsd:sequence>
              <xsd:element name="OrderID" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="GetShipmentsByOrderResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Shipment" type="tns:Shipment" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="TrackShipment">
        <xsd:complexType>
          <xsd:sequence>
              <xsd:element name="TrackingNumber" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="TrackShipmentResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Shipment" type="tns:Shipment"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ListShipments">
        <xsd:complexType>
          <xsd:sequence>
              <xsd:element name="Status" type="tns:ShipmentStatus" minOccurs="0"/>
              <xsd:element name="Carrier" type="xsd:string" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ListShipmentsResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Shipment" type="tns:Shipment" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>

  <wsdl:message name="GetShipmentRequest"><wsdl:part name="parameters" element="tns:GetShipment"/></wsdl:message>
  <wsdl:message name="GetShipmentResponse"><wsdl:part name="parameters" element="tns:GetShipmentResponse"/></wsdl:message>
  <wsdl:message name="GetShipmentsByOrderRequest"><wsdl:part name="parameters" element="tns:GetShipmentsByOrder"/></wsdl:message>
  <wsdl:message name="GetShipmentsByOrderResponse"><wsdl:part name="parameters" element="tns:GetShipmentsByOrderResponse"/></wsdl:message>
  <wsdl:message name="TrackShipmentRequest"><wsdl:part name="parameters" element="tns:TrackShipment"/></wsdl:message>
  <wsdl:message name="TrackShipmentResponse"><wsdl:part name="parameters" element="tns:TrackShipmentResponse"/></wsdl:message>
  <wsdl:message name="ListShipmentsRequest"><wsdl:part name="parameters" element="tns:ListShipments"/></wsdl:message>
  <wsdl:message name="ListShipmentsResponse"><wsdl:part name="parameters" element="tns:ListShipmentsResponse"/></wsdl:message>

  <wsdl:portType name="ShippingPortType">
    <wsdl:operation name="GetShipment">
      <wsdl:input message="tns:GetShipmentRequest"/>
      <wsdl:output message="tns:GetShipmentResponse"/>
    </wsdl:operation>
    <wsdl:operation name="GetShipmentsByOrder">
      <wsdl:input message="tns:GetShipmentsByOrderRequest"/>
      <wsdl:output message="tns:GetShipmentsByOrderResponse"/>
    </wsdl:operation>
    <wsdl:operation name="TrackShipment">
      <wsdl:input message="tns:TrackShipmentRequest"/>
      <wsdl:output message="tns:TrackShipmentResponse"/>
    </wsdl:operation>
    <wsdl:operation name="ListShipments">
      <wsdl:input message="tns:ListShipmentsRequest"/>
      <wsdl:output message="tns:ListShipmentsResponse"/>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="ShippingBinding" type="tns:ShippingPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="GetShipment">
      <soap:operation soapAction="http://ord-playground.example.org/shipping/v1/GetShipment" style="document"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="GetShipmentsByOrder">
      <soap:operation soapAction="http://ord-playground.example.org/shipping/v1/GetShipmentsByOrder" style="document"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="TrackShipment">
      <soap:operation soapAction="http://ord-playground.example.org/shipping/v1/TrackShipment" style="document"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="ListShipments">
      <soap:operation soapAction="http://ord-playground.example.org/shipping/v1/ListShipments" style="document"/>
      <wsdl:input><soap:body use="literal"/></wsdl:input>
      <wsdl:output><soap:body use="literal"/></wsdl:output>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="ShippingService">
    <wsdl:port name="ShippingPort" binding="tns:ShippingBinding">
      <soap:address location="https://shipping-ord.zazukoians.org/soap/shipping"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
