<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions targetNamespace="http://queue.amazonaws.com/doc/2011-10-01/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:tns="http://queue.amazonaws.com/doc/2011-10-01/">

  <wsdl:types>
    <xs:schema xmlns:tns="http://queue.amazonaws.com/doc/2011-10-01/"
      xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://queue.amazonaws.com/doc/2011-10-01/"
      elementFormDefault="qualified">

      <!-- CreateQueue Action -->
      <xs:element name="CreateQueue">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="QueueName" type="xs:string" />
            <xs:element ref="tns:Attribute" minOccurs="0"
              maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- CreateQueue Action Response -->
      <xs:element name="CreateQueueResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:CreateQueueResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- GetQueueUrl Action -->
      <xs:element name="GetQueueUrl">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="QueueName" type="xs:string" />
            <xs:element name="QueueOwnerAWSAccountId" type="xs:string"
              minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- GetQueueUrl Action Response -->
      <xs:element name="GetQueueUrlResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:GetQueueUrlResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ListQueues Action -->
      <xs:element name="ListQueues">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="QueueNamePrefix" type="xs:string"
              minOccurs="0" />
            <xs:element ref="tns:Attribute" minOccurs="0"
              maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ListQueues Action Response -->
      <xs:element name="ListQueuesResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ListQueuesResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ChangeMessageVisibility Action -->
      <xs:element name="ChangeMessageVisibility">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ReceiptHandle" type="xs:string" />
            <xs:element name="VisibilityTimeout" type="xs:integer" />
            <xs:element ref="tns:Attribute" minOccurs="0"
              maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ChangeMessageVisibility Action Response -->
      <xs:element name="ChangeMessageVisibilityResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- DeleteMessage Action -->
      <xs:element name="DeleteMessage">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ReceiptHandle" type="xs:string" />
            <xs:element ref="tns:Attribute" minOccurs="0"
              maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- DeleteMessage Action Response -->
      <xs:element name="DeleteMessageResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- DeleteQueue Action -->
      <xs:element name="DeleteQueue">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:Attribute" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- DeleteQueue Action Response -->
      <xs:element name="DeleteQueueResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- GetQueueAttributes Action -->
      <xs:element name="GetQueueAttributes">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="AttributeName" type="xs:string"
              minOccurs="0" maxOccurs="unbounded" />
            <!-- Ignore the Unused element. It prevents WSE from collapsing AttributeName
            element(s) to an array of strings. -->
            <xs:element name="Unused" type="xs:string" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- GetQueueAttributes Action Response -->
      <xs:element name="GetQueueAttributesResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:GetQueueAttributesResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ReceiveMessage Action -->
      <xs:element name="ReceiveMessage">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MaxNumberOfMessages" type="xs:integer"
              minOccurs="0" />
            <xs:element name="VisibilityTimeout" type="xs:integer"
              minOccurs="0" />
            <xs:element name="AttributeName" type="xs:string"
              minOccurs="0" maxOccurs="unbounded" />
            <!-- Ignore the Unused element. It prevents WSE from collapsing AttributeName
            element(s) to an array of strings. -->
            <xs:element name="Unused" type="xs:string" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ReceiveMessage Action Response -->
      <xs:element name="ReceiveMessageResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ReceiveMessageResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- SendMessage Action -->
      <xs:element name="SendMessage">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MessageBody" type="xs:string" />
            <xs:element name="DelaySeconds" type="xs:integer" minOccurs="0" />
            <xs:element ref="tns:Attribute" minOccurs="0"
              maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- SendMessage Action Response -->
      <xs:element name="SendMessageResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:SendMessageResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- SetQueueAttributes Action -->
      <xs:element name="SetQueueAttributes">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:Attribute" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- SetQueueAttributes Action Response -->
      <xs:element name="SetQueueAttributesResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- Common types for batch API -->
      <xs:element name="BatchResultErrorEntry">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Id" type="xs:string" />
            <xs:element name="Code" type="xs:string" />
            <xs:element name="Message" type="xs:string" />
            <xs:element name="SenderFault" type="xs:boolean" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ChangeMessageVisibilityBatch Action -->
      <xs:element name="ChangeMessageVisibilityBatchRequestEntry">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Id" type="xs:string" />
            <xs:element name="ReceiptHandle" type="xs:string" />
            <xs:element name="VisibilityTimeout" type="xs:integer"
              minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="ChangeMessageVisibilityBatch">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ChangeMessageVisibilityBatchRequestEntry"
              maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ChangeMessageVisibilityBatch Action Response -->
      <xs:element name="ChangeMessageVisibilityBatchResultEntry">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Id" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="ChangeMessageVisibilityBatchResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ChangeMessageVisibilityBatchResultEntry" maxOccurs="unbounded" />
            <xs:element ref="tns:BatchResultErrorEntry" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="ChangeMessageVisibilityBatchResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ChangeMessageVisibilityBatchResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- DeleteMessageBatch Action -->
      <xs:element name="DeleteMessageBatchRequestEntry">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Id" type="xs:string" />
            <xs:element name="ReceiptHandle" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="DeleteMessageBatch">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:DeleteMessageBatchRequestEntry"
              maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- DeleteMessageBatch Action Response -->
      <xs:element name="DeleteMessageBatchResultEntry">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Id" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="DeleteMessageBatchResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:DeleteMessageBatchResultEntry" maxOccurs="unbounded" />
            <xs:element ref="tns:BatchResultErrorEntry" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="DeleteMessageBatchResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:DeleteMessageBatchResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- SendMessageBatch Action -->
      <xs:element name="SendMessageBatchRequestEntry">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Id" type="xs:string" />
            <xs:element name="MessageBody" type="xs:string" />
            <xs:element name="DelaySeconds" type="xs:integer" minOccurs="0" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="SendMessageBatch">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:SendMessageBatchRequestEntry"
              maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- SendMessageBatch Action Response -->
      <xs:element name="SendMessageBatchResultEntry">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Id" type="xs:string" />
            <xs:element name="MessageId" type="xs:string" />
            <xs:element name="MD5OfMessageBody" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="SendMessageBatchResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:SendMessageBatchResultEntry"
              maxOccurs="unbounded" />
            <xs:element ref="tns:BatchResultErrorEntry" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="SendMessageBatchResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:SendMessageBatchResult" />
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- AddPermission Action -->
      <xs:element name="AddPermission">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Label" type="xs:string" />
            <xs:element name="AWSAccountId" type="xs:string"
              maxOccurs="unbounded" />
            <xs:element name="ActionName" type="xs:string"
              maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- AddPermission Action Response -->
      <xs:element name="AddPermissionResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- RemovePermission Action -->
      <xs:element name="RemovePermission">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Label" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- RemovePermission Action Response -->
      <xs:element name="RemovePermissionResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:ResponseMetadata" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ******************************** AWS Types *********************************** -->

      <!-- CreateQueue Result Data -->
      <xs:element name="CreateQueueResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="QueueUrl" type="xs:anyURI" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- GetQueueUrl Result Data -->
      <xs:element name="GetQueueUrlResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="QueueUrl" type="xs:anyURI" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ListQueues Result Data -->
      <xs:element name="ListQueuesResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="QueueUrl" type="xs:anyURI" minOccurs="0"
              maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- Attribute Data -->
      <xs:element name="Attribute">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Name" type="xs:string" />
            <xs:element name="Value" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- GetQueueAttributes Result Data -->
      <xs:element name="GetQueueAttributesResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:Attribute" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ReceiveMessage Data -->
      <xs:element name="Message">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MessageId" type="xs:string" />
            <xs:element name="ReceiptHandle" type="xs:string" />
            <xs:element name="MD5OfBody" type="xs:string" />
            <xs:element name="Body" type="xs:string" />
            <xs:element ref="tns:Attribute" minOccurs="0"
              maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- ReceiveMessage Result Data -->
      <xs:element name="ReceiveMessageResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:Message" minOccurs="0" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- SendMessage Result Data -->
      <xs:element name="SendMessageResult">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="MessageId" type="xs:string" />
            <xs:element name="MD5OfMessageBody" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <xs:element name="ResponseMetadata">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="RequestId" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>

      <!-- // Query and REST Error Response // -->
      <xs:element name="ErrorResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="tns:Error" maxOccurs="unbounded" />
            <xs:element name="RequestId" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Error">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Type">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="Receiver" />
                  <xs:enumeration value="Sender" />
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="Code" type="xs:string" />
            <xs:element name="Message" type="xs:string" />
            <xs:element name="Detail">
              <xs:complexType>
                <xs:sequence>
                  <xs:any namespace="##any" processContents="lax"
                    minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
                <xs:anyAttribute namespace="##other"
                  processContents="lax" />
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>

  </wsdl:types>

  <!-- ******************************** Messages ********************************* -->

  <wsdl:message name="CreateQueueRequestMsg">
    <wsdl:part name="body" element="tns:CreateQueue" />
  </wsdl:message>
  <wsdl:message name="CreateQueueResponseMsg">
    <wsdl:part name="body" element="tns:CreateQueueResponse" />
  </wsdl:message>

  <wsdl:message name="GetQueueUrlRequestMsg">
    <wsdl:part name="body" element="tns:GetQueueUrl" />
  </wsdl:message>
  <wsdl:message name="GetQueueUrlResponseMsg">
    <wsdl:part name="body" element="tns:GetQueueUrlResponse" />
  </wsdl:message>

  <wsdl:message name="ListQueuesRequestMsg">
    <wsdl:part name="body" element="tns:ListQueues" />
  </wsdl:message>
  <wsdl:message name="ListQueuesResponseMsg">
    <wsdl:part name="body" element="tns:ListQueuesResponse" />
  </wsdl:message>

  <wsdl:message name="AddPermissionRequestMsg">
    <wsdl:part name="body" element="tns:AddPermission" />
  </wsdl:message>
  <wsdl:message name="AddPermissionResponseMsg">
    <wsdl:part name="body" element="tns:AddPermissionResponse" />
  </wsdl:message>

  <wsdl:message name="ChangeMessageVisibilityRequestMsg">
    <wsdl:part name="body" element="tns:ChangeMessageVisibility" />
  </wsdl:message>
  <wsdl:message name="ChangeMessageVisibilityResponseMsg">
    <wsdl:part name="body" element="tns:ChangeMessageVisibilityResponse" />
  </wsdl:message>

  <wsdl:message name="DeleteMessageRequestMsg">
    <wsdl:part name="body" element="tns:DeleteMessage" />
  </wsdl:message>
  <wsdl:message name="DeleteMessageResponseMsg">
    <wsdl:part name="body" element="tns:DeleteMessageResponse" />
  </wsdl:message>

  <wsdl:message name="DeleteQueueRequestMsg">
    <wsdl:part name="body" element="tns:DeleteQueue" />
  </wsdl:message>
  <wsdl:message name="DeleteQueueResponseMsg">
    <wsdl:part name="body" element="tns:DeleteQueueResponse" />
  </wsdl:message>

  <wsdl:message name="GetQueueAttributesRequestMsg">
    <wsdl:part name="body" element="tns:GetQueueAttributes" />
  </wsdl:message>
  <wsdl:message name="GetQueueAttributesResponseMsg">
    <wsdl:part name="body" element="tns:GetQueueAttributesResponse" />
  </wsdl:message>

  <wsdl:message name="RemovePermissionRequestMsg">
    <wsdl:part name="body" element="tns:RemovePermission" />
  </wsdl:message>
  <wsdl:message name="RemovePermissionResponseMsg">
    <wsdl:part name="body" element="tns:RemovePermissionResponse" />
  </wsdl:message>

  <wsdl:message name="ReceiveMessageRequestMsg">
    <wsdl:part name="body" element="tns:ReceiveMessage" />
  </wsdl:message>
  <wsdl:message name="ReceiveMessageResponseMsg">
    <wsdl:part name="body" element="tns:ReceiveMessageResponse" />
  </wsdl:message>

  <wsdl:message name="SendMessageRequestMsg">
    <wsdl:part name="body" element="tns:SendMessage" />
  </wsdl:message>
  <wsdl:message name="SendMessageResponseMsg">
    <wsdl:part name="body" element="tns:SendMessageResponse" />
  </wsdl:message>

  <wsdl:message name="SetQueueAttributesRequestMsg">
    <wsdl:part name="body" element="tns:SetQueueAttributes" />
  </wsdl:message>
  <wsdl:message name="SetQueueAttributesResponseMsg">
    <wsdl:part name="body" element="tns:SetQueueAttributesResponse" />
  </wsdl:message>

  <wsdl:message name="ChangeMessageVisibilityBatchRequestMsg">
    <wsdl:part name="body" element="tns:ChangeMessageVisibilityBatch" />
  </wsdl:message>
  <wsdl:message name="ChangeMessageVisibilityBatchResponseMsg">
    <wsdl:part name="body" element="tns:ChangeMessageVisibilityBatchResponse" />
  </wsdl:message>

  <wsdl:message name="DeleteMessageBatchRequestMsg">
    <wsdl:part name="body" element="tns:DeleteMessageBatch" />
  </wsdl:message>
  <wsdl:message name="DeleteMessageBatchResponseMsg">
    <wsdl:part name="body" element="tns:DeleteMessageBatchResponse" />
  </wsdl:message>

  <wsdl:message name="SendMessageBatchRequestMsg">
    <wsdl:part name="body" element="tns:SendMessageBatch" />
  </wsdl:message>
  <wsdl:message name="SendMessageBatchResponseMsg">
    <wsdl:part name="body" element="tns:SendMessageBatchResponse" />
  </wsdl:message>

  <!-- ********************************* Ports *********************************** -->

  <wsdl:portType name="SimpleQueueServicePortType">

    <wsdl:operation name="CreateQueue">
      <wsdl:documentation>
        The CreateQueue action creates a new queue, or returns the URL of an existing
        one. When you request CreateQueue, you provide a name for the queue. To
        successfully create a new queue, you must provide a name that is unique within
        the scope of your own queues. If you provide the name of an existing queue, a
        new queue isn't created and an error isn't returned. Instead, the request
        succeeds and the queue URL for the existing queue is returned.

        A CreateQueue call may include attributes to set on a newly created queue. The
        effect is the same as the CreateQueue call followed by a SetQueueAttributes
        call (with the same attributes). However, when the queue already exists
        CreateQueue will not update any attributes. It simply compares the attribute
        values provided with the current settings on the existing queue, and returns
        the queue URL if the values match. Otherwise, it responds with an error
        otherwise. SetQueueAttributes should be used to change the values of attributes
        for an existing queue.
      </wsdl:documentation>
      <wsdl:input message="tns:CreateQueueRequestMsg"
        wsa:Action="urn:CreateQueue" />
      <wsdl:output message="tns:CreateQueueResponseMsg"
        wsa:Action="urn:CreateQueue:Response" />
    </wsdl:operation>

    <wsdl:operation name="GetQueueUrl">
      <wsdl:documentation>
        The GetQueueUrl action takes the name of a queue and returns its URL.
      </wsdl:documentation>
      <wsdl:input message="tns:GetQueueUrlRequestMsg"
        wsa:Action="urn:GetQueueUrl" />
      <wsdl:output message="tns:GetQueueUrlResponseMsg"
        wsa:Action="urn:GetQueueUrl:Response" />
    </wsdl:operation>

    <wsdl:operation name="ListQueues">
      <wsdl:documentation>
        The ListQueues action returns a list of your queues.
      </wsdl:documentation>
      <wsdl:input message="tns:ListQueuesRequestMsg" wsa:Action="urn:ListQueues" />
      <wsdl:output message="tns:ListQueuesResponseMsg"
        wsa:Action="urn:ListQueues:Response" />
    </wsdl:operation>

    <wsdl:operation name="AddPermission">
      <wsdl:documentation>
        Adds the specified permission(s) to a queue for the specified principal(s). This
        allows for sharing access to the queue.
      </wsdl:documentation>
      <wsdl:input message="tns:AddPermissionRequestMsg"
        wsa:Action="urn:AddPermission" />
      <wsdl:output message="tns:AddPermissionResponseMsg"
        wsa:Action="urn:AddPermission:Response" />
    </wsdl:operation>

    <wsdl:operation name="ChangeMessageVisibility">
      <wsdl:documentation>
        The ChangeMessageVisibility action resets the visibility timeout for the
        specified receipt handle to the specified value. The message identified by
        ReceiptHandle should become visible approximately VisibilityTimeout seconds
        after successful completion of this action, unless DeleteMessage or
        ChangeMessageVisibility is called first.
      </wsdl:documentation>
      <wsdl:input message="tns:ChangeMessageVisibilityRequestMsg"
        wsa:Action="urn:ChangeMessageVisibility" />
      <wsdl:output message="tns:ChangeMessageVisibilityResponseMsg"
        wsa:Action="urn:ChangeMessageVisibility:Response" />
    </wsdl:operation>

    <wsdl:operation name="DeleteMessage">
      <wsdl:documentation>
        The DeleteMessage action unconditionally removes the specified message from the
        specified queue. Even if the message is locked by another reader due to the
        visibility timeout setting, it is still deleted from the queue.
      </wsdl:documentation>
      <wsdl:input message="tns:DeleteMessageRequestMsg"
        wsa:Action="urn:DeleteMessage" />
      <wsdl:output message="tns:DeleteMessageResponseMsg"
        wsa:Action="urn:DeleteMessage:Response" />
    </wsdl:operation>

    <wsdl:operation name="DeleteQueue">
      <wsdl:documentation>
        This action unconditionally deletes the queue specified by the queue URL. Use
        this operation WITH CARE! The queue is deleted even if it is NOT empty.
      </wsdl:documentation>
      <wsdl:input message="tns:DeleteQueueRequestMsg"
        wsa:Action="urn:DeleteQueue" />
      <wsdl:output message="tns:DeleteQueueResponseMsg"
        wsa:Action="urn:DeleteQueue:Response" />
    </wsdl:operation>

    <wsdl:operation name="GetQueueAttributes">
      <wsdl:documentation>
        Gets one or all attributes of a queue. Available attributes are
        [ApproximateNumberOfMessages, ApproximateNumberOfMessagesNotVisible,
        VisibilityTimeout, CreatedTimestamp, LastModifiedTimestamp, Policy,
        MaximumMessageSize, MessageRetentionPeriod, QueueArn].
      </wsdl:documentation>
      <wsdl:input message="tns:GetQueueAttributesRequestMsg"
        wsa:Action="urn:GetQueueAttributes" />
      <wsdl:output message="tns:GetQueueAttributesResponseMsg"
        wsa:Action="urn:GetQueueAttributes:Response" />
    </wsdl:operation>

    <wsdl:operation name="RemovePermission">
      <wsdl:documentation>
        Removes the permission with the specified statement id from the queue.
      </wsdl:documentation>
      <wsdl:input message="tns:RemovePermissionRequestMsg"
        wsa:Action="urn:RemovePermission" />
      <wsdl:output message="tns:RemovePermissionResponseMsg"
        wsa:Action="urn:RemovePermission:Response" />
    </wsdl:operation>

    <wsdl:operation name="ReceiveMessage">
      <wsdl:documentation>
        Retrieves one or more messages from the specified queue, including the message
        body and message ID of each message. Messages returned by this action stay in
        the queue until you delete them. However, once a message is returned to a
        ReceiveMessage request, it is not returned on subsequent ReceiveMessage requests
        for the duration of the VisibilityTimeout. If you do not specify a
        VisibilityTimeout in the request, the overall visibility timeout for the queue
        is used for the returned messages. Possible attributes that can be requested
        with messages include [SenderId, ApproximateFirstReceiveTimestamp,
        ApproximateReceiveCount, SentTimestamp].
      </wsdl:documentation>
      <wsdl:input message="tns:ReceiveMessageRequestMsg"
        wsa:Action="urn:ReceiveMessage" />
      <wsdl:output message="tns:ReceiveMessageResponseMsg"
        wsa:Action="urn:ReceiveMessage:Response" />
    </wsdl:operation>

    <wsdl:operation name="SendMessage">
      <wsdl:documentation>
        The SendMessage action adds a message to the specified queue. If
        DelaySeconds is specified, the message won't be delivered until the
        specified number of seconds has elapsed. Otherwise, the message may
        be delivered immediately.
      </wsdl:documentation>
      <wsdl:input message="tns:SendMessageRequestMsg"
        wsa:Action="urn:SendMessage" />
      <wsdl:output message="tns:SendMessageResponseMsg"
        wsa:Action="urn:SendMessage:Response" />
    </wsdl:operation>

    <wsdl:operation name="SetQueueAttributes">
      <wsdl:documentation>
        Sets the value of one or more queue attributes. Valid attributes that
        can be set are [VisibilityTimeout, Policy, MaximumMessageSize,
        MessageRetentionPeriod].
      </wsdl:documentation>
      <wsdl:input message="tns:SetQueueAttributesRequestMsg"
        wsa:Action="urn:SetQueueAttributes" />
      <wsdl:output message="tns:SetQueueAttributesResponseMsg"
        wsa:Action="urn:SetQueueAttributes:Response" />
    </wsdl:operation>

    <wsdl:operation name="ChangeMessageVisibilityBatch">
      <wsdl:documentation>
        A batch version of ChangeMessageVisibility. Each batch request contains
        one or more entries. Each entry is identified by its Id (referred to as
        entry id) and represents a receipt handle for which the visibility
        timeout has to be changed. For each entry in the batch, the response
        will contain one of ChangeMessageVisibilityBatchResultEntry (success)
        or BatchResultErrorEntry (failed) signifying the result.
      </wsdl:documentation>
      <wsdl:input message="tns:ChangeMessageVisibilityBatchRequestMsg"
        wsa:Action="urn:ChangeMessageVisibilityBatch" />
      <wsdl:output message="tns:ChangeMessageVisibilityBatchResponseMsg"
        wsa:Action="urn:ChangeMessageVisibilityBatch:Response" />
    </wsdl:operation>

    <wsdl:operation name="DeleteMessageBatch">
      <wsdl:documentation>
        The batch version of DeleteMessage. Each batch request contains
        one or more entries. Each entry is identified by its Id (referred to as entry
        id) and represents the receipt handle for a message that has to be
        deleted. For each entry in the batch, the response will contain one of
        DeleteMessageBatchResultEntry (success) or BatchResultErrorEntry
        (failed) signifying the result.
      </wsdl:documentation>
      <wsdl:input message="tns:DeleteMessageBatchRequestMsg"
        wsa:Action="urn:DeleteMessageBatch" />
      <wsdl:output message="tns:DeleteMessageBatchResponseMsg"
        wsa:Action="urn:DeleteMessageBatch:Response" />
    </wsdl:operation>

    <wsdl:operation name="SendMessageBatch">
      <wsdl:documentation>
        A batch version of SendMessage. Each batch request has one or more
        entries in it. Each entry is identified by its Id (referred to as
        entry id) and represents a message to be enqueued. If DelaySeconds
        is not specified for an entry, the default for the queue is used. For
        each entry in the batch, the response will contain one of
        SendMessageBatchResultEntry (success) or BatchResultErrorEntry
        (failed) signifying the result.
      </wsdl:documentation>
      <wsdl:input message="tns:SendMessageBatchRequestMsg"
        wsa:Action="urn:SendMessageBatch" />
      <wsdl:output message="tns:SendMessageBatchResponseMsg"
        wsa:Action="urn:SendMessageBatch:Response" />
    </wsdl:operation>

  </wsdl:portType>

  <!-- ******************************** Bindings ********************************** -->

  <wsdl:binding name="SimpleQueueServiceGetBinding" type="tns:SimpleQueueServicePortType">

    <http:binding verb="GET" />

    <wsdl:operation name="CreateQueue">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="GetQueueUrl">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ListQueues">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="AddPermission">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ChangeMessageVisibility">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="DeleteMessage">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="DeleteQueue">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="GetQueueAttributes">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="RemovePermission">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ReceiveMessage">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="SendMessage">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="SetQueueAttributes">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ChangeMessageVisibilityBatch">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="DeleteMessageBatch">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="SendMessageBatch">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

  </wsdl:binding>

  <wsdl:binding name="SimpleQueueServicePostBinding" type="tns:SimpleQueueServicePortType">

    <http:binding verb="POST" />

    <wsdl:operation name="CreateQueue">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ListQueues">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="AddPermission">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ChangeMessageVisibility">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="DeleteMessage">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="DeleteQueue">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="GetQueueAttributes">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="RemovePermission">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ReceiveMessage">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="SendMessage">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="SetQueueAttributes">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="ChangeMessageVisibilityBatch">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="DeleteMessageBatch">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

    <wsdl:operation name="SendMessageBatch">
      <http:operation location="/" />
      <wsdl:input>
        <mime:mimeXml />
      </wsdl:input>
      <wsdl:output>
        <mime:mimeXml />
      </wsdl:output>
    </wsdl:operation>

  </wsdl:binding>

  <!-- ******************************** Service ********************************** -->

  <wsdl:service name="SimpleQueueService">
    <wsdl:documentation>
      Amazon Simple Queue Service (Amazon SQS) offers a reliable, highly scalable
      hosted queue for storing messages as they travel between computers. By using
      Amazon SQS, developers can simply move data between distributed application
      components performing different tasks, without losing messages or requiring each
      component to be always available. Amazon SQS works by exposing Amazon's
      web-scale messaging infrastructure as a web service. Any computer on the
      Internet can add or read messages without any installed software or special
      firewall configurations. Components of applications using Amazon SQS can run
      independently, and do not need to be on the same network, developed with the
      same technologies, or running at the same time.
    </wsdl:documentation>

    <!-- HTTP POST/GET -->
    <wsdl:port name="SimpleQueueServiceHttpGetPort" binding="tns:SimpleQueueServiceGetBinding">
      <http:address location="http://queue.amazonaws.com" />
    </wsdl:port>
    <wsdl:port name="SimpleQueueServiceHttpPostPort" binding="tns:SimpleQueueServicePostBinding">
      <http:address location="http://queue.amazonaws.com" />
    </wsdl:port>

    <!-- HTTPS POST/GET -->
    <wsdl:port name="SimpleQueueServiceHttpsGetPort" binding="tns:SimpleQueueServiceGetBinding">
      <http:address location="https://queue.amazonaws.com" />
    </wsdl:port>
    <wsdl:port name="SimpleQueueServiceHttpsPostPort" binding="tns:SimpleQueueServicePostBinding">
      <http:address location="https://queue.amazonaws.com" />
    </wsdl:port>

  </wsdl:service>

</wsdl:definitions>
