[java-identity-provider] 03/03: IDP-1882 idp.attribute.resolver.LDAP.connectionStrategy ignored in attribute-resolver.xml

Rod Widdowson rdw at steadingsoftware.com
Fri Dec 10 10:48:38 UTC 2021


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch main
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=8439bf6fbcec65164107ed5c5f4beb3ca60c5bbf

commit 8439bf6fbcec65164107ed5c5f4beb3ca60c5bbf
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Thu Dec 9 19:47:39 2021 +0000

    IDP-1882 idp.attribute.resolver.LDAP.connectionStrategy ignored in attribute-resolver.xml
    
    https://shibboleth.atlassian.net/browse/IDP-1882
    
    Delegate the handling of the connection stragey to a factory method.
    This gets called post property replacement.
---
 .../dc/ldap/impl/LDAPDataConnectorParser.java      | 61 +++++++++++++---------
 1 file changed, 37 insertions(+), 24 deletions(-)

diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
index 7965beb61..691e4af1d 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/ldap/impl/LDAPDataConnectorParser.java
@@ -28,6 +28,7 @@ import javax.xml.namespace.QName;
 import org.ldaptive.ActivePassiveConnectionStrategy;
 import org.ldaptive.BindConnectionInitializer;
 import org.ldaptive.ConnectionConfig;
+import org.ldaptive.ConnectionStrategy;
 import org.ldaptive.Credential;
 import org.ldaptive.DefaultConnectionFactory;
 import org.ldaptive.RandomConnectionStrategy;
@@ -244,7 +245,7 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
          * @param parserContext bean definition parsing context
          * @return connection config bean definition
          */
-        // CheckStyle: CyclomaticComplexity|MethodLength OFF
+        // CheckStyle: CyclomaticComplexity|MethodLength OFF*/
         @Nonnull public BeanDefinition createConnectionConfig(@Nonnull final ParserContext parserContext) {
             final String url = AttributeSupport.getAttributeValue(configElement, new QName("ldapURL"));
             final String useStartTLS = AttributeSupport.getAttributeValue(configElement, new QName("useStartTLS"));
@@ -328,30 +329,11 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
             }
             final String connectionStrategy = AttributeSupport.getAttributeValue(
                 configElement, new QName("connectionStrategy"));
-            if (connectionStrategy == null) {
-                connectionConfig.addPropertyValue("connectionStrategy", new ActivePassiveConnectionStrategy());
-            } else {
-                switch (connectionStrategy) {
-                case "ROUND_ROBIN":
-                    connectionConfig.addPropertyValue("connectionStrategy", new RoundRobinConnectionStrategy());
-                    break;
+            final BeanDefinitionBuilder connectionStrategyBuilder =
+                    BeanDefinitionBuilder.rootBeanDefinition(V2Parser.class, "buildConnectionStrategy");
+            connectionStrategyBuilder.addConstructorArgValue(connectionStrategy);
 
-                case "RANDOM":
-                    connectionConfig.addPropertyValue("connectionStrategy", new RandomConnectionStrategy());
-                    break;
-
-                case "DEFAULT":
-                    // V4 Deprecation
-                    DeprecationSupport.warn(ObjectType.CONFIGURATION, "connectionStrategy=DEFAULT", "LDAP Connector",
-                            "ACTIVE_PASSIVE");
-                    connectionConfig.addPropertyValue("connectionStrategy", new ActivePassiveConnectionStrategy());
-                    break;
-                    
-                default:
-                    connectionConfig.addPropertyValue("connectionStrategy", new ActivePassiveConnectionStrategy());
-                    break;
-                }
-            }
+            connectionConfig.addPropertyValue("connectionStrategy", connectionStrategyBuilder.getBeanDefinition());
 
             return connectionConfig.getBeanDefinition();
         }
@@ -963,5 +945,36 @@ public class LDAPDataConnectorParser extends AbstractDataConnectorParser {
             config.setMechanism(Mechanism.valueOf(mechanism));
             return config;
         }
+
+        /** Returns an appropriate {@link ConnectionStrategy}.
+         * @param connectionStrategy the provided string (with properties stripped)
+         * @return the appropriate {@link ConnectionStrategy}.
+        */
+        @Nonnull public static ConnectionStrategy buildConnectionStrategy(@Nonnull final String connectionStrategy) {
+
+            if (connectionStrategy == null) {
+                return new ActivePassiveConnectionStrategy();
+            }
+            switch (connectionStrategy) {
+                case "ROUND_ROBIN":
+                     return new RoundRobinConnectionStrategy();
+
+                case "RANDOM":
+                    return new RandomConnectionStrategy();
+
+                case "ACTIVE_PASSIVE":
+                    return new ActivePassiveConnectionStrategy();
+
+                case "DEFAULT":
+                    // V4 Deprecation
+                    DeprecationSupport.warn(ObjectType.CONFIGURATION, "connectionStrategy=DEFAULT", "LDAP Connector",
+                            "ACTIVE_PASSIVE");
+                    return new ActivePassiveConnectionStrategy();
+
+                default:
+                    LOG.warn("Unexpected connectionStrategy {}", connectionStrategy);
+                    return new ActivePassiveConnectionStrategy();
+            }
+        }
     }
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list