<definitions targetNamespace="urn:echo:echoService"
             xmlns:tns="urn:echo:echoService"
             xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
	     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns="http://schemas.xmlsoap.org/wsdl/">

  <types>
    <xsd:schema targetNamespace="urn:echo:echoService"
      xmlns:tns="urn:echo:echoService"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">

      <xsd:complexType name="Order">
	<xsd:sequence>
	  <xsd:element name="productId" type="xsd:string" />
	  <xsd:element name="color">
	    <xsd:simpleType>
	      <xsd:restriction base="xsd:string">
		<xsd:enumeration value="white"/>
		<xsd:enumeration value="red"/>
		<xsd:enumeration value="blue"/>
		<xsd:enumeration value="black"/>
	      </xsd:restriction>
	    </xsd:simpleType>
	  </xsd:element>
	</xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </types>

  <message name="OrderMessage">
    <part name="urgent" type="xsd:boolean"/>
    <part name="order" type="tns:Order"/>
  </message>
  <message name="InvoiceMessage">
    <part name="urgent" type="xsd:boolean"/>
    <part name="order" type="tns:Order"/>
    <part name="price" type="xsd:int"/>
  </message>

  <portType name="orderService">
    <operation name="order">
      <input message="tns:OrderMessage" />
      <output message="tns:InvoiceMessage" />
      <fault name="tns:orderCancelled" />
    </operation>
  </portType>

  <portType name="warehouse">
    <operation name="order">
      <input message="tns:OrderMessage" />
      <output message="tns:InvoiceMessage" />
      <fault name="tns:orderCancelled" />
    </operation>
    <operation name="schedule">
      <input message="tns:OrderMessage" />
    </operation>
  </portType>

  <portType name="warehouseCallback">
    <operation name="receive_not">
      <input message="tns:InvoiceMessage" />
    </operation>
  </portType>

  <plnk:partnerLinkType name="orderLnk">
    <plnk:role name="orderService">
      <plnk:portType name="tns:orderService" />
    </plnk:role>
  </plnk:partnerLinkType>

  <plnk:partnerLinkType name="warehouseLnk">
    <plnk:role name="orderService">
      <plnk:portType name="tns:warehouseCallback" />
    </plnk:role>
    <plnk:role name="warehouseService">
      <plnk:portType name="tns:warehouse" />
    </plnk:role>
  </plnk:partnerLinkType>

</definitions>
