<!--
  ~ 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.
  -->

<schema elementFormDefault="qualified"
        targetNamespace="http://www.americanexpress.com/wsdl/ctn/utilities/atb"
        xmlns:tns="http://www.americanexpress.com/wsdl/ctn/utilities/atb"
        xmlns="http://www.w3.org/2001/XMLSchema">
    <import namespace="http://www.americanexpress.com/schemas/ctn/utilities/atb"/>

    <element name="checkEligibility1">
        <complexType>
            <sequence>
                <element ref="tns:atb-request-check-eligibility"/>
            </sequence>
        </complexType>
    </element>
    <element name="checkEligibility2">
        <complexType>
            <sequence>
                <element ref="tns:atb-request-check-eligibility" minOccurs="0" maxOccurs="5"/>
            </sequence>
        </complexType>
    </element>
    <element name="atb-request-check-eligibility">
        <complexType>
            <sequence>
                <element minOccurs="0" name="cardNumber" type="string"/>
                <element minOccurs="0" name="nameAsOnCard" type="string"/>
                <element minOccurs="0" name="expirationDate" type="string"/>
                <element minOccurs="0" name="yearOfRedemption" type="int"/>
                <element minOccurs="0" name="clientId" type="string"/>
            </sequence>
        </complexType>
    </element>

    <!-- circular element references -->
    <element name="Element1" type="tns:ComplexType1"/>
    <complexType name="ComplexType1">
        <sequence>
            <element ref="tns:Element1" minOccurs="0"/>
        </sequence>
    </complexType>
    <element name="Element2">
        <complexType>
            <sequence>
                <element name="param1" type="string"/>
                <element ref="tns:Element2" minOccurs="0"/>
            </sequence>
        </complexType>
    </element>

    <element name="authInfo" >
		<simpleType>
			<restriction base="string"/>
		</simpleType>
	</element>

    <complexType name="discard_transferToken">
		<sequence>
			<element ref="tns:authInfo" minOccurs="0"/>
            <element name="param1" type="string"/>
		</sequence>
	</complexType>

    <element name="TestSimpleReference" type="tns:discard_transferToken"/>
</schema>