geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From djen...@apache.org
Subject svn commit: r677372 - in /geronimo/components/jaspi/trunk/geronimo-jaspi/src: main/java/org/apache/geronimo/components/jaspi/model/ main/java/sxc/org/apache/geronimo/components/jaspi/model/ main/xsd/ test/java/org/apache/geronimo/components/jaspi/model...
Date Wed, 16 Jul 2008 18:38:42 GMT
Author: djencks
Date: Wed Jul 16 11:38:42 2008
New Revision: 677372

URL: http://svn.apache.org/viewvc?rev=677372&view=rev
Log:
a bit more work on the model

Added:
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/AuthModuleType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/AuthModuleTypeJAXB.java
Modified:
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthConfigType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthContextType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthConfigType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthContextType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ClientAuthContextTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ServerAuthContextTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/xsd/geronimo-jaspi.xsd
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/java/org/apache/geronimo/components/jaspi/model/JaxbTest.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/resources/test-jaspi.xml

Added: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/AuthModuleType.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/AuthModuleType.java?rev=677372&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/AuthModuleType.java
(added)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/AuthModuleType.java
Wed Jul 16 11:38:42 2008
@@ -0,0 +1,170 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation,
v2.1.5-b01-fcs 
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>

+// Any modifications to this file will be lost upon recompilation of the source schema. 
+// Generated on: 2008.07.15 at 04:13:34 PM PDT 
+//
+
+
+package org.apache.geronimo.components.jaspi.model;
+
+import java.io.Serializable;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+
+/**
+ * <p>Java class for authModuleType complex type.
+ * 
+ * <p>The following schema fragment specifies the expected content contained within
this class.
+ * 
+ * <pre>
+ * &lt;complexType name="authModuleType">
+ *   &lt;complexContent>
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="className" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="requestPolicy" type="{http://geronimo.apache.org/xml/ns/geronimo-jaspi}messagePolicyType"/>
+ *         &lt;element name="responsePolicy" type="{http://geronimo.apache.org/xml/ns/geronimo-jaspi}messagePolicyType"/>
+ *         &lt;element name="options" type="{http://www.w3.org/2001/XMLSchema}string"
minOccurs="0"/>
+ *       &lt;/sequence>
+ *     &lt;/restriction>
+ *   &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "authModuleType", propOrder = {
+    "className",
+    "requestPolicy",
+    "responsePolicy",
+    "options"
+})
+public class AuthModuleType<T>
+    implements Serializable
+{
+
+    private final static long serialVersionUID = 12343L;
+    @XmlElement(required = true)
+    protected String className;
+    @XmlElement(required = true)
+    protected MessagePolicyType requestPolicy;
+    @XmlElement(required = true)
+    protected MessagePolicyType responsePolicy;
+    @XmlJavaTypeAdapter(StringMapAdapter.class)
+    protected Map<String, String> options;
+    @XmlTransient
+    private T authModule;
+
+    /**
+     * Gets the value of the className property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getClassName() {
+        return className;
+    }
+
+    /**
+     * Sets the value of the className property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setClassName(String value) {
+        this.className = value;
+    }
+
+    /**
+     * Gets the value of the requestPolicy property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link MessagePolicyType }
+     *     
+     */
+    public MessagePolicyType getRequestPolicy() {
+        return requestPolicy;
+    }
+
+    /**
+     * Sets the value of the requestPolicy property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link MessagePolicyType }
+     *     
+     */
+    public void setRequestPolicy(MessagePolicyType value) {
+        this.requestPolicy = value;
+    }
+
+    /**
+     * Gets the value of the responsePolicy property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link MessagePolicyType }
+     *     
+     */
+    public MessagePolicyType getResponsePolicy() {
+        return responsePolicy;
+    }
+
+    /**
+     * Sets the value of the responsePolicy property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link MessagePolicyType }
+     *     
+     */
+    public void setResponsePolicy(MessagePolicyType value) {
+        this.responsePolicy = value;
+    }
+
+    /**
+     * Gets the value of the options property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link Map<String, String> }
+     *     
+     */
+    public Map<String, String> getOptions() {
+        return options;
+    }
+
+    /**
+     * Sets the value of the options property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link Map<String, String> }
+     *     
+     */
+    public void setOptions(Map<String, String> value) {
+        this.options = value;
+    }
+
+    public void createAuthModule(ClassLoader classLoader) {
+        throw new RuntimeException("NYI");
+    }
+
+    public T getAuthModule() {
+        return authModule;
+    }
+}

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthConfigType.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthConfigType.java?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthConfigType.java
(original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthConfigType.java
Wed Jul 16 11:38:42 2008
@@ -11,10 +11,17 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
+import javax.security.auth.message.config.ClientAuthConfig;
+import javax.security.auth.message.config.ClientAuthContext;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.Subject;
 
 
 /**
@@ -29,7 +36,7 @@
  *       &lt;sequence>
  *         &lt;element name="messageLayer" type="{http://www.w3.org/2001/XMLSchema}string"
minOccurs="0"/>
  *         &lt;element name="appContext" type="{http://www.w3.org/2001/XMLSchema}string"
minOccurs="0"/>
- *         &lt;element name="authenticationContextID" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *         &lt;element name="authenticationContextID" type="{http://www.w3.org/2001/XMLSchema}string"
minOccurs="0"/>
  *         &lt;element name="protected" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
  *         &lt;element name="clientAuthContext" type="{http://geronimo.apache.org/xml/ns/geronimo-jaspi}clientAuthContextType"
maxOccurs="unbounded" minOccurs="0"/>
  *       &lt;/sequence>
@@ -49,13 +56,12 @@
     "clientAuthContext"
 })
 public class ClientAuthConfigType
-    implements Serializable
+    implements ClientAuthConfig, Serializable
 {
 
     private final static long serialVersionUID = 12343L;
     protected String messageLayer;
     protected String appContext;
-    @XmlElement(required = true)
     protected String authenticationContextID;
     @XmlElement(name = "protected")
     protected boolean _protected;
@@ -97,6 +103,19 @@
         return appContext;
     }
 
+    public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException
{
+        if (authenticationContextID != null) {
+            return authenticationContextID;
+        }
+        for (ClientAuthContextType clientAuthContextType: clientAuthContext) {
+            String authContextID = clientAuthContextType.getAuthenticationContextID(messageInfo);
+            if (authContextID != null) {
+                return authContextID;
+            }
+        }
+        return null;
+    }
+
     /**
      * Sets the value of the appContext property.
      * 
@@ -141,6 +160,9 @@
         return _protected;
     }
 
+    public void refresh() throws AuthException, SecurityException {
+    }
+
     /**
      * Sets the value of the protected property.
      * 
@@ -178,4 +200,7 @@
         return this.clientAuthContext;
     }
 
+    public ClientAuthContext getAuthContext(String authContextID, Subject clientSubject,
Map properties) throws AuthException {
+        return null;
+    }
 }

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthContextType.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthContextType.java?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthContextType.java
(original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ClientAuthContextType.java
Wed Jul 16 11:38:42 2008
@@ -15,6 +15,12 @@
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
+import javax.security.auth.message.config.ClientAuthContext;
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.AuthStatus;
+import javax.security.auth.message.module.ClientAuthModule;
+import javax.security.auth.Subject;
 
 
 /**
@@ -47,7 +53,7 @@
     "clientAuthModule"
 })
 public class ClientAuthContextType
-    implements Serializable
+    implements ClientAuthContext, Serializable
 {
 
     private final static long serialVersionUID = 12343L;
@@ -55,7 +61,7 @@
     protected String appContext;
     @XmlElement(required = true)
     protected String authenticationContextID;
-    protected List<AuthModuleType> clientAuthModule;
+    protected List<AuthModuleType<ClientAuthModule>> clientAuthModule;
 
     /**
      * Gets the value of the messageLayer property.
@@ -117,6 +123,10 @@
         return authenticationContextID;
     }
 
+    public String getAuthenticationContextID(MessageInfo messageInfo) {
+        return authenticationContextID;
+    }
+
     /**
      * Sets the value of the authenticationContextID property.
      * 
@@ -149,13 +159,54 @@
      * Objects of the following type(s) are allowed in the list
      * {@link AuthModuleType }
      * 
-     * 
+     *
+     * @return list of client auth module wrappers
      */
-    public List<AuthModuleType> getClientAuthModule() {
+    public List<AuthModuleType<ClientAuthModule>> getClientAuthModule() {
         if (clientAuthModule == null) {
-            clientAuthModule = new ArrayList<AuthModuleType>();
+            clientAuthModule = new ArrayList<AuthModuleType<ClientAuthModule>>();
         }
         return this.clientAuthModule;
     }
 
+    public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException
{
+        for (AuthModuleType<ClientAuthModule> authModuleType: getClientAuthModule())
{
+            ClientAuthModule clientAuthModule = authModuleType.getAuthModule();
+            clientAuthModule.cleanSubject(messageInfo, subject);
+        }
+    }
+
+    public AuthStatus secureRequest(MessageInfo messageInfo, Subject clientSubject) throws
AuthException {
+        for (AuthModuleType<ClientAuthModule> authModuleType: getClientAuthModule())
{
+            ClientAuthModule clientAuthModule = authModuleType.getAuthModule();
+            AuthStatus result = clientAuthModule.secureRequest(messageInfo, clientSubject);
+
+            //jaspi spec p 74
+            if (result == AuthStatus.SUCCESS) {
+                continue;
+            }
+            if (result == AuthStatus.SEND_CONTINUE || result == AuthStatus.FAILURE) {
+                return result;
+            }
+            throw new AuthException("Invalid AuthStatus " + result + " from client auth module:
" + clientAuthModule);
+        }
+        return AuthStatus.SUCCESS;
+    }
+
+    public AuthStatus validateResponse(MessageInfo messageInfo, Subject clientSubject, Subject
serviceSubject) throws AuthException {
+        for (AuthModuleType<ClientAuthModule> authModuleType: getClientAuthModule())
{
+            ClientAuthModule clientAuthModule = authModuleType.getAuthModule();
+            AuthStatus result = clientAuthModule.validateResponse(messageInfo, clientSubject,
serviceSubject);
+
+            //jaspi spec p 74
+            if (result == AuthStatus.SUCCESS) {
+                continue;
+            }
+            if (result == AuthStatus.SEND_CONTINUE || result == AuthStatus.FAILURE) {
+                return result;
+            }
+            throw new AuthException("Invalid AuthStatus " + result + " from client auth module:
" + clientAuthModule);
+        }
+        return AuthStatus.SUCCESS;
+    }
 }

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthConfigType.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthConfigType.java?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthConfigType.java
(original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthConfigType.java
Wed Jul 16 11:38:42 2008
@@ -11,10 +11,17 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
+import javax.security.auth.message.config.ServerAuthConfig;
+import javax.security.auth.message.config.ServerAuthContext;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.Subject;
 
 
 /**
@@ -49,13 +56,12 @@
     "serverAuthContext"
 })
 public class ServerAuthConfigType
-    implements Serializable
+    implements ServerAuthConfig, Serializable
 {
 
     private final static long serialVersionUID = 12343L;
     protected String messageLayer;
     protected String appContext;
-    @XmlElement(required = true)
     protected String authenticationContextID;
     @XmlElement(name = "protected")
     protected boolean _protected;
@@ -97,6 +103,19 @@
         return appContext;
     }
 
+    public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException
{
+        if (authenticationContextID != null) {
+            return authenticationContextID;
+        }
+        for (ServerAuthContextType serverAuthContextType: serverAuthContext) {
+            String authContextID = serverAuthContextType.getAuthenticationContextID(messageInfo);
+            if (authContextID != null) {
+                return authContextID;
+            }
+        }
+        return null;
+    }
+
     /**
      * Sets the value of the appContext property.
      * 
@@ -141,6 +160,9 @@
         return _protected;
     }
 
+    public void refresh() throws AuthException, SecurityException {
+    }
+
     /**
      * Sets the value of the protected property.
      * 
@@ -178,4 +200,7 @@
         return this.serverAuthContext;
     }
 
+    public ServerAuthContext getAuthContext(String authContextID, Subject serviceSubject,
Map properties) throws AuthException {
+        return null;
+    }
 }

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthContextType.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthContextType.java?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthContextType.java
(original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ServerAuthContextType.java
Wed Jul 16 11:38:42 2008
@@ -11,6 +11,14 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
+
+import javax.security.auth.Subject;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.AuthStatus;
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.message.module.ServerAuthModule;
+import javax.security.auth.message.module.ClientAuthModule;
+import javax.security.auth.message.config.ServerAuthContext;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -19,9 +27,9 @@
 
 /**
  * <p>Java class for serverAuthContextType complex type.
- * 
+ * <p/>
  * <p>The following schema fragment specifies the expected content contained within
this class.
- * 
+ * <p/>
  * <pre>
  * &lt;complexType name="serverAuthContextType">
  *   &lt;complexContent>
@@ -36,34 +44,29 @@
  *   &lt;/complexContent>
  * &lt;/complexType>
  * </pre>
- * 
- * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "serverAuthContextType", propOrder = {
-    "messageLayer",
-    "appContext",
-    "authenticationContextID",
-    "serverAuthModule"
-})
+        "messageLayer",
+        "appContext",
+        "authenticationContextID",
+        "serverAuthModule"
+        })
 public class ServerAuthContextType
-    implements Serializable
-{
+        implements ServerAuthContext, Serializable {
 
     private final static long serialVersionUID = 12343L;
     protected String messageLayer;
     protected String appContext;
     @XmlElement(required = true)
     protected String authenticationContextID;
-    protected List<AuthModuleType> serverAuthModule;
+    protected List<AuthModuleType<ServerAuthModule>> serverAuthModule;
 
     /**
      * Gets the value of the messageLayer property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
+     *
+     * @return possible object is
+     *         {@link String }
      */
     public String getMessageLayer() {
         return messageLayer;
@@ -71,11 +74,9 @@
 
     /**
      * Sets the value of the messageLayer property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
+     *
+     * @param value allowed object is
+     *              {@link String }
      */
     public void setMessageLayer(String value) {
         this.messageLayer = value;
@@ -83,11 +84,9 @@
 
     /**
      * Gets the value of the appContext property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
+     *
+     * @return possible object is
+     *         {@link String }
      */
     public String getAppContext() {
         return appContext;
@@ -95,11 +94,9 @@
 
     /**
      * Sets the value of the appContext property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
+     *
+     * @param value allowed object is
+     *              {@link String }
      */
     public void setAppContext(String value) {
         this.appContext = value;
@@ -107,23 +104,23 @@
 
     /**
      * Gets the value of the authenticationContextID property.
-     * 
-     * @return
-     *     possible object is
-     *     {@link String }
-     *     
+     *
+     * @return possible object is
+     *         {@link String }
      */
     public String getAuthenticationContextID() {
         return authenticationContextID;
     }
 
+    public String getAuthenticationContextID(MessageInfo messageInfo) {
+        return authenticationContextID;
+    }
+
     /**
      * Sets the value of the authenticationContextID property.
-     * 
-     * @param value
-     *     allowed object is
-     *     {@link String }
-     *     
+     *
+     * @param value allowed object is
+     *              {@link String }
      */
     public void setAuthenticationContextID(String value) {
         this.authenticationContextID = value;
@@ -131,31 +128,69 @@
 
     /**
      * Gets the value of the serverAuthModule property.
-     * 
-     * <p>
+     * <p/>
+     * <p/>
      * This accessor method returns a reference to the live list,
      * not a snapshot. Therefore any modification you make to the
      * returned list will be present inside the JAXB object.
      * This is why there is not a <CODE>set</CODE> method for the serverAuthModule
property.
-     * 
-     * <p>
+     * <p/>
+     * <p/>
      * For example, to add a new item, do as follows:
      * <pre>
      *    getServerAuthModule().add(newItem);
      * </pre>
-     * 
-     * 
-     * <p>
+     * <p/>
+     * <p/>
+     * <p/>
      * Objects of the following type(s) are allowed in the list
      * {@link AuthModuleType }
-     * 
-     * 
      */
-    public List<AuthModuleType> getServerAuthModule() {
+    public List<AuthModuleType<ServerAuthModule>> getServerAuthModule() {
         if (serverAuthModule == null) {
-            serverAuthModule = new ArrayList<AuthModuleType>();
+            serverAuthModule = new ArrayList<AuthModuleType<ServerAuthModule>>();
         }
         return this.serverAuthModule;
     }
 
+    public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException
{
+        for (AuthModuleType<ServerAuthModule> authModuleType: getServerAuthModule())
{
+            ServerAuthModule serverAuthModule = authModuleType.getAuthModule();
+            serverAuthModule.cleanSubject(messageInfo, subject);
+        }
+    }
+
+    public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) throws
AuthException {
+        for (AuthModuleType<ServerAuthModule> authModuleType: getServerAuthModule())
{
+            ServerAuthModule serverAuthModule = authModuleType.getAuthModule();
+            AuthStatus result = serverAuthModule.secureResponse(messageInfo, serviceSubject);
+
+            //jaspi spec p 86
+            if (result == AuthStatus.SEND_SUCCESS) {
+                continue;
+            }
+            if (result == AuthStatus.SEND_CONTINUE || result == AuthStatus.SEND_FAILURE)
{
+                return result;
+            }
+            throw new AuthException("Invalid AuthStatus " + result + " from server auth module:
" + serverAuthModule);
+        }
+        return AuthStatus.SEND_SUCCESS;
+    }
+
+    public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject
serviceSubject) throws AuthException {
+        for (AuthModuleType<ServerAuthModule> authModuleType: getServerAuthModule())
{
+            ServerAuthModule serverAuthModule = authModuleType.getAuthModule();
+            AuthStatus result = serverAuthModule.validateRequest(messageInfo, clientSubject,
serviceSubject);
+
+            //jaspi spec p 88
+            if (result == AuthStatus.SUCCESS) {
+                continue;
+            }
+            if (result == AuthStatus.SEND_SUCCESS || result == AuthStatus.SEND_CONTINUE ||
result == AuthStatus.FAILURE) {
+                return result;
+            }
+            throw new AuthException("Invalid AuthStatus " + result + " from server auth module:
" + serverAuthModule);
+        }
+        return AuthStatus.SUCCESS;
+    }
 }

Added: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/AuthModuleTypeJAXB.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/AuthModuleTypeJAXB.java?rev=677372&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/AuthModuleTypeJAXB.java
(added)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/AuthModuleTypeJAXB.java
Wed Jul 16 11:38:42 2008
@@ -0,0 +1,205 @@
+
+package sxc.org.apache.geronimo.components.jaspi.model;
+
+import java.util.Map;
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+import javax.security.auth.message.module.ClientAuthModule;
+import javax.security.auth.message.module.ServerAuthModule;
+
+import com.envoisolutions.sxc.jaxb.FieldAccessor;
+import com.envoisolutions.sxc.jaxb.JAXBObject;
+import com.envoisolutions.sxc.jaxb.LifecycleCallback;
+import com.envoisolutions.sxc.jaxb.RuntimeContext;
+import com.envoisolutions.sxc.util.Attribute;
+import com.envoisolutions.sxc.util.XoXMLStreamReader;
+import com.envoisolutions.sxc.util.XoXMLStreamWriter;
+import org.apache.geronimo.components.jaspi.model.AuthModuleType;
+import org.apache.geronimo.components.jaspi.model.MessagePolicyType;
+import org.apache.geronimo.components.jaspi.model.StringMapAdapter;
+
+
+import static sxc.org.apache.geronimo.components.jaspi.model.MessagePolicyTypeJAXB.readMessagePolicyType;
+import static sxc.org.apache.geronimo.components.jaspi.model.MessagePolicyTypeJAXB.writeMessagePolicyType;
+
+@SuppressWarnings({
+    "StringEquality"
+})
+public class AuthModuleTypeJAXB<T>
+    extends JAXBObject<AuthModuleType>
+{
+
+    public final static AuthModuleTypeJAXB<ClientAuthModule> CLIENT_INSTANCE = new
AuthModuleTypeJAXB<ClientAuthModule>();
+    public final static AuthModuleTypeJAXB<ServerAuthModule> SERVER_INSTANCE = new
AuthModuleTypeJAXB<ServerAuthModule>();
+    private final static LifecycleCallback lifecycleCallback = new LifecycleCallback(AuthModuleType.class);
+    private final static FieldAccessor<AuthModuleType, String> authModuleTypeClassName
= new FieldAccessor<AuthModuleType, String>(AuthModuleType.class, "className");
+    private final static FieldAccessor<AuthModuleType, MessagePolicyType> authModuleTypeRequestPolicy
= new FieldAccessor<AuthModuleType, MessagePolicyType>(AuthModuleType.class, "requestPolicy");
+    private final static FieldAccessor<AuthModuleType, MessagePolicyType> authModuleTypeResponsePolicy
= new FieldAccessor<AuthModuleType, MessagePolicyType>(AuthModuleType.class, "responsePolicy");
+    private final static FieldAccessor<AuthModuleType, Map<String, String>> authModuleTypeOptions
= new FieldAccessor<AuthModuleType, Map<String, String>>(AuthModuleType.class,
"options");
+    private final static StringMapAdapter stringMapAdapterAdapter = new StringMapAdapter();
+
+    public AuthModuleTypeJAXB() {
+        super(AuthModuleType.class, null, new QName("http://geronimo.apache.org/xml/ns/geronimo-jaspi".intern(),
"authModuleType".intern()), MessagePolicyTypeJAXB.class);
+    }
+
+    public static AuthModuleType<ClientAuthModule> readClientAuthModuleType(XoXMLStreamReader
reader, RuntimeContext context)
+        throws Exception
+    {
+        return CLIENT_INSTANCE.read(reader, context);
+    }
+
+    public static void writeClientAuthModuleType(XoXMLStreamWriter writer, AuthModuleType
authModuleType, RuntimeContext context)
+        throws Exception
+    {
+        CLIENT_INSTANCE.write(writer, authModuleType, context);
+    }
+
+    public static AuthModuleType<ServerAuthModule> readServerAuthModuleType(XoXMLStreamReader
reader, RuntimeContext context)
+        throws Exception
+    {
+        return SERVER_INSTANCE.read(reader, context);
+    }
+
+    public static void writeServerAuthModuleType(XoXMLStreamWriter writer, AuthModuleType
authModuleType, RuntimeContext context)
+        throws Exception
+    {
+        SERVER_INSTANCE.write(writer, authModuleType, context);
+    }
+
+    public final AuthModuleType<T> read(XoXMLStreamReader reader, RuntimeContext context)
+        throws Exception
+    {
+        // Check for xsi:nil
+        if (reader.isXsiNil()) {
+            return null;
+        }
+
+        if (context == null) {
+            context = new RuntimeContext();
+        }
+
+        AuthModuleType<T> authModuleType = new AuthModuleType<T>();
+        context.beforeUnmarshal(authModuleType, lifecycleCallback);
+
+
+        // Check xsi:type
+        QName xsiType = reader.getXsiType();
+        if (xsiType!= null) {
+            if (("authModuleType"!= xsiType.getLocalPart())||("http://geronimo.apache.org/xml/ns/geronimo-jaspi"!=
xsiType.getNamespaceURI())) {
+                return context.unexpectedXsiType(reader, AuthModuleType.class);
+            }
+        }
+
+        // Read attributes
+        for (Attribute attribute: reader.getAttributes()) {
+            if (XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI!= attribute.getNamespace()) {
+                context.unexpectedAttribute(attribute);
+            }
+        }
+
+        // Read elements
+        for (XoXMLStreamReader elementReader: reader.getChildElements()) {
+            if (("className" == elementReader.getLocalName())&&("http://geronimo.apache.org/xml/ns/geronimo-jaspi"
== elementReader.getNamespaceURI())) {
+                // ELEMENT: className
+                String className = elementReader.getElementAsString();
+                authModuleTypeClassName.setObject(reader, context, authModuleType, className);
+            } else if (("requestPolicy" == elementReader.getLocalName())&&("http://geronimo.apache.org/xml/ns/geronimo-jaspi"
== elementReader.getNamespaceURI())) {
+                // ELEMENT: requestPolicy
+                MessagePolicyType requestPolicy = readMessagePolicyType(elementReader, context);
+                authModuleTypeRequestPolicy.setObject(reader, context, authModuleType, requestPolicy);
+            } else if (("responsePolicy" == elementReader.getLocalName())&&("http://geronimo.apache.org/xml/ns/geronimo-jaspi"
== elementReader.getNamespaceURI())) {
+                // ELEMENT: responsePolicy
+                MessagePolicyType responsePolicy = readMessagePolicyType(elementReader, context);
+                authModuleTypeResponsePolicy.setObject(reader, context, authModuleType, responsePolicy);
+            } else if (("options" == elementReader.getLocalName())&&("http://geronimo.apache.org/xml/ns/geronimo-jaspi"
== elementReader.getNamespaceURI())) {
+                // ELEMENT: options
+                String optionsRaw = elementReader.getElementAsString();
+
+                Map<String, String> options;
+                try {
+                    options = stringMapAdapterAdapter.unmarshal(optionsRaw);
+                } catch (Exception e) {
+                    context.xmlAdapterError(elementReader, StringMapAdapter.class, Map.class,
Map.class, e);
+                    continue;
+                }
+
+                authModuleTypeOptions.setObject(reader, context, authModuleType, options);
+            } else {
+                context.unexpectedElement(elementReader, new QName("http://geronimo.apache.org/xml/ns/geronimo-jaspi",
"className"), new QName("http://geronimo.apache.org/xml/ns/geronimo-jaspi", "requestPolicy"),
new QName("http://geronimo.apache.org/xml/ns/geronimo-jaspi", "responsePolicy"), new QName("http://geronimo.apache.org/xml/ns/geronimo-jaspi",
"options"));
+            }
+        }
+
+        context.afterUnmarshal(authModuleType, lifecycleCallback);
+
+        return authModuleType;
+    }
+
+    public final void write(XoXMLStreamWriter writer, AuthModuleType authModuleType, RuntimeContext
context)
+        throws Exception
+    {
+        if (authModuleType == null) {
+            writer.writeXsiNil();
+            return ;
+        }
+
+        if (context == null) {
+            context = new RuntimeContext();
+        }
+
+        String prefix = writer.getUniquePrefix("http://geronimo.apache.org/xml/ns/geronimo-jaspi");
+        if (AuthModuleType.class!= authModuleType.getClass()) {
+            context.unexpectedSubclass(writer, authModuleType, AuthModuleType.class);
+            return ;
+        }
+
+        context.beforeMarshal(authModuleType, lifecycleCallback);
+
+
+        // ELEMENT: className
+        String className = authModuleTypeClassName.getObject(authModuleType, context, authModuleType);
+        if (className!= null) {
+            writer.writeStartElement(prefix, "className", "http://geronimo.apache.org/xml/ns/geronimo-jaspi");
+            writer.writeCharacters(className);
+            writer.writeEndElement();
+        } else {
+            context.unexpectedNullValue(authModuleType, "className");
+        }
+
+        // ELEMENT: requestPolicy
+        MessagePolicyType requestPolicy = authModuleTypeRequestPolicy.getObject(authModuleType,
context, authModuleType);
+        if (requestPolicy!= null) {
+            writer.writeStartElement(prefix, "requestPolicy", "http://geronimo.apache.org/xml/ns/geronimo-jaspi");
+            writeMessagePolicyType(writer, requestPolicy, context);
+            writer.writeEndElement();
+        } else {
+            context.unexpectedNullValue(authModuleType, "requestPolicy");
+        }
+
+        // ELEMENT: responsePolicy
+        MessagePolicyType responsePolicy = authModuleTypeResponsePolicy.getObject(authModuleType,
context, authModuleType);
+        if (responsePolicy!= null) {
+            writer.writeStartElement(prefix, "responsePolicy", "http://geronimo.apache.org/xml/ns/geronimo-jaspi");
+            writeMessagePolicyType(writer, responsePolicy, context);
+            writer.writeEndElement();
+        } else {
+            context.unexpectedNullValue(authModuleType, "responsePolicy");
+        }
+
+        // ELEMENT: options
+        Map<String, String> optionsRaw = authModuleTypeOptions.getObject(authModuleType,
context, authModuleType);
+        String options = null;
+        try {
+            options = stringMapAdapterAdapter.marshal(optionsRaw);
+        } catch (Exception e) {
+            context.xmlAdapterError(authModuleType, "options", StringMapAdapter.class, Map.class,
Map.class, e);
+        }
+        if (options!= null) {
+            writer.writeStartElement(prefix, "options", "http://geronimo.apache.org/xml/ns/geronimo-jaspi");
+            writer.writeCharacters(options);
+            writer.writeEndElement();
+        }
+
+        context.afterMarshal(authModuleType, lifecycleCallback);
+    }
+
+}

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ClientAuthContextTypeJAXB.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ClientAuthContextTypeJAXB.java?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ClientAuthContextTypeJAXB.java
(original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ClientAuthContextTypeJAXB.java
Wed Jul 16 11:38:42 2008
@@ -16,8 +16,8 @@
 import org.apache.geronimo.components.jaspi.model.ClientAuthContextType;
 
 
-import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.readAuthModuleType;
-import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.writeAuthModuleType;
+import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.readClientAuthModuleType;
+import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.writeClientAuthModuleType;
 
 @SuppressWarnings({
     "StringEquality"
@@ -98,7 +98,7 @@
                 clientAuthContextTypeAuthenticationContextID.setObject(reader, context, clientAuthContextType,
authenticationContextID);
             } else if (("clientAuthModule" == elementReader.getLocalName())&&("http://geronimo.apache.org/xml/ns/geronimo-jaspi"
== elementReader.getNamespaceURI())) {
                 // ELEMENT: clientAuthModule
-                AuthModuleType clientAuthModuleItem = readAuthModuleType(elementReader, context);
+                AuthModuleType clientAuthModuleItem = readClientAuthModuleType(elementReader,
context);
                 if (clientAuthModule == null) {
                     clientAuthModule = clientAuthContextTypeClientAuthModule.getObject(reader,
context, clientAuthContextType);
                     if (clientAuthModule!= null) {
@@ -174,7 +174,7 @@
             for (AuthModuleType clientAuthModuleItem: clientAuthModule) {
                 writer.writeStartElement(prefix, "clientAuthModule", "http://geronimo.apache.org/xml/ns/geronimo-jaspi");
                 if (clientAuthModuleItem!= null) {
-                    writeAuthModuleType(writer, clientAuthModuleItem, context);
+                    writeClientAuthModuleType(writer, clientAuthModuleItem, context);
                 } else {
                     writer.writeXsiNil();
                 }

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ServerAuthContextTypeJAXB.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ServerAuthContextTypeJAXB.java?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ServerAuthContextTypeJAXB.java
(original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ServerAuthContextTypeJAXB.java
Wed Jul 16 11:38:42 2008
@@ -3,8 +3,10 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
+
 import com.envoisolutions.sxc.jaxb.FieldAccessor;
 import com.envoisolutions.sxc.jaxb.JAXBObject;
 import com.envoisolutions.sxc.jaxb.LifecycleCallback;
@@ -12,12 +14,10 @@
 import com.envoisolutions.sxc.util.Attribute;
 import com.envoisolutions.sxc.util.XoXMLStreamReader;
 import com.envoisolutions.sxc.util.XoXMLStreamWriter;
-import org.apache.geronimo.components.jaspi.model.AuthModuleType;
 import org.apache.geronimo.components.jaspi.model.ServerAuthContextType;
-
-
-import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.readAuthModuleType;
-import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.writeAuthModuleType;
+import org.apache.geronimo.components.jaspi.model.AuthModuleType;
+import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.readServerAuthModuleType;
+import static sxc.org.apache.geronimo.components.jaspi.model.AuthModuleTypeJAXB.writeServerAuthModuleType;
 
 @SuppressWarnings({
     "StringEquality"
@@ -98,7 +98,7 @@
                 serverAuthContextTypeAuthenticationContextID.setObject(reader, context, serverAuthContextType,
authenticationContextID);
             } else if (("serverAuthModule" == elementReader.getLocalName())&&("http://geronimo.apache.org/xml/ns/geronimo-jaspi"
== elementReader.getNamespaceURI())) {
                 // ELEMENT: serverAuthModule
-                AuthModuleType serverAuthModuleItem = readAuthModuleType(elementReader, context);
+                AuthModuleType serverAuthModuleItem = readServerAuthModuleType(elementReader,
context);
                 if (serverAuthModule == null) {
                     serverAuthModule = serverAuthContextTypeServerAuthModule.getObject(reader,
context, serverAuthContextType);
                     if (serverAuthModule!= null) {
@@ -174,7 +174,7 @@
             for (AuthModuleType serverAuthModuleItem: serverAuthModule) {
                 writer.writeStartElement(prefix, "serverAuthModule", "http://geronimo.apache.org/xml/ns/geronimo-jaspi");
                 if (serverAuthModuleItem!= null) {
-                    writeAuthModuleType(writer, serverAuthModuleItem, context);
+                    writeServerAuthModuleType(writer, serverAuthModuleItem, context);
                 } else {
                     writer.writeXsiNil();
                 }

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/xsd/geronimo-jaspi.xsd
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/xsd/geronimo-jaspi.xsd?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/xsd/geronimo-jaspi.xsd (original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/xsd/geronimo-jaspi.xsd Wed Jul
16 11:38:42 2008
@@ -165,7 +165,7 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="authenticationContextID" type="xs:string">
+            <xs:element name="authenticationContextID" type="xs:string" minOccurs="0">
                 <xs:annotation>
                     <xs:documentation>
                         the constant value to be returned from getAuthContextID(MessageInfo
messageInfo)
@@ -208,7 +208,7 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="authenticationContextID" type="xs:string">
+            <xs:element name="authenticationContextID" type="xs:string" minOccurs="0">
                 <xs:annotation>
                     <xs:documentation>
                         the constant value to be returned from getAuthContextID(MessageInfo
messageInfo)
@@ -243,7 +243,7 @@
                     </xs:documentation>
                 </xs:annotation>
             </xs:element>
-            <xs:element name="authenticationContextID" type="xs:string">
+            <xs:element name="authenticationContextID" type="xs:string" minOccurs="0">
                 <xs:annotation>
                     <xs:documentation>
                         the constant value to be returned from getAuthContextID(MessageInfo
messageInfo)

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/java/org/apache/geronimo/components/jaspi/model/JaxbTest.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/java/org/apache/geronimo/components/jaspi/model/JaxbTest.java?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/java/org/apache/geronimo/components/jaspi/model/JaxbTest.java
(original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/java/org/apache/geronimo/components/jaspi/model/JaxbTest.java
Wed Jul 16 11:38:42 2008
@@ -39,23 +39,25 @@
 import org.xml.sax.SAXException;
 
 /**
- * @version $Rev:$ $Date:$
+ * @version $Rev$ $Date$
  */
 
 public class JaxbTest {
     public static final XMLInputFactory XMLINPUT_FACTORY = XMLInputFactory.newInstance();
 
+    private final int count = 2;
+
     @Test
     public void testLoad() throws Exception {
         String file = "test-jaspi.xml";
         JaspiType jaspi1 = loadJaspi(file);
-        if (jaspi1.getConfigProvider().size() != 1) throw new Exception("expected 1 configprovider,
not this: " + jaspi1.getConfigProvider());
+        if (jaspi1.getConfigProvider().size() != count) throw new Exception("expected " +
count + " configprovider, not this: " + jaspi1.getConfigProvider());
         URL url = getClass().getClassLoader().getResource("test-jaspi.xml");
         File newFile = new File(new File(url.getPath()).getParentFile(), "test-jaspi-2.xml");
         Writer writer = new FileWriter(newFile);
         JaspiXmlUtil.writeJaspi(jaspi1, writer);
         JaspiType jaspi2 = JaspiXmlUtil.loadJaspi(new FileReader(newFile));
-        if (jaspi2.getConfigProvider().size() != 1) throw new Exception("expected 1 configprovider,
not this: " + jaspi2.getConfigProvider());
+        if (jaspi2.getConfigProvider().size() != count) throw new Exception("expected " +
count + " configprovider, not this: " + jaspi2.getConfigProvider());
     }
 
     private JaspiType loadJaspi(String file) throws ParserConfigurationException, IOException,
SAXException, JAXBException, XMLStreamException {

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/resources/test-jaspi.xml
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/resources/test-jaspi.xml?rev=677372&r1=677371&r2=677372&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/resources/test-jaspi.xml (original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/resources/test-jaspi.xml Wed Jul
16 11:38:42 2008
@@ -27,4 +27,13 @@
         <persistent>true</persistent>
     </configProvider>
 
+    <configProvider>
+        <messageLayer>Http</messageLayer>
+        <appContext>test-app2</appContext>
+        <description>description2</description>
+        <className>org.apache.geronimo.components.jaspi.providers.DummyProvider</className>
+        <properties>foo=bar</properties>
+        <persistent>true</persistent>
+    </configProvider>
+
 </jaspi>
\ No newline at end of file



Mime
View raw message