<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->

<!-- @version $Rev: 661037 $ $Date: 2008-05-28 11:19:08 -0700 (Wed, 28 May 2008) $ -->

<xs:schema
    xmlns:geronimo="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
    targetNamespace="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
    xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2"
    xmlns:connector="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
    xmlns:security="http://geronimo.apache.org/xml/ns/security-2.0"
    xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    attributeFormDefault="unqualified" version="1.0">

    <xs:annotation>
        <xs:documentation>
            This is an XML Schema Definition for Geronimo Java application
            client deployment plan. In case the Java application client
            deployment plan is provided internally in the java archive, it
            should be named META-INF/geronimo-application-client.xml. In case
            the java application client deployment plan is provided externally,
            the deployment descriptor can be named anything and provided to the
            deploy tool. All the Java application client deployment plan must
            specify the top level element as application-client with namespace
            specified as
            xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0".
            The default location for this document is
            http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0
        </xs:documentation>
    </xs:annotation>

    <xs:import namespace="http://geronimo.apache.org/xml/ns/naming-1.2"
        schemaLocation="geronimo-naming-1.2.xsd">
        <xs:annotation>
            <xs:documentation>
                Import partial schema containing common naming elements, the
                imported plan declares elements like ejb-ref, ejb-local-ref,
                service-ref, resource-ref, and resource-env-ref required by this
                plan schema.
            </xs:documentation>
        </xs:annotation>
    </xs:import>
    <xs:import namespace="http://geronimo.apache.org/xml/ns/security-2.0"
        schemaLocation="geronimo-security-2.0.xsd">
        <xs:annotation>
            <xs:documentation>
                Import Geronimo security deployment plans. The imported plan
                includes complex types for defining security and principals.
            </xs:documentation>
        </xs:annotation>
    </xs:import>
    <xs:import namespace="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
        schemaLocation="geronimo-connector-1.2.xsd">
        <xs:annotation>
            <xs:documentation>
                Import Geronimo resource adapter deployment plans. The imported
                plan includes complex types for defining connectors and resource
                adapters.
            </xs:documentation>
        </xs:annotation>
    </xs:import>
    <xs:import namespace="http://geronimo.apache.org/xml/ns/deployment-1.2"
        schemaLocation="geronimo-module-1.2.xsd">
        <xs:annotation>
            <xs:documentation>
                Import Geronimo Services deployment plans. The imported plan
                includes complex types like moduleType, environmentType,
                dependenciesType, etc. required by this plan schema.
            </xs:documentation>
        </xs:annotation>
    </xs:import>

    <xs:element name="application-client"
        type="geronimo:application-clientType">
        <xs:annotation>
            <xs:documentation>
                The root element for Geronimo Java application client deployment
                plan, this element should always exist in instance documents. It
                mirrors the application-client defined by
                application-client_1_4.xsd. It specifies the references for the
                java application client modules. These references could be
                reference to external gbeans, ejb modules, service modules,
                resources, or security principals.
            </xs:documentation>
        </xs:annotation>
    </xs:element>

    <xs:complexType name="application-clientType">
        <xs:sequence>
            <xs:element ref="sys:client-environment">
                <xs:annotation>
                    <xs:documentation>
                        Reference to client-environment element defined in
                        imported "geronimo-module-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element ref="sys:server-environment">
                <xs:annotation>
                    <xs:documentation>
                        Reference to server-environment element defined in
                        imported "geronimo-module-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element ref="naming:gbean-ref" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to gbean-ref element defined in imported
                        "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element ref="naming:ejb-ref" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to ejb-ref element defined in imported
                        "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element ref="naming:service-ref" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to service-ref element defined in imported
                        "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element ref="naming:resource-ref" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to resource-ref element defined in imported
                        "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element ref="naming:resource-env-ref" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to resource-env-ref element defined in
                        imported "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element ref="naming:message-destination" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to message-destination element defined in
                        imported "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element ref="security:default-subject" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        Reference to default-subject element defined in
                        imported "geronimo-security-2.0.xsd"
                        This is the subject run under if you are not logged in.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:sequence minOccurs="0">
                <xs:element name="realm-name" type="xs:string">
                    <xs:annotation>
                        <xs:documentation>
                            The realm-name element names the security realm used
                            for JAAS login
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="callback-handler" type="xs:string"
                    minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>
                            The callback-handler element specifies the name of a
                            callback class provided by the application for JAAS
                            authentication. This class must implement the
                            javax.security.auth.callback.CallbackHandler
                            interface and follow its specification, as this
                            class will be used by the application client
                            container to collect authentication information from
                            the user.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>

            <xs:element name="resource" type="geronimo:resourceType"
                minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        The resource element names contains the definition of
                        all the module-scoped connector resources. The connector
                        resource can be both external and internal to the
                        application client.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element ref="sys:service" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to service element defined in imported
                        "geronimo-module-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="resourceType">
        <xs:sequence>
            <xs:choice>
                <xs:element name="external-rar" type="sys:patternType">
                    <xs:annotation>
                        <xs:documentation>
                            The external-rar is a Module ID of the resource
                            adapter in the Geronimo repository.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="internal-rar" type="xs:string">
                    <xs:annotation>
                        <xs:documentation>
                            The internal-rar is a Module ID of the resource
                            adapter in the client module.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:choice>
            <xs:element ref="connector:connector">
                <xs:annotation>
                    <xs:documentation>
                        This element contains the contents of the Resource Group
                        deployment plan. The content is no different that the
                        content of the deployment plan would have been for the
                        server-wide or application-scoped resource group.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

</xs:schema>
