You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2011/05/02 23:43:19 UTC

svn commit: r1098801 [1/2] - in /geronimo/components/jaspi/trunk: ./ geronimo-jaspi/ geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/ geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ geronimo-jaspi/src/main/java...

Author: djencks
Date: Mon May  2 21:43:18 2011
New Revision: 1098801

URL: http://svn.apache.org/viewvc?rev=1098801&view=rev
Log:
GERONIMO-5944 Remove use of sxc.  Refactor into separate model and implementation

Added:
    geronimo/components/jaspi/trunk/.gitignore
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java   (with props)
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java   (with props)
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java   (with props)
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java   (with props)
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java   (with props)
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/resources/geronimo-jaspi.xsd   (contents, props changed)
      - copied, changed from r1096035, 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/impl/
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/java/org/apache/geronimo/components/jaspi/impl/JaxbTest.java   (contents, props changed)
      - copied, changed from r1096035, geronimo/components/jaspi/trunk/geronimo-jaspi/src/test/java/org/apache/geronimo/components/jaspi/model/JaxbTest.java
Removed:
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/AuthModuleTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ClientAuthConfigTypeJAXB.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/ConfigProviderTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/JaspiTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/MessagePolicyTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ObjectFactoryJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ProtectionPolicyTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/ServerAuthConfigTypeJAXB.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/java/sxc/org/apache/geronimo/components/jaspi/model/TargetPolicyTypeJAXB.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/sxc/org/apache/geronimo/components/jaspi/model/TargetTypeJAXB.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
Modified:
    geronimo/components/jaspi/trunk/geronimo-jaspi/pom.xml
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/AuthConfigFactoryImpl.java
    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/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/ConfigProviderType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/JaspiType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/JaspiUtil.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/JaspiXmlUtil.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/KeyedObject.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/KeyedObjectMapAdapter.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/MessagePolicyType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ProtectionPolicyType.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/org/apache/geronimo/components/jaspi/model/StringMapAdapter.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/TargetPolicyType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/TargetType.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/package-info.java
    geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/resources/META-INF/sun-jaxb.episode

Added: geronimo/components/jaspi/trunk/.gitignore
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/.gitignore?rev=1098801&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/.gitignore (added)
+++ geronimo/components/jaspi/trunk/.gitignore Mon May  2 21:43:18 2011
@@ -0,0 +1,8 @@
+*.i??
+.project
+.classpath
+.settings
+target
+eclipse-classes
+bin
+*.log

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/pom.xml?rev=1098801&r1=1098800&r2=1098801&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/pom.xml (original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/pom.xml Mon May  2 21:43:18 2011
@@ -16,7 +16,7 @@
     limitations under the License.
 -->
 
-<!-- $Rev$ $Date$ -->
+<!-- $Rev: 1032962 $ $Date: 2010-11-09 04:23:49 -0800 (Tue, 09 Nov 2010) $ -->
 
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
@@ -31,11 +31,11 @@
 
     <groupId>org.apache.geronimo.components</groupId>
     <artifactId>geronimo-jaspi</artifactId>
-    <version>1.1.2-SNAPSHOT</version>
+    <version>2.0-SNAPSHOT</version>
     <packaging>bundle</packaging>
     <name>Apache Geronimo JASPI implementation</name>
 
-    <description>Geronimo JASPI implementation using jaxb/sxc for simple xml persistence.</description>
+    <description>Geronimo JASPI implementation using xml/jaxb for simple xml configuration.</description>
 
     <scm>
         <connection>scm:svn:http://svn.apache.org/repos/asf/geronimo/components/jaspi/trunk/geronimo-jaspi</connection>
@@ -89,12 +89,12 @@
             <version>3.6</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.geronimo.bundles</groupId>
-            <artifactId>sxc-jaxb</artifactId>
-            <!--<version>0.8-SNAPSHOT</version>-->
-            <version>0.7.2_1</version>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.apache.geronimo.bundles</groupId>-->
+            <!--<artifactId>sxc-jaxb</artifactId>-->
+            <!--&lt;!&ndash;<version>0.8-SNAPSHOT</version>&ndash;&gt;-->
+            <!--<version>0.7.2_1</version>-->
+        <!--</dependency>-->
 
         <!--<dependency>-->
             <!--<groupId>org.apache.geronimo.bundles</groupId>-->
@@ -108,12 +108,12 @@
             <!--<version>2.2_1</version>-->
         <!--</dependency>-->
 
-        <dependency>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-xjc</artifactId>
-            <version>2.2</version>
-            <scope>provided</scope>
-        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>com.sun.xml.bind</groupId>-->
+            <!--<artifactId>jaxb-xjc</artifactId>-->
+            <!--<version>2.2</version>-->
+            <!--<scope>provided</scope>-->
+        <!--</dependency>-->
 
         <dependency>
             <groupId>org.testng</groupId>
@@ -161,20 +161,22 @@
                 <version>2.3.4</version>
                 <configuration>
                     <instructions>
-                        <Export-Package>org.apache.geronimo.components.jaspi*;version=1.0</Export-Package>
+                        <Export-Package>
+                            org.apache.geronimo.components.jaspi;version=2.0,
+                            org.apache.geronimo.components.jaspi.model;version=2.0
+                        </Export-Package>
                         <Export-SPI-Provider>org.apache.geronimo.components.jaspi.AuthConfigFactoryImpl</Export-SPI-Provider>
                         <Import-Package>
-                            org.apache.geronimo.components.jaspi*;version="[1.0,1.1)",
-                            com.sun.xml.bind.*:resolution:=optional,
+                            !org.apache.geronimo.components.jaspi.*,
+                            org.apache.geronimo.osgi.registry.api;resolution:=optional,
                             *
                         </Import-Package>
-                        <!-- once a maven-bundle-plugin that can interpret the impl/uses version policy is released we can remove the explicit version ranges on import-package -->
                         <_versionpolicy-impl>[$(version;==;$(@)),$(version;=+;$(@)))</_versionpolicy-impl>
                         <_versionpolicy-uses>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy-uses>
                         <Specification-Version>1.0</Specification-Version>
                         <Specification-Title>JASPIC</Specification-Title>
                         <Specification-Vendor>Sun Microsystems</Specification-Vendor>
-                        <Private-Package>org.apache.geronimo.osgi.locator;sxc*</Private-Package>
+                        <Private-Package>org.apache.geronimo.osgi.locator</Private-Package>
                         <Bundle-Activator>org.apache.geronimo.osgi.locator.Activator</Bundle-Activator>
                     </instructions>
                 </configuration>
@@ -190,7 +192,7 @@
                     <plugin>
                         <groupId>org.jvnet.jaxb2.maven2</groupId>
                         <artifactId>maven-jaxb2-plugin</artifactId>
-                        <version>0.5</version>
+                        <version>0.7.2</version>
                         <executions>
                             <execution>
                                 <goals>
@@ -199,13 +201,22 @@
                             </execution>
                         </executions>
                         <configuration>
-                            <schemaDirectory>src/main/xsd</schemaDirectory>
-                            <packageName>org.apache.geronimo.components.jaspi.model</packageName>
+                            <generatePackage>org.apache.geronimo.components.jaspi.model</generatePackage>
+                            <specVersion>2.1</specVersion>
                             <extension>true</extension>
+                            <episode>true</episode>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
+            <!--<dependencies>-->
+                <!--<dependency>-->
+                    <!--<groupId>com.sun.xml.bind</groupId>-->
+                    <!--<artifactId>jaxb-xjc</artifactId>-->
+                    <!--<version>2.2</version>-->
+                    <!--<scope>provided</scope>-->
+                <!--</dependency>-->
+            <!--</dependencies>-->
         </profile>
         <profile>
             <id>sxc-generate</id>

Modified: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/AuthConfigFactoryImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/AuthConfigFactoryImpl.java?rev=1098801&r1=1098800&r2=1098801&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/AuthConfigFactoryImpl.java (original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/AuthConfigFactoryImpl.java Mon May  2 21:43:18 2011
@@ -16,9 +16,11 @@
  */
 package org.apache.geronimo.components.jaspi;
 
+import org.apache.geronimo.components.jaspi.impl.ConfigProviderImpl;
 import org.apache.geronimo.components.jaspi.model.ConfigProviderType;
 import org.apache.geronimo.components.jaspi.model.JaspiType;
 import org.apache.geronimo.components.jaspi.model.JaspiXmlUtil;
+import org.apache.geronimo.components.jaspi.model.ObjectFactory;
 import org.xml.sax.SAXException;
 
 import javax.security.auth.AuthPermission;
@@ -30,14 +32,12 @@ import javax.xml.bind.JAXBException;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLStreamException;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -53,7 +53,8 @@ public class AuthConfigFactoryImpl exten
     public static CallbackHandler staticCallbackHandler;
 
     private static ClassLoader contextClassLoader;
-    private JaspiType jaspiType = new JaspiType();
+
+    private Map<String, ConfigProviderInfo> configProviders = Collections.emptyMap();
 
     private final CallbackHandler callbackHandler;
     private final File configFile;
@@ -94,14 +95,20 @@ public class AuthConfigFactoryImpl exten
         return file;
     }
 
+    public AuthConfigFactoryImpl(JaspiType jaspiType, CallbackHandler callbackHandler) {
+        this.callbackHandler = callbackHandler;
+        this.configFile = null;
+        initialize(jaspiType);
+    }
+
     public synchronized String[] detachListener(RegistrationListener listener, String layer, String appContext) throws SecurityException {
         SecurityManager sm = System.getSecurityManager();
         if (sm != null) {
             sm.checkPermission(new AuthPermission("detachAuthListener"));
         }
         List<String> ids = new ArrayList<String>();
-        for (Map.Entry<String, ConfigProviderType> entry : getRegistrations().entrySet()) {
-            ConfigProviderType ctx = entry.getValue();
+        for (Map.Entry<String, ConfigProviderInfo> entry : getRegistrations().entrySet()) {
+            ConfigProviderInfo ctx = entry.getValue();
             if ((layer == null || layer.equals(ctx.getMessageLayer())) &&
                     (appContext == null || appContext.equals(ctx.getAppContext()))) {
                 if (ctx.getListeners().remove(listener)) {
@@ -112,8 +119,8 @@ public class AuthConfigFactoryImpl exten
         return ids.toArray(new String[ids.size()]);
     }
 
-    private Map<String, ConfigProviderType> getRegistrations() {
-        return jaspiType.getConfigProvider();
+    private Map<String, ConfigProviderInfo> getRegistrations() {
+        return configProviders;
     }
 
     public synchronized AuthConfigProvider getConfigProvider(String layer, String appContext, RegistrationListener listener) {
@@ -123,7 +130,7 @@ public class AuthConfigFactoryImpl exten
         if (appContext == null) {
             throw new NullPointerException("appContext");
         }
-        ConfigProviderType ctx = getRegistrations().get(ConfigProviderType.getRegistrationKey(layer, appContext));
+        ConfigProviderInfo ctx = getRegistrations().get(ConfigProviderType.getRegistrationKey(layer, appContext));
         if (ctx == null) {
             ctx = getRegistrations().get(ConfigProviderType.getRegistrationKey(null, appContext));
         }
@@ -137,7 +144,7 @@ public class AuthConfigFactoryImpl exten
             if (listener != null) {
                 ctx.getListeners().add(listener);
             }
-            return ctx.getProvider();
+            return ctx.getAuthConfigProvider();
         }
         return null;
     }
@@ -148,10 +155,10 @@ public class AuthConfigFactoryImpl exten
 
     public synchronized String[] getRegistrationIDs(AuthConfigProvider provider) {
         List<String> ids = new ArrayList<String>();
-        for (Map.Entry<String, ConfigProviderType> entry : getRegistrations().entrySet()) {
-            ConfigProviderType ctx = entry.getValue();
+        for (Map.Entry<String, ConfigProviderInfo> entry : getRegistrations().entrySet()) {
+            ConfigProviderInfo ctx = entry.getValue();
             if (provider == null ||
-                    provider.getClass().getName().equals(ctx.getProvider().getClass().getName())) {
+                    provider.getClass().getName().equals(ctx.getAuthConfigProvider().getClass().getName())) {
                 ids.add(entry.getKey());
             }
         }
@@ -187,16 +194,18 @@ public class AuthConfigFactoryImpl exten
     private String registerConfigProvider(AuthConfigProvider provider, String layer, String appContext, String description, boolean persistent, Map<String, String> constructorParam, String className) {
         String key = ConfigProviderType.getRegistrationKey(layer, appContext);
         // Get or create context
-        ConfigProviderType ctx = getRegistrations().get(key);
-        if (ctx == null) {
-            ctx = new ConfigProviderType(layer, appContext, persistent, persistent? null: this);
-            getRegistrations().put(key, ctx);
+        ConfigProviderInfo info = getRegistrations().get(key);
+        List<RegistrationListener> listeners;
+        if (info == null) {
+            listeners = new ArrayList<RegistrationListener>();
         } else {
-            if (persistent != ctx.isPersistent()) {
+            if (persistent != info.isPersistent()) {
                 throw new IllegalArgumentException("Cannot change the persistence state");
             }
+            listeners = info.getListeners();
         }
         // Create provider
+        ConfigProviderType ctx = new ConfigProviderType(layer, appContext, persistent, persistent? null: this);
         ctx.setDescription(description);
         if (persistent) {
             if (provider != null) {
@@ -204,18 +213,18 @@ public class AuthConfigFactoryImpl exten
             }
             ctx.setClassName(className);
             ctx.setProperties(constructorParam);
-            ctx.initialize(callbackHandler);
+            provider = ConfigProviderImpl.newConfigProvider(this, ctx);
         } else {
             if (provider == null) {
                 throw new IllegalStateException("No config provider to set");
             }
-            ctx.setProvider(provider);
         }
+        info = new ConfigProviderInfo(provider, ctx, listeners, persistent);
+        getRegistrations().put(key, info);
 
         // Notify listeners
-        List<RegistrationListener> listeners = ctx.getListeners();
         for (RegistrationListener listener : listeners) {
-            listener.notify(ctx.getMessageLayer(), ctx.getAppContext());
+            listener.notify(info.getMessageLayer(), info.getAppContext());
         }
         // Return registration Id
         return key;
@@ -226,7 +235,7 @@ public class AuthConfigFactoryImpl exten
         if (sm != null) {
             sm.checkPermission(new AuthPermission("removeAuthRegistration"));
         }
-        ConfigProviderType ctx = getRegistrations().remove(registrationID);
+        ConfigProviderInfo ctx = getRegistrations().remove(registrationID);
         saveConfig();
         if (ctx != null) {
             List<RegistrationListener> listeners = ctx.getListeners();
@@ -240,6 +249,7 @@ public class AuthConfigFactoryImpl exten
 
     private void loadConfig() {
         if (configFile != null && configFile.length() > 0) {
+            JaspiType jaspiType;
             try {
                 FileReader in = new FileReader(configFile);
                 try {
@@ -258,14 +268,36 @@ public class AuthConfigFactoryImpl exten
             } catch (XMLStreamException e) {
                 throw new SecurityException("Could not read config", e);
             }
+            initialize(jaspiType);
+        }
+    }
+
+    private void initialize(JaspiType jaspiType) {
+        Map<String, ConfigProviderInfo> configProviderInfos = new HashMap<String, ConfigProviderInfo>();
+        try {
+            for (ConfigProviderType configProviderType: jaspiType.getConfigProvider()) {
+                AuthConfigProvider authConfigProvider = ConfigProviderImpl.newConfigProvider(this, configProviderType);
+                ConfigProviderInfo info = new ConfigProviderInfo(authConfigProvider, configProviderType, true);
+                configProviderInfos.put(configProviderType.getKey(), info);
+            }
+        } catch (Exception e) {
+            throw new SecurityException("Could not map config providers", e);
         }
+        this.configProviders = configProviderInfos;
     }
 
+
     private void saveConfig() {
         if (configFile != null) {
+            JaspiType jaspiType = new ObjectFactory().createJaspiType();
+
             try {
-                OutputStream outStream = new FileOutputStream(configFile);
-                Writer out = new OutputStreamWriter(outStream, "UTF-8");
+                for (ConfigProviderInfo info: configProviders.values()) {
+                    if (info.isPersistent()) {
+                        jaspiType.getConfigProvider().add(info.getConfigProviderType());
+                    }
+                }
+                FileWriter out = new FileWriter(configFile);
                 try {
                     JaspiXmlUtil.writeJaspi(jaspiType, out);
                 } finally {
@@ -277,9 +309,64 @@ public class AuthConfigFactoryImpl exten
                 throw new SecurityException("Could not write config", e);
             } catch (JAXBException e) {
                 throw new SecurityException("Could not write config", e);
+            } catch (Exception e) {
+                throw new SecurityException("Could not write config", e);
             }
         }
     }
 
 
+    private static class ConfigProviderInfo implements AuthConfigFactory.RegistrationContext {
+        private final AuthConfigProvider authConfigProvider;
+        private final ConfigProviderType configProviderType;
+        private final boolean persistent;
+        private final List<RegistrationListener> listeners;
+
+        private ConfigProviderInfo(AuthConfigProvider authConfigProvider, ConfigProviderType configProviderType, boolean persistent) {
+            this.authConfigProvider = authConfigProvider;
+            this.configProviderType = configProviderType;
+            this.persistent = persistent;
+            listeners = new ArrayList<RegistrationListener>();
+        }
+
+        private ConfigProviderInfo(AuthConfigProvider authConfigProvider, ConfigProviderType configProviderType, List<RegistrationListener> listeners, boolean persistent) {
+            this.authConfigProvider = authConfigProvider;
+            this.configProviderType = configProviderType;
+            this.listeners = listeners;
+            this.persistent = persistent;
+        }
+
+        public AuthConfigProvider getAuthConfigProvider() {
+            return authConfigProvider;
+        }
+
+        public ConfigProviderType getConfigProviderType() {
+            return configProviderType;
+        }
+
+        public List<RegistrationListener> getListeners() {
+            return listeners;
+        }
+
+        @Override
+        public String getAppContext() {
+            return configProviderType.getAppContext();
+        }
+
+        @Override
+        public String getDescription() {
+            return configProviderType.getDescription();
+        }
+
+        @Override
+        public String getMessageLayer() {
+            return configProviderType.getMessageLayer();
+        }
+
+        @Override
+        public boolean isPersistent() {
+            return persistent;
+        }
+    }
+
 }

Added: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java?rev=1098801&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java (added)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java Mon May  2 21:43:18 2011
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+
+
+package org.apache.geronimo.components.jaspi.impl;
+
+import java.util.Map;
+
+import javax.security.auth.Subject;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.message.config.ClientAuthConfig;
+import javax.security.auth.message.config.ClientAuthContext;
+import org.apache.geronimo.components.jaspi.model.ClientAuthConfigType;
+
+/**
+* @version $Rev:$ $Date:$
+*/
+public class ClientAuthConfigImpl implements ClientAuthConfig {
+
+    private final ClientAuthConfigType clientAuthConfigType;
+    private final Map<String, ClientAuthContext> clientAuthContextMap;
+
+    public ClientAuthConfigImpl(ClientAuthConfigType clientAuthConfigType, Map<String, ClientAuthContext> clientAuthContextMap) {
+        this.clientAuthConfigType = clientAuthConfigType;
+        this.clientAuthContextMap = clientAuthContextMap;
+    }
+
+    public ClientAuthContext getAuthContext(String authContextID, Subject clientSubject, Map properties) throws AuthException {
+        return clientAuthContextMap.get(authContextID);
+    }
+
+    public String getAppContext() {
+        return clientAuthConfigType.getAppContext();
+    }
+
+    public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException {
+        return clientAuthConfigType.getAuthContextID(messageInfo);
+    }
+
+    public String getMessageLayer() {
+        return clientAuthConfigType.getMessageLayer();
+    }
+
+    public boolean isProtected() {
+        return clientAuthConfigType.isProtected();
+    }
+
+    public void refresh() throws SecurityException {
+    }
+}

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthConfigImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java?rev=1098801&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java (added)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java Mon May  2 21:43:18 2011
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+
+
+package org.apache.geronimo.components.jaspi.impl;
+
+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.config.ClientAuthContext;
+import javax.security.auth.message.module.ClientAuthModule;
+
+/**
+* @version $Rev:$ $Date:$
+*/
+public class ClientAuthContextImpl implements ClientAuthContext {
+
+    private final List<ClientAuthModule> clientAuthModules;
+
+    public ClientAuthContextImpl(List<ClientAuthModule> clientAuthModules) {
+        this.clientAuthModules = clientAuthModules;
+    }
+
+    public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException {
+        for (ClientAuthModule clientAuthModule : clientAuthModules) {
+            clientAuthModule.cleanSubject(messageInfo, subject);
+        }
+    }
+
+    public AuthStatus secureRequest(MessageInfo messageInfo, Subject clientSubject) throws AuthException {
+        for (ClientAuthModule clientAuthModule : clientAuthModules) {
+            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 (ClientAuthModule clientAuthModule : clientAuthModules) {
+            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;
+    }
+}

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ClientAuthContextImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java?rev=1098801&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java (added)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java Mon May  2 21:43:18 2011
@@ -0,0 +1,347 @@
+/*
+ * 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.
+ */
+
+
+package org.apache.geronimo.components.jaspi.impl;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.MessagePolicy;
+import javax.security.auth.message.config.AuthConfigFactory;
+import javax.security.auth.message.config.AuthConfigProvider;
+import javax.security.auth.message.config.ClientAuthConfig;
+import javax.security.auth.message.config.ClientAuthContext;
+import javax.security.auth.message.config.ServerAuthConfig;
+import javax.security.auth.message.config.ServerAuthContext;
+import javax.security.auth.message.module.ClientAuthModule;
+import javax.security.auth.message.module.ServerAuthModule;
+import org.apache.geronimo.components.jaspi.model.AuthModuleType;
+import org.apache.geronimo.components.jaspi.model.ClientAuthConfigType;
+import org.apache.geronimo.components.jaspi.model.ClientAuthContextType;
+import org.apache.geronimo.components.jaspi.model.ConfigProviderType;
+import org.apache.geronimo.components.jaspi.model.KeyedObjectMapAdapter;
+import org.apache.geronimo.components.jaspi.model.MessagePolicyType;
+import org.apache.geronimo.components.jaspi.model.ProtectionPolicyType;
+import org.apache.geronimo.components.jaspi.model.ServerAuthConfigType;
+import org.apache.geronimo.components.jaspi.model.ServerAuthContextType;
+import org.apache.geronimo.components.jaspi.model.TargetPolicyType;
+import org.apache.geronimo.components.jaspi.model.TargetType;
+import org.apache.geronimo.osgi.locator.ProviderLocator;
+
+/**
+* @version $Rev:$ $Date:$
+*/
+public class ConfigProviderImpl implements AuthConfigProvider {
+
+    private final Map<String, ClientAuthConfigType> clientConfigTypeMap;
+    private final Map<String, ServerAuthConfigType> serverAuthConfigMap;
+
+    public ConfigProviderImpl(List<ClientAuthConfigType> clientAuthConfigTypes, List<ServerAuthConfigType> serverAuthConfigTypes) {
+        try {
+            this.clientConfigTypeMap =  new KeyedObjectMapAdapter<ClientAuthConfigType>().unmarshal(clientAuthConfigTypes);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        try {
+            this.serverAuthConfigMap = new KeyedObjectMapAdapter<ServerAuthConfigType>().unmarshal(serverAuthConfigTypes);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * spec required constructor
+     * @param properties useless properties map
+     * @param factory useless factory
+     */
+    public ConfigProviderImpl(Map<String, String> properties, AuthConfigFactory factory) {
+        throw new RuntimeException("don't call this");
+    }
+
+    public ClientAuthConfig getClientAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException, SecurityException {
+        if (layer == null) {
+            throw new NullPointerException("messageLayer");
+        }
+        if (appContext == null) {
+            throw new NullPointerException("appContext");
+        }
+        ClientAuthConfigType ctx = clientConfigTypeMap.get(ConfigProviderType.getRegistrationKey(layer, appContext));
+        if (ctx == null) {
+            ctx = clientConfigTypeMap.get(ConfigProviderType.getRegistrationKey(null, appContext));
+        }
+        if (ctx == null) {
+            ctx = clientConfigTypeMap.get(ConfigProviderType.getRegistrationKey(layer, null));
+        }
+        if (ctx == null) {
+            ctx = clientConfigTypeMap.get(ConfigProviderType.getRegistrationKey(null, null));
+        }
+        if (ctx != null) {
+
+            return newClientAuthConfig(ctx, layer, appContext, handler);
+        }
+        throw new AuthException("No suitable ClientAuthConfig");
+    }
+
+    public ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException, SecurityException {
+        if (layer == null) {
+            throw new NullPointerException("messageLayer");
+        }
+        if (appContext == null) {
+            throw new NullPointerException("appContext");
+        }
+        ServerAuthConfigType ctx = serverAuthConfigMap.get(ConfigProviderType.getRegistrationKey(layer, appContext));
+        if (ctx == null) {
+            ctx = serverAuthConfigMap.get(ConfigProviderType.getRegistrationKey(null, appContext));
+        }
+        if (ctx == null) {
+            ctx = serverAuthConfigMap.get(ConfigProviderType.getRegistrationKey(layer, null));
+        }
+        if (ctx == null) {
+            ctx = serverAuthConfigMap.get(ConfigProviderType.getRegistrationKey(null, null));
+        }
+        if (ctx != null) {
+
+            return newServerAuthConfig(ctx, layer, appContext, handler);
+        }
+        throw new AuthException("No suitable ServerAuthConfig");
+    }
+
+    public void refresh() throws SecurityException {
+    }
+
+    public static AuthConfigProvider newConfigProvider(final AuthConfigFactory authConfigFactory, final ConfigProviderType configProviderType) {
+        AuthConfigProvider provider;
+        if (configProviderType.getClassName() == null) {
+            provider = new ConfigProviderImpl(configProviderType.getClientAuthConfig(), configProviderType.getServerAuthConfig());
+        } else {
+            try {
+                provider = java.security.AccessController
+                .doPrivileged(new PrivilegedExceptionAction<AuthConfigProvider>() {
+                    public AuthConfigProvider run() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+                        Class<? extends AuthConfigProvider> cl = ProviderLocator.loadClass(configProviderType.getClassName(), getClass(), Thread.currentThread().getContextClassLoader()).asSubclass(AuthConfigProvider.class);
+                        Constructor<? extends AuthConfigProvider> cnst = cl.getConstructor(Map.class, AuthConfigFactory.class);
+                        return cnst.newInstance(configProviderType.getProperties(), authConfigFactory);
+                    }
+                });
+            } catch (PrivilegedActionException e) {
+                Exception inner = e.getException();
+                if (inner instanceof InstantiationException) {
+                    throw new SecurityException("AuthConfigFactory error:"
+                                    + inner.getCause().getMessage(), inner.getCause());
+                } else {
+                    throw new SecurityException("AuthConfigFactory error: " + inner, inner);
+                }
+            } catch (Exception e) {
+                throw new SecurityException("AuthConfigFactory error: " + e, e);
+            }
+        }
+        return provider;
+    }
+
+    static ClientAuthConfig newClientAuthConfig(ClientAuthConfigType clientAuthConfigType, String messageLayer, String appContext, CallbackHandler callbackHandler) throws AuthException {
+        Map<String, ClientAuthContext> authContextMap = new HashMap<String, ClientAuthContext>();
+        for (ClientAuthContextType clientAuthContextType: clientAuthConfigType.getClientAuthContext()) {
+            if (match(clientAuthContextType, messageLayer, appContext)) {
+                ClientAuthContext clientAuthContext = newClientAuthContext(clientAuthContextType, callbackHandler);
+                String authContextID = clientAuthContextType.getAuthenticationContextID();
+                if (authContextID == null) {
+                    authContextID = clientAuthConfigType.getAuthenticationContextID();
+                }
+                if (!authContextMap.containsKey(authContextID)) {
+                    authContextMap.put(authContextID,  clientAuthContext);
+                }
+            }
+        }
+        return new ClientAuthConfigImpl(clientAuthConfigType, authContextMap);
+    }
+
+    static ClientAuthContext newClientAuthContext(ClientAuthContextType clientAuthContextType, CallbackHandler callbackHandler) throws AuthException {
+        List<ClientAuthModule> clientAuthModules = new ArrayList<ClientAuthModule>();
+        for (AuthModuleType<ClientAuthModule> clientAuthModuleType: clientAuthContextType.getClientAuthModule()) {
+            ClientAuthModule instance = newAuthModule(clientAuthModuleType, callbackHandler);
+            clientAuthModules.add(instance);
+        }
+        return new ClientAuthContextImpl(clientAuthModules);
+    }
+
+    private static boolean match(ClientAuthContextType clientAuthContextType, String messageLayer, String appContext) {
+        if (messageLayer == null) throw new NullPointerException("messageLayer");
+        if (appContext == null) throw new NullPointerException("appContext");
+        if (messageLayer.equals(clientAuthContextType.getMessageLayer())) {
+            return appContext.equals(clientAuthContextType.getAppContext()) || clientAuthContextType.getAppContext() == null;
+        }
+        if (clientAuthContextType.getMessageLayer() == null) {
+            return appContext.equals(clientAuthContextType.getAppContext()) || clientAuthContextType.getAppContext() == null;
+        }
+        return false;
+    }
+
+
+    static ServerAuthConfig newServerAuthConfig(ServerAuthConfigType serverAuthConfigType, String messageLayer, String appContext, CallbackHandler callbackHandler) throws AuthException {
+        Map<String, ServerAuthContext> authContextMap = new HashMap<String, ServerAuthContext>();
+        for (ServerAuthContextType serverAuthContextType: serverAuthConfigType.getServerAuthContext()) {
+            if (match(serverAuthContextType, messageLayer, appContext)) {
+                ServerAuthContext serverAuthContext = newServerAuthContext(serverAuthContextType, callbackHandler);
+                String authContextID = serverAuthContextType.getAuthenticationContextID();
+                if (authContextID == null) {
+                    authContextID = serverAuthConfigType.getAuthenticationContextID();
+                }
+                if (!authContextMap.containsKey(authContextID)) {
+                    authContextMap.put(authContextID,  serverAuthContext);
+                }
+            }
+        }
+        return new ServerAuthConfigImpl(serverAuthConfigType, authContextMap);
+    }
+
+    static ServerAuthContext newServerAuthContext(ServerAuthContextType serverAuthContextType, CallbackHandler callbackHandler) throws AuthException {
+        List<ServerAuthModule> serverAuthModules = new ArrayList<ServerAuthModule>();
+        for (AuthModuleType<ServerAuthModule> serverAuthModuleType: serverAuthContextType.getServerAuthModule()) {
+            ServerAuthModule instance = newAuthModule(serverAuthModuleType, callbackHandler);
+            serverAuthModules.add(instance);
+        }
+        return new ServerAuthContextImpl(serverAuthModules);
+    }
+
+    private static boolean match(ServerAuthContextType serverAuthContextType, String messageLayer, String appContext) {
+        if (messageLayer == null) throw new NullPointerException("messageLayer");
+        if (appContext == null) throw new NullPointerException("appContext");
+        if (messageLayer.equals(serverAuthContextType.getMessageLayer())) {
+            return appContext.equals(serverAuthContextType.getAppContext()) || serverAuthContextType.getAppContext() == null;
+        }
+        if (serverAuthContextType.getMessageLayer() == null) {
+            return appContext.equals(serverAuthContextType.getAppContext()) || serverAuthContextType.getAppContext() == null;
+        }
+        return false;
+    }
+
+    static <T> T newAuthModule(final AuthModuleType authModuleType, final CallbackHandler callbackHandler) throws AuthException {
+        T authModule;
+        try {
+            authModule = java.security.AccessController
+            .doPrivileged(new PrivilegedExceptionAction<T>() {
+                public T run() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, AuthException {
+                    Class<? extends T> cl = (Class<? extends T>) ProviderLocator.loadClass(authModuleType.getClassName(), getClass(), Thread.currentThread().getContextClassLoader());
+                    Constructor<? extends T> cnst = cl.getConstructor();
+                    T authModule = cnst.newInstance();
+                    Method m = cl.getMethod("initialize", MessagePolicy.class, MessagePolicy.class, CallbackHandler.class, Map.class);
+                    MessagePolicy reqPolicy = newMessagePolicy(authModuleType.getRequestPolicy());
+                    MessagePolicy respPolicy = newMessagePolicy(authModuleType.getResponsePolicy());
+                    m.invoke(authModule, reqPolicy, respPolicy, callbackHandler, authModuleType.getOptions());
+                    return authModule;
+                }
+            });
+        } catch (PrivilegedActionException e) {
+            Exception inner = e.getException();
+            if (inner instanceof InstantiationException) {
+                throw (AuthException) new AuthException("AuthConfigFactory error:"
+                                + inner.getCause().getMessage()).initCause(inner.getCause());
+            } else {
+                throw (AuthException) new AuthException("AuthConfigFactory error: " + inner).initCause(inner);
+            }
+        } catch (Exception e) {
+            throw (AuthException) new AuthException("AuthConfigFactory error: " + e).initCause(e);
+        }
+        return authModule;
+    }
+
+    private static MessagePolicy newMessagePolicy(MessagePolicyType messagePolicyType) throws AuthException {
+        if (messagePolicyType == null) {
+            return null;
+        }
+        if (messagePolicyType.getTargetPolicy().size() == 0) {
+            return null;
+        }
+        MessagePolicy.TargetPolicy[] targetPolicies = new MessagePolicy.TargetPolicy[messagePolicyType.getTargetPolicy().size()];
+        int i = 0;
+        for (TargetPolicyType targetPolicyType: messagePolicyType.getTargetPolicy()) {
+            targetPolicies[i++] = newTargetPolicy(targetPolicyType);
+        }
+        return new MessagePolicy(targetPolicies, messagePolicyType.isMandatory());
+    }
+
+    private static MessagePolicy.TargetPolicy newTargetPolicy(TargetPolicyType targetPolicyType) throws AuthException {
+        MessagePolicy.Target[] targets = new MessagePolicy.Target[targetPolicyType.getTarget().size()];
+        int i = 0;
+        for (TargetType targetType: targetPolicyType.getTarget()) {
+            targets[i++] = newTarget(targetType);
+        }
+        return new MessagePolicy.TargetPolicy(targets, newProtectionPolicy(targetPolicyType.getProtectionPolicy()));
+    }
+
+    private static MessagePolicy.Target newTarget(final TargetType targetType) throws AuthException {
+        try {
+            return java.security.AccessController
+            .doPrivileged(new PrivilegedExceptionAction<MessagePolicy.Target>() {
+                public MessagePolicy.Target run() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+                    Class<? extends MessagePolicy.Target> cl = ProviderLocator.loadClass(targetType.getClassName(), getClass(), Thread.currentThread().getContextClassLoader()).asSubclass(MessagePolicy.Target.class);
+                    Constructor<? extends MessagePolicy.Target> cnst = cl.getConstructor();
+                    MessagePolicy.Target target = cnst.newInstance();
+                    return target;
+                }
+            });
+        } catch (PrivilegedActionException e) {
+            Exception inner = e.getException();
+            if (inner instanceof InstantiationException) {
+                throw (AuthException) new AuthException("AuthConfigFactory error:"
+                                + inner.getCause().getMessage()).initCause(inner.getCause());
+            } else {
+                throw (AuthException) new AuthException("AuthConfigFactory error: " + inner).initCause(inner);
+            }
+        } catch (Exception e) {
+            throw (AuthException) new AuthException("AuthConfigFactory error: " + e).initCause(e);
+        }
+
+    }
+
+    private static MessagePolicy.ProtectionPolicy newProtectionPolicy(final ProtectionPolicyType protectionPolicyType) throws AuthException {
+        try {
+            return java.security.AccessController
+            .doPrivileged(new PrivilegedExceptionAction<MessagePolicy.ProtectionPolicy>() {
+                public MessagePolicy.ProtectionPolicy run() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+                    Class<? extends MessagePolicy.ProtectionPolicy> cl = ProviderLocator.loadClass(protectionPolicyType.getClassName(), getClass(), Thread.currentThread().getContextClassLoader()).asSubclass(MessagePolicy.ProtectionPolicy.class);
+                    Constructor<? extends MessagePolicy.ProtectionPolicy> cnst = cl.getConstructor();
+                    MessagePolicy.ProtectionPolicy target = cnst.newInstance();
+                    return target;
+                }
+            });
+        } catch (PrivilegedActionException e) {
+            Exception inner = e.getException();
+            if (inner instanceof InstantiationException) {
+                throw (AuthException) new AuthException("AuthConfigFactory error:"
+                                + inner.getCause().getMessage()).initCause(inner.getCause());
+            } else {
+                throw (AuthException) new AuthException("AuthConfigFactory error: " + inner).initCause(inner);
+            }
+        } catch (Exception e) {
+            throw (AuthException) new AuthException("AuthConfigFactory error: " + e).initCause(e);
+        }
+    }
+
+}

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ConfigProviderImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java?rev=1098801&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java (added)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java Mon May  2 21:43:18 2011
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+
+
+package org.apache.geronimo.components.jaspi.impl;
+
+import java.util.Map;
+
+import javax.security.auth.Subject;
+import javax.security.auth.message.AuthException;
+import javax.security.auth.message.MessageInfo;
+import javax.security.auth.message.config.ServerAuthConfig;
+import javax.security.auth.message.config.ServerAuthContext;
+import org.apache.geronimo.components.jaspi.model.ServerAuthConfigType;
+
+/**
+* @version $Rev:$ $Date:$
+*/
+public class ServerAuthConfigImpl implements ServerAuthConfig {
+
+    private final ServerAuthConfigType serverAuthConfigType;
+    private final Map<String, ServerAuthContext> serverAuthContextMap;
+
+    public ServerAuthConfigImpl(ServerAuthConfigType serverAuthConfigType, Map<String, ServerAuthContext> serverAuthContextMap) {
+        this.serverAuthConfigType = serverAuthConfigType;
+        this.serverAuthContextMap = serverAuthContextMap;
+    }
+
+    public ServerAuthContext getAuthContext(String authContextID, Subject serverSubject, Map properties) throws AuthException {
+        return serverAuthContextMap.get(authContextID);
+    }
+
+    public String getAppContext() {
+        return serverAuthConfigType.getAppContext();
+    }
+
+    public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException {
+        return serverAuthConfigType.getAuthContextID(messageInfo);
+    }
+
+    public String getMessageLayer() {
+        return serverAuthConfigType.getMessageLayer();
+    }
+
+    public boolean isProtected() {
+        return serverAuthConfigType.isProtected();
+    }
+
+    public void refresh() throws SecurityException {
+    }
+}

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthConfigImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java?rev=1098801&view=auto
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java (added)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java Mon May  2 21:43:18 2011
@@ -0,0 +1,81 @@
+/*
+ * 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.
+ */
+
+
+package org.apache.geronimo.components.jaspi.impl;
+
+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.config.ServerAuthContext;
+import javax.security.auth.message.module.ServerAuthModule;
+
+/**
+* @version $Rev:$ $Date:$
+*/
+public class ServerAuthContextImpl implements ServerAuthContext {
+
+    private final List<ServerAuthModule> serverAuthModules;
+
+    public ServerAuthContextImpl(List<ServerAuthModule> serverAuthModules) {
+        this.serverAuthModules = serverAuthModules;
+    }
+
+    public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException {
+        for (ServerAuthModule serverAuthModule : serverAuthModules) {
+            serverAuthModule.cleanSubject(messageInfo, subject);
+        }
+    }
+
+    public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) throws AuthException {
+        for (ServerAuthModule serverAuthModule : serverAuthModules) {
+            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 secureResponse: " + serverAuthModule);
+        }
+        return AuthStatus.SEND_SUCCESS;
+    }
+
+    public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) throws AuthException {
+        for (ServerAuthModule serverAuthModule : serverAuthModules) {
+            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 validateRequest: " + serverAuthModule);
+        }
+        return AuthStatus.SUCCESS;
+    }
+
+}

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/impl/ServerAuthContextImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 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=1098801&r1=1098800&r2=1098801&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/AuthModuleType.java (original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/AuthModuleType.java Mon May  2 21:43:18 2011
@@ -69,6 +69,7 @@ import org.apache.geronimo.osgi.locator.
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "authModuleType", propOrder = {
     "className",
+    "classLoaderName",
     "requestPolicy",
     "responsePolicy",
     "options"
@@ -190,37 +191,4 @@ public class AuthModuleType<T>
         this.classLoaderName = classLoaderName;
     }
 
-    public T newAuthModule(final CallbackHandler callbackHandler) throws AuthException {
-        T authModule;
-        try {
-            authModule = java.security.AccessController
-            .doPrivileged(new PrivilegedExceptionAction<T>() {
-                public T run() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, AuthException {
-                    Class<? extends T> cl = (Class<? extends T>) ProviderLocator.loadClass(className, getClass(), Thread.currentThread().getContextClassLoader());
-                    Constructor<? extends T> cnst = cl.getConstructor();
-                    T authModule = cnst.newInstance();
-                    Method m = cl.getMethod("initialize", MessagePolicy.class, MessagePolicy.class, CallbackHandler.class, Map.class);
-                    MessagePolicy reqPolicy = requestPolicy == null? null:requestPolicy.newMessagePolicy();
-                    MessagePolicy respPolicy = responsePolicy == null? null: responsePolicy.newMessagePolicy();
-                    m.invoke(authModule, reqPolicy, respPolicy, callbackHandler, options);
-                    return authModule;
-                }
-            });
-        } catch (PrivilegedActionException e) {
-            Exception inner = e.getException();
-            if (inner instanceof InstantiationException) {
-                throw (AuthException) new AuthException("AuthConfigFactory error:"
-                                + inner.getCause().getMessage()).initCause(inner.getCause());
-            } else {
-                throw (AuthException) new AuthException("AuthConfigFactory error: " + inner).initCause(inner);
-            }
-        } catch (Exception e) {
-            throw (AuthException) new AuthException("AuthConfigFactory error: " + e).initCause(e);
-        }
-
-
-
-        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=1098801&r1=1098800&r2=1098801&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 Mon May  2 21:43:18 2011
@@ -25,11 +25,12 @@
 package org.apache.geronimo.components.jaspi.model;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
-import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.message.AuthException;
 import javax.security.auth.message.MessageInfo;
@@ -38,8 +39,9 @@ import javax.security.auth.message.confi
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.apache.geronimo.components.jaspi.impl.ClientAuthConfigImpl;
 
 
 /**
@@ -64,8 +66,9 @@ import javax.xml.bind.annotation.adapter
  * </pre>
  * 
  * 
- * @version $Rev$ $Date$
+ * @version $Rev: 939768 $ $Date: 2010-04-30 11:26:46 -0700 (Fri, 30 Apr 2010) $
  */
+@XmlRootElement(name = "clientAuthConfig", namespace = "http://geronimo.apache.org/xml/ns/geronimo-jaspi")
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "clientAuthConfigType", propOrder = {
     "messageLayer",
@@ -85,8 +88,8 @@ public class ClientAuthConfigType
     @XmlElement(name = "protected")
     protected boolean _protected;
     //TODO go back to a map
-    @XmlJavaTypeAdapter(KeyedObjectMapAdapter.class)
-    protected Map<String, ClientAuthContextType> clientAuthContext;
+//    @XmlJavaTypeAdapter(KeyedObjectMapAdapter.class)
+    protected List<ClientAuthContextType> clientAuthContext;
 
 
     public ClientAuthConfigType() {
@@ -96,7 +99,7 @@ public class ClientAuthConfigType
         this.messageLayer = clientAuthContextType.getMessageLayer();
         this.appContext = clientAuthContextType.getAppContext();
         this.authenticationContextID = clientAuthContextType.getAuthenticationContextID();
-        this.clientAuthContext = Collections.singletonMap(clientAuthContextType.getKey(), clientAuthContextType);
+        this.clientAuthContext = Collections.singletonList(clientAuthContextType);
         this._protected = _protected;
     }
 
@@ -216,11 +219,11 @@ public class ClientAuthConfigType
      *
      * @return map of id to client auth context
      */
-    public Map<String, ClientAuthContextType> getClientAuthContext() {
+    public List<ClientAuthContextType> getClientAuthContext() {
         if (clientAuthContext == null) {
-            clientAuthContext = new HashMap<String, ClientAuthContextType>();
+            clientAuthContext = new ArrayList<ClientAuthContextType>();
         }
-        return this.clientAuthContext;
+        return clientAuthContext;
     }
 
 
@@ -229,7 +232,7 @@ public class ClientAuthConfigType
         if (authenticationContextID != null) {
             return authenticationContextID;
         }
-        for (ClientAuthContextType clientAuthContextType: clientAuthContext.values()) {
+        for (ClientAuthContextType clientAuthContextType: clientAuthContext) {
             String authContextID = clientAuthContextType.getAuthenticationContextID(messageInfo);
             if (authContextID != null) {
                 return authContextID;
@@ -242,61 +245,4 @@ public class ClientAuthConfigType
         return ConfigProviderType.getRegistrationKey(messageLayer, appContext);
     }
 
-    public void initialize(CallbackHandler callbackHandler) throws AuthException {
-    }
-
-    public boolean isPersistent() {
-        return true;
-    }
-
-    public ClientAuthConfig newClientAuthConfig(String messageLayer, String appContext, CallbackHandler callbackHandler) throws AuthException {
-        Map<String, ClientAuthContext> authContextMap = new HashMap<String, ClientAuthContext>();
-        for (ClientAuthContextType clientAuthContextType: getClientAuthContext().values()) {
-            if (clientAuthContextType.match(messageLayer, appContext)) {
-                ClientAuthContext clientAuthContext = clientAuthContextType.newClientAuthContext(callbackHandler);
-                String authContextID = clientAuthContextType.getAuthenticationContextID();
-                if (authContextID == null) {
-                    authContextID = getAuthenticationContextID();
-                }
-                if (!authContextMap.containsKey(authContextID)) {
-                    authContextMap.put(authContextID,  clientAuthContext);
-                }
-            }
-        }
-        return new ClientAuthConfigImpl(this, authContextMap);
-    }
-
-    public static class ClientAuthConfigImpl implements ClientAuthConfig {
-
-        private final ClientAuthConfigType clientAuthConfigType;
-        private final Map<String, ClientAuthContext> clientAuthContextMap;
-
-        public ClientAuthConfigImpl(ClientAuthConfigType clientAuthConfigType, Map<String, ClientAuthContext> clientAuthContextMap) {
-            this.clientAuthConfigType = clientAuthConfigType;
-            this.clientAuthContextMap = clientAuthContextMap;
-        }
-
-        public ClientAuthContext getAuthContext(String authContextID, Subject clientSubject, Map properties) throws AuthException {
-            return clientAuthContextMap.get(authContextID);
-        }
-
-        public String getAppContext() {
-            return clientAuthConfigType.getAppContext();
-        }
-
-        public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException {
-            return clientAuthConfigType.getAuthContextID(messageInfo);
-        }
-
-        public String getMessageLayer() {
-            return clientAuthConfigType.getMessageLayer();
-        }
-
-        public boolean isProtected() {
-            return clientAuthConfigType.isProtected();
-        }
-
-        public void refresh() throws SecurityException {
-        }
-    }
 }

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=1098801&r1=1098800&r2=1098801&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 Mon May  2 21:43:18 2011
@@ -29,17 +29,17 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import javax.security.auth.Subject;
 import javax.security.auth.callback.CallbackHandler;
 import javax.security.auth.message.AuthException;
-import javax.security.auth.message.AuthStatus;
 import javax.security.auth.message.MessageInfo;
 import javax.security.auth.message.config.ClientAuthContext;
 import javax.security.auth.message.module.ClientAuthModule;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
+import org.apache.geronimo.components.jaspi.impl.ClientAuthContextImpl;
 
 
 /**
@@ -62,8 +62,9 @@ import javax.xml.bind.annotation.XmlType
  * &lt;/complexType>
  * </pre>
  *
- * @version $Rev$ $Date$
+ * @version $Rev: 939768 $ $Date: 2010-04-30 11:26:46 -0700 (Fri, 30 Apr 2010) $
  */
+@XmlRootElement(name = "clientAuthContext", namespace = "http://geronimo.apache.org/xml/ns/geronimo-jaspi")
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "clientAuthContextType", propOrder = {
         "messageLayer",
@@ -72,7 +73,7 @@ import javax.xml.bind.annotation.XmlType
         "clientAuthModule"
         })
 public class ClientAuthContextType
-        implements Serializable, KeyedObject {
+        implements Serializable {
 
     private final static long serialVersionUID = 12343L;
     protected String messageLayer;
@@ -186,83 +187,4 @@ public class ClientAuthContextType
     }
 
 
-    public String getKey() {
-        return ConfigProviderType.getRegistrationKey(messageLayer, appContext);
-    }
-
-    public void initialize(CallbackHandler callbackHandler) throws AuthException {
-    }
-
-    public boolean isPersistent() {
-        return true;
-    }
-
-    public ClientAuthContext newClientAuthContext(CallbackHandler callbackHandler) throws AuthException {
-        List<ClientAuthModule> clientAuthModules = new ArrayList<ClientAuthModule>();
-        for (AuthModuleType<ClientAuthModule> clientAuthModuleType: clientAuthModule) {
-            ClientAuthModule instance = clientAuthModuleType.newAuthModule(callbackHandler);
-            clientAuthModules.add(instance);
-        }
-        return new ClientAuthContextImpl(clientAuthModules);
-    }
-
-    public boolean match(String messageLayer, String appContext) {
-        if (messageLayer == null) throw new NullPointerException("messageLayer");
-        if (appContext == null) throw new NullPointerException("appContext");
-        if (messageLayer.equals(this.messageLayer)) {
-            return appContext.equals(this.appContext) || this.appContext == null;
-        }
-        if (this.messageLayer == null) {
-            return appContext.equals(this.appContext) || this.appContext == null;
-        }
-        return false;
-    }
-
-    public static class ClientAuthContextImpl implements ClientAuthContext {
-
-        private final List<ClientAuthModule> clientAuthModules;
-
-        public ClientAuthContextImpl(List<ClientAuthModule> clientAuthModules) {
-            this.clientAuthModules = clientAuthModules;
-        }
-
-        public void cleanSubject(MessageInfo messageInfo, Subject subject) throws AuthException {
-            for (ClientAuthModule clientAuthModule : clientAuthModules) {
-                clientAuthModule.cleanSubject(messageInfo, subject);
-            }
-        }
-
-        public AuthStatus secureRequest(MessageInfo messageInfo, Subject clientSubject) throws AuthException {
-            for (ClientAuthModule clientAuthModule : clientAuthModules) {
-                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 (ClientAuthModule clientAuthModule : clientAuthModules) {
-                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/ConfigProviderType.java
URL: http://svn.apache.org/viewvc/geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ConfigProviderType.java?rev=1098801&r1=1098800&r2=1098801&view=diff
==============================================================================
--- geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ConfigProviderType.java (original)
+++ geronimo/components/jaspi/trunk/geronimo-jaspi/src/main/java/org/apache/geronimo/components/jaspi/model/ConfigProviderType.java Mon May  2 21:43:18 2011
@@ -35,18 +35,17 @@ import java.util.List;
 import java.util.Map;
 
 import javax.security.auth.callback.CallbackHandler;
-import javax.security.auth.message.AuthException;
 import javax.security.auth.message.config.AuthConfigFactory;
 import javax.security.auth.message.config.AuthConfigProvider;
-import javax.security.auth.message.config.ClientAuthConfig;
 import javax.security.auth.message.config.RegistrationListener;
-import javax.security.auth.message.config.ServerAuthConfig;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.apache.geronimo.components.jaspi.impl.ConfigProviderImpl;
 import org.apache.geronimo.osgi.locator.ProviderLocator;
 
 
@@ -83,6 +82,7 @@ import org.apache.geronimo.osgi.locator.
  * 
  * 
  */
+@XmlRootElement(name = "configProvider", namespace = "http://geronimo.apache.org/xml/ns/geronimo-jaspi")
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "configProviderType", propOrder = {
     "messageLayer",
@@ -96,7 +96,7 @@ import org.apache.geronimo.osgi.locator.
     "classLoaderName"
 })
 public class ConfigProviderType
-    implements AuthConfigFactory.RegistrationContext, Serializable, KeyedObject
+    implements Serializable
 {
 
     private final static long serialVersionUID = 12343L;
@@ -108,20 +108,11 @@ public class ConfigProviderType
     @XmlElement(required = true)
     @XmlJavaTypeAdapter(StringMapAdapter.class)
     protected Map<String, String> properties;
-    @XmlJavaTypeAdapter(KeyedObjectMapAdapter.class)
-    private Map<String, ClientAuthConfigType> clientAuthConfig;
-    @XmlJavaTypeAdapter(KeyedObjectMapAdapter.class)
-    private Map<String, ServerAuthConfigType> serverAuthConfig;
+    private List<ClientAuthConfigType> clientAuthConfig;
+    private List<ServerAuthConfigType> serverAuthConfig;
     protected Boolean persistent = Boolean.FALSE;
     protected String classLoaderName;
 
-    @XmlTransient
-    private AuthConfigFactory authConfigFactory;
-    @XmlTransient
-    private final List<RegistrationListener> listeners = new ArrayList<RegistrationListener>();
-    @XmlTransient
-    private AuthConfigProvider provider;
-
 
     public ConfigProviderType() {
     }
@@ -130,7 +121,6 @@ public class ConfigProviderType
         this.messageLayer = messageLayer;
         this.appContext = appContext;
         this.persistent = persistent;
-        this.authConfigFactory = authConfigFactory;
     }
 
     /**
@@ -275,11 +265,11 @@ public class ConfigProviderType
      * 
      * @return map of id to client auth config
      */
-    public Map<String, ClientAuthConfigType> getClientAuthConfig() {
+    public List<ClientAuthConfigType> getClientAuthConfig() {
         if (clientAuthConfig == null) {
-            clientAuthConfig = new HashMap<String, ClientAuthConfigType>();
+            clientAuthConfig = new ArrayList<ClientAuthConfigType>();
         }
-        return this.clientAuthConfig;
+        return clientAuthConfig;
     }
 
     /**
@@ -304,11 +294,11 @@ public class ConfigProviderType
      * 
      * @return map of id to server auth config
      */
-    public Map<String, ServerAuthConfigType> getServerAuthConfig() {
+    public List<ServerAuthConfigType> getServerAuthConfig() {
         if (serverAuthConfig == null) {
-            serverAuthConfig = new HashMap<String, ServerAuthConfigType>();
+            serverAuthConfig = new ArrayList<ServerAuthConfigType>();
         }
-        return this.serverAuthConfig;
+        return serverAuthConfig;
     }
 
     /**
@@ -335,18 +325,6 @@ public class ConfigProviderType
         this.persistent = value;
     }
 
-    public List<RegistrationListener> getListeners() {
-        return listeners;
-    }
-
-    public AuthConfigProvider getProvider() {
-        return provider;
-    }
-
-    public void setProvider(AuthConfigProvider provider) {
-        this.provider = provider;
-    }
-
     public String getClassLoaderName() {
         return classLoaderName;
     }
@@ -355,33 +333,6 @@ public class ConfigProviderType
         this.classLoaderName = classLoaderName;
     }
 
-    public void initialize(CallbackHandler callbackHandler) {
-        if (className == null) {
-            provider = new ConfigProviderImpl(getClientAuthConfig(), getServerAuthConfig());
-        } else {
-            try {
-                provider = java.security.AccessController
-                .doPrivileged(new PrivilegedExceptionAction<AuthConfigProvider>() {
-                    public AuthConfigProvider run() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
-                        Class<? extends AuthConfigProvider> cl = ProviderLocator.loadClass(className, getClass(), Thread.currentThread().getContextClassLoader()).asSubclass(AuthConfigProvider.class);
-                        Constructor<? extends AuthConfigProvider> cnst = cl.getConstructor(Map.class, AuthConfigFactory.class);
-                        return cnst.newInstance(properties, authConfigFactory);
-                    }
-                });
-            } catch (PrivilegedActionException e) {
-                Exception inner = e.getException();
-                if (inner instanceof InstantiationException) {
-                    throw new SecurityException("AuthConfigFactory error:"
-                                    + inner.getCause().getMessage(), inner.getCause());
-                } else {
-                    throw new SecurityException("AuthConfigFactory error: " + inner, inner);
-                }
-            } catch (Exception e) {
-                throw new SecurityException("AuthConfigFactory error: " + e, e);
-            }
-        }
-    }
-
     public static String getRegistrationKey(String layer, String appContext) {
         return layer + "/" + appContext;
     }
@@ -390,75 +341,4 @@ public class ConfigProviderType
         return getRegistrationKey(getMessageLayer(), getAppContext());
     }
 
-    public static class ConfigProviderImpl implements AuthConfigProvider {
-
-        private final Map<String, ClientAuthConfigType> clientConfigTypeMap;
-        private final Map<String, ServerAuthConfigType> serverAuthConfigMap;
-
-        public ConfigProviderImpl(Map<String, ClientAuthConfigType> clientConfigTypeMap, Map<String, ServerAuthConfigType> serverAuthConfigMap) {
-            this.clientConfigTypeMap = clientConfigTypeMap;
-            this.serverAuthConfigMap = serverAuthConfigMap;
-        }
-
-        /**
-         * spec required constructor
-         * @param properties useless properties map
-         * @param factory useless factory
-         */
-        public ConfigProviderImpl(Map<String, String> properties, AuthConfigFactory factory) {
-            throw new RuntimeException("don't call this");
-        }
-
-        public ClientAuthConfig getClientAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException, SecurityException {
-            if (layer == null) {
-                throw new NullPointerException("messageLayer");
-            }
-            if (appContext == null) {
-                throw new NullPointerException("appContext");
-            }
-            ClientAuthConfigType ctx = clientConfigTypeMap.get(getRegistrationKey(layer, appContext));
-            if (ctx == null) {
-                ctx = clientConfigTypeMap.get(getRegistrationKey(null, appContext));
-            }
-            if (ctx == null) {
-                ctx = clientConfigTypeMap.get(getRegistrationKey(layer, null));
-            }
-            if (ctx == null) {
-                ctx = clientConfigTypeMap.get(getRegistrationKey(null, null));
-            }
-            if (ctx != null) {
-                
-                return ctx.newClientAuthConfig(layer, appContext, handler);
-            }
-            throw new AuthException("No suitable ClientAuthConfig");
-        }
-
-        public ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException, SecurityException {
-            if (layer == null) {
-                throw new NullPointerException("messageLayer");
-            }
-            if (appContext == null) {
-                throw new NullPointerException("appContext");
-            }
-            ServerAuthConfigType ctx = serverAuthConfigMap.get(getRegistrationKey(layer, appContext));
-            if (ctx == null) {
-                ctx = serverAuthConfigMap.get(getRegistrationKey(null, appContext));
-            }
-            if (ctx == null) {
-                ctx = serverAuthConfigMap.get(getRegistrationKey(layer, null));
-            }
-            if (ctx == null) {
-                ctx = serverAuthConfigMap.get(getRegistrationKey(null, null));
-            }
-            if (ctx != null) {
-
-                return ctx.newServerAuthConfig(layer, appContext, handler);
-            }
-            throw new AuthException("No suitable ServerAuthConfig");
-        }
-
-        public void refresh() throws SecurityException {
-        }
-    }
-
 }