<?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ JBoss, Home of Professional Open Source.
  ~ Copyright (c) 2011, Red Hat, Inc., and individual contributors
  ~ as indicated by the @author tags. See the copyright.txt file in the
  ~ distribution for a full listing of individual contributors.
  ~
  ~ This is free software; you can redistribute it and/or modify it
  ~ under the terms of the GNU Lesser General Public License as
  ~ published by the Free Software Foundation; either version 2.1 of
  ~ the License, or (at your option) any later version.
  ~
  ~ This software is distributed in the hope that it will be useful,
  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  ~ Lesser General Public License for more details.
  ~
  ~ You should have received a copy of the GNU Lesser General Public
  ~ License along with this software; if not, write to the Free
  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  -->
<xs:schema xmlns="urn:iiop" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           attributeFormDefault="unqualified" elementFormDefault="qualified"
           targetNamespace="urn:iiop" version="1.0"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd">
   <xs:import namespace="http://java.sun.com/xml/ns/javaee" schemaLocation="http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"/>

   <xs:element name="iiop" type="iiopConfigType" substitutionGroup="javaee:assembly-descriptor-entry"/>

   <xs:complexType name="iiopConfigType">
      <xs:complexContent>
         <xs:extension base="javaee:jboss-assembly-descriptor-bean-entryType">
            <xs:annotation>
               <xs:documentation>
                  <![CDATA[
                  The iiop element contains the IIOP settings that are to be applied to an EJB. It must identify the
                  bean to which the settings apply via the ejb-name sub-element. A wildcard "*" is allowed to convey
                  that the settings are to be applied to all EJBs in the deployment.

                  The binding-name sub-element can be used to specify the name that must be used to bind the EJB IOR
                  in the COSNaming service. If a wildcard "*" is used as bean-name, this setting is ignored.

                  The ior-security-config sub-element contains the security settings that are to be inserted into the
                  EJB IOR. These include transport config requirements, authentication service settings, and secure
                  attribute service settings. If a wildcard "*" is used as bean-name, the IOR settings will be applied
                  to all beans in the deployment, except for the ones that override these settings in their own iiop
                  element.
                  ]]>
               </xs:documentation>
            </xs:annotation>
            <xs:sequence>
               <xs:element name="ejb-name" type="javaee:ejb-nameType" minOccurs="0" maxOccurs="1"/>
               <xs:element name="binding-name" type="xs:string" minOccurs="0" maxOccurs="1"/>
               <xs:element name="ior-security-config" type="iorSecurityConfigType" minOccurs="0"/>
            </xs:sequence>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="iorSecurityConfigType">
      <xs:annotation>
         <xs:documentation>
             <![CDATA[
             The iorSecurityConfigType specifies the elements that can be used to configure security constraints of IIOP
             enabled EJB3 beans.

             - transport-config: contains the attributes that are used to specify the transport security requirements.
             - as-context: contains the attributes that are used to configure the authentication service (AS) context.
             - sas-context: contains the attributes that are used to configure the security attribute service (SAS) context.
                     ]]>
         </xs:documentation>
      </xs:annotation>
      <xs:sequence>
         <xs:element name="transport-config" type="iorTransportConfigType" minOccurs="0" maxOccurs="1"/>
         <xs:element name="as-context" type="iorASContextType" minOccurs="0" maxOccurs="1"/>
         <xs:element name="sas-context" type="iorSASContextType" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>

   <xs:complexType name="iorTransportConfigType">
      <xs:annotation>
         <xs:documentation>
             <![CDATA[
             The iorTransportConfigType specifies attributes that can be used to configure the transport requirements of
             an IIOP enabled EJB3 bean.

             * integrity: indicates if the server (target) supports integrity protected messages. The valid values are
                          NONE, SUPPORTED or REQUIRED.
             * confidentiality: indicates if the server (target) supports privacy protected messages. The values are
                          NONE, SUPPORTED or REQUIRED.
             * detect-misordering: indicates if the server (target) supports detection of message sequence errors. The
                          values are NONE, SUPPORTED or REQUIRED.
             * detect-replay: indicates if the server (target) supports detection of message replay attempts. The values
                          are NONE, SUPPORTED or REQUIRED.
             * establish-trust-in-client: indicates if the target is capable of authenticating a client. The values are
                          NONE, SUPPORTED or REQUIRED.
             * establish-trust-in-target: indicates if the target is capable of authenticating to a client. The values
                         are NONE or SUPPORTED.
                     ]]>
         </xs:documentation>
      </xs:annotation>
      <xs:attribute name="integrity" type="xs:string" use="required"/>
      <xs:attribute name="confidentiality" type="xs:string" use="required"/>
      <xs:attribute name="detect-misordering" type="xs:string" use="optional" default="NONE"/>
      <xs:attribute name="detect-replay" type="xs:string" use="optional" default="NONE"/>
      <xs:attribute name="establish-trust-in-client" type="xs:string" use="required"/>
      <xs:attribute name="establish-trust-in-target" type="xs:string" use="required"/>
   </xs:complexType>
    
    <xs:complexType name="iorASContextType">
       <xs:annotation>
          <xs:documentation>
              <![CDATA[
              The iorASConfigType specifies attributes that can be used to configure the authentication service (AS) context.

              * auth-method:describes the authentication method. The only supported values are USERNAME_PASSWORD and NONE.
              * realm: describes the realm in which the user is authenticated. Must be a valid realm that is registered
                       in server configuration.
              * required: specifies if the supplied authentication method is required to be used for client authentication.
                       If so the EstablishTrustInClient bit will be set in the target_requires field of the AS_Context.
                       The attribute value is either true or false.
                      ]]>
          </xs:documentation>
       </xs:annotation>
       <xs:attribute name="auth-method" type="xs:string" use="required"/>
       <xs:attribute name="realm" type="xs:string" use="required"/>
       <xs:attribute name="required" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:complexType name="iorSASContextType">
       <xs:annotation>
          <xs:documentation>
              <![CDATA[
              The iorASConfigType specifies attributes that can be used to configure the security attribute service.

              * caller-propagation: indicates if the target will accept propagated caller identities The values are
                       NONE or SUPPORTED.
                      ]]>
          </xs:documentation>
       </xs:annotation>
       <xs:attribute name="caller-propagation" type="xs:string" use="required"/>
    </xs:complexType>

</xs:schema>