<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://websphere.ibm.com/xml/ns/javaee"
	xmlns="http://websphere.ibm.com/xml/ns/javaee"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	elementFormDefault="qualified" attributeFormDefault="unqualified"
	version="1.1">

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

	<xsd:annotation>
		<xsd:documentation>
			Copyright (c) 2010 IBM Corporation and others.
			All rights reserved. This program and the accompanying materials
			are made available under the terms of the Eclipse Public License 2.0
			which accompanies this distribution, and is available at
			http://www.eclipse.org/legal/epl-2.0/
			
			SPDX-License-Identifier: EPL-2.0

			Contributors:
				IBM Corporation - initial API and implementation
		</xsd:documentation>
	</xsd:annotation>

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

	<xsd:complexType name="data-sourceType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies the binding for a data source.
	
	The name attribute specfies the name of the data-source,
	while the binding name specifies the binding (jndi) name for the data source.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="binding-name" type="xsd:string" use="required" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

	<xsd:complexType name="env-entryType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies the value or binding for a env-entry.
	
	The name attribute specfies the name of the env-entry.
    The value attribute specifies the value of the env-entry,
	while the binding name specifies the binding (jndi) name for the env-entry.
    The env-entry attributes 'value' and 'binding-name' can only have 1 or the other, but must have 1 of them.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="value" type="xsd:string"/>
		<xsd:attribute name="binding-name" type="xsd:string" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

	<xsd:complexType name="ejb-refType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies the binding for an ejb-ref or ejb-local-ref.
	
	The name attribute specfies the name of the ejb-ref or the ejb-local-ref,
	while the binding name specifies the binding (jndi) name for the target
	of the reference.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="binding-name" type="xsd:string" use="required" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

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

	<xsd:complexType name="resource-refType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies the binding for a resource-ref.
	
	The name attribute specfies the name of the resource-ref, while the binding
	name specifies the binding (jndi) name for the target of the reference.
		
	If the resource reference is for a connection factory, then an optional
	JAAS login configuration may be specified.  The authentication element
	allows the specification of a simple authentication alias as the JAAS
	login configuration, while custom-login-configuration allows a more complex
	JAAS login configuration to be specified.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>

			<xsd:choice minOccurs="0" maxOccurs="1">
				<xsd:element name="authentication-alias" type="authentication-aliasType" />
				<xsd:element name="custom-login-configuration" type="custom-login-configurationType" />
			</xsd:choice>
			
			<!-- Default-auth is for backward compatibility and should not be used. -->
			<xsd:element name="default-auth" minOccurs="0" maxOccurs="1">
				<xsd:complexType>
					<xsd:attribute name="userid" type="xsd:string"/>
					<xsd:attribute name="password" type="xsd:string" />
				</xsd:complexType>
			</xsd:element>

		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="binding-name" type="xsd:string" use="required" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

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

	<xsd:complexType name="resource-env-refType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies the binding for a resource-env-ref.
	
	The name attribute specfies the name of the resource-env-ref,
	while the binding name specifies the binding (jndi) name for the target
	of the reference.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="binding-name" type="xsd:string" use="required" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

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

	<xsd:complexType name="message-destination-refType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies the binding for a message-destination-ref.
	
	The name attribute specfies the name of the message-destination-ref,
	while the binding name specifies the binding (jndi) name for the target
	of the reference.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="binding-name" type="xsd:string" use="required" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

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

	<xsd:complexType name="custom-login-configurationType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies a custom login configuration.
	
	The name attribute specifies the name of the custom login configuration,
	The login configuration is defined by a set of properties (name/value pairs).
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="property" type= "propertyType" minOccurs="0" maxOccurs="unbounded" />
		</xsd:sequence>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

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

	<xsd:complexType name="authentication-aliasType">
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

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

	<xsd:complexType name="propertyType">
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="value" type="xsd:string" use="required" />
		<xsd:attribute name="description" type="xsd:string" />
		<xsd:attribute name="id" type="xsd:ID"/>
	</xsd:complexType>

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

	<xsd:group name="ref-bindingsGroup">
		<xsd:sequence>
			<xsd:choice minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="ejb-ref" type="ejb-refType" />
				<xsd:element name="resource-ref" type="resource-refType" />
				<xsd:element name="resource-env-ref" type="resource-env-refType" />
				<xsd:element name="message-destination-ref" type="message-destination-refType" />
				<xsd:element name="data-source" type="data-sourceType"/>
				<xsd:element name="env-entry" type="env-entryType"/>
			</xsd:choice>
		</xsd:sequence>
	</xsd:group>

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

	<xsd:complexType name="message-destinationType">
		<xsd:annotation>
			<xsd:documentation>
	Specifies the binding for an message-destination.  The name attribute
	identifies the message destination to which the binding applies.  The
	binding-name attribute specifies the jndi name to be associated with
	the message destination.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="xsd:ID"/>
		<xsd:attribute name="name" type="xsd:string" use="required" />
		<xsd:attribute name="binding-name" type="xsd:string" use="required" />
	</xsd:complexType>
	
	<!-- ******************************************************* -->

        <xsd:complexType name="interceptorType">
        	<xsd:annotation>
        		<xsd:documentation>
	Specifies the binding for an interceptor.  The class
	attribute specifies the fully qualified name of the interceptor.
        		</xsd:documentation>
        	</xsd:annotation>
                <xsd:sequence>
                    <xsd:group ref="ref-bindingsGroup"/>
                </xsd:sequence>
                <xsd:attribute name="id" type="xsd:ID"/>
                <xsd:attribute name="class" type="xsd:string" use="required" />
        </xsd:complexType>

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

	<xsd:complexType name="jaspi-refType">
		<xsd:annotation>
			<xsd:documentation>	Specifies the binding for a JASPI provider.

	The provider-name attribute specifies the name of the JASPI authentication provider to be 
	used for the given application or web module.  The provider name must correspond to the 
	name of a JASPI authentication provider that is defined in the security configuration.

	The use-jaspi attribute specifies whether or not JASPI authentication should be used for the 
	given application or web module. The three value options are yes, no, and inherit. By default, 
	the application inherits the JASPI settings in the security configuration, and all web modules 
	inherit the JASPI settings in the application.		</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="provider-name" type="xsd:string"></xsd:attribute>
		<xsd:attribute name="use-jaspi" default="inherit">
			<xsd:simpleType>
				<xsd:restriction base="xsd:string">
					<xsd:enumeration value="yes"></xsd:enumeration>
					<xsd:enumeration value="no"></xsd:enumeration>
					<xsd:enumeration value="inherit"></xsd:enumeration>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="id" type="xsd:ID"></xsd:attribute>
	</xsd:complexType>
</xsd:schema>
