You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2019/10/24 09:45:54 UTC

[syncope] branch master updated (def38ca -> 1a99144)

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git.


    from def38ca  Upgrading Elasticsearch
     new f3a3367  Upgrading Quartz
     new 1a99144  [SYNCOPE-957] Reverting changes to Actions classes, as transactional support for Functions is troublesome

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../console/implementations/MyLogicActions.groovy  | 53 +++++-------------
 .../console/implementations/MyPullActions.groovy   | 11 ++--
 .../console/implementations/MyPushActions.groovy   |  2 +-
 .../syncope/core/logic/AbstractAnyLogic.java       | 44 +++++++--------
 .../core/provisioning/api/LogicActions.java        | 25 +++++----
 .../provisioning/api/pushpull/PullActions.java     |  8 +--
 .../java/pushpull/AbstractPullResultHandler.java   |  9 ++--
 .../pushpull/DefaultRealmPullResultHandler.java    |  9 ++--
 .../syncope/core/logic/oidc/OIDCUserManager.java   | 29 +++++-----
 .../core/provisioning/api/OIDCProviderActions.java | 17 +++---
 .../syncope/core/logic/saml2/SAML2UserManager.java | 29 +++++-----
 .../core/provisioning/api/SAML2IdPActions.java     | 17 +++---
 .../test/resources/DoubleValueLogicActions.groovy  | 63 ++++++++++------------
 pom.xml                                            |  2 +-
 14 files changed, 127 insertions(+), 191 deletions(-)


[syncope] 01/02: Upgrading Quartz

Posted by il...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit f3a3367c1748186b3046d684a795f9169a18ce88
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Oct 24 08:10:28 2019 +0200

    Upgrading Quartz
---
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index b7de9ad..2d3b3bc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -414,7 +414,7 @@ under the License.
 
     <jasypt.version>1.9.3</jasypt.version>
 
-    <quartz.version>2.3.1</quartz.version>
+    <quartz.version>2.3.2</quartz.version>
 
     <cocoon.version>3.0.0-alpha-3</cocoon.version>
 


[syncope] 02/02: [SYNCOPE-957] Reverting changes to Actions classes, as transactional support for Functions is troublesome

Posted by il...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit 1a99144a90a7d11ff520cf7f9ee1004feda976f4
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Oct 24 10:34:57 2019 +0200

    [SYNCOPE-957] Reverting changes to Actions classes, as transactional support for Functions is troublesome
---
 .../console/implementations/MyLogicActions.groovy  | 53 +++++-------------
 .../console/implementations/MyPullActions.groovy   | 11 ++--
 .../console/implementations/MyPushActions.groovy   |  2 +-
 .../syncope/core/logic/AbstractAnyLogic.java       | 44 +++++++--------
 .../core/provisioning/api/LogicActions.java        | 25 +++++----
 .../provisioning/api/pushpull/PullActions.java     |  8 +--
 .../java/pushpull/AbstractPullResultHandler.java   |  9 ++--
 .../pushpull/DefaultRealmPullResultHandler.java    |  9 ++--
 .../syncope/core/logic/oidc/OIDCUserManager.java   | 29 +++++-----
 .../core/provisioning/api/OIDCProviderActions.java | 17 +++---
 .../syncope/core/logic/saml2/SAML2UserManager.java | 29 +++++-----
 .../core/provisioning/api/SAML2IdPActions.java     | 17 +++---
 .../test/resources/DoubleValueLogicActions.groovy  | 63 ++++++++++------------
 13 files changed, 126 insertions(+), 190 deletions(-)

diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyLogicActions.groovy b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyLogicActions.groovy
index 8cef253..abdb3a4 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyLogicActions.groovy
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyLogicActions.groovy
@@ -17,68 +17,41 @@
  * under the License.
  */
 import groovy.transform.CompileStatic
-import java.util.List
-import java.util.function.Function
 import org.apache.syncope.common.lib.request.AnyCR;
 import org.apache.syncope.common.lib.request.AnyUR;
-import org.apache.syncope.common.lib.to.AnyTO
-import org.apache.syncope.common.lib.to.PropagationStatus
+import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.core.provisioning.api.LogicActions
 
 @CompileStatic
 class MyLogicActions implements LogicActions {
   
   @Override
-  <C extends AnyCR> Function<C, C> beforeCreate() {
-    Function function = { 
-      C input ->
-      return input;        
-    }
-    return function;
+  <C extends AnyCR> C beforeCreate(C input) {
+    return input;
   }
 
   @Override
-  <A extends AnyTO> Function<A, A> afterCreate(List<PropagationStatus> statuses) {
-    Function function = { 
-      A input ->
-      return input;        
-    }
-    return function;
+  <A extends AnyTO> A afterCreate(A input) {
+    return input;
   }
 
   @Override
-  <U extends AnyUR> Function<U, U> beforeUpdate() {
-    Function function = { 
-      U input ->
-      return input;        
-    }
-    return function;
+  <U extends AnyUR> U beforeUpdate(U input) {
+    return input;
   }
 
   @Override
-  <A extends AnyTO> Function<A, A> afterUpdate(List<PropagationStatus> statuses) {
-    Function function = { 
-      A input ->
-      return input;        
-    }
-    return function;
+  <A extends AnyTO> A afterUpdate(A input) {
+    return input;
   }
 
   @Override
-  <A extends AnyTO> Function<A, A> beforeDelete() {
-    Function function = { 
-      A input ->
-      return input;        
-    }
-    return function;
+  <A extends AnyTO> A beforeDelete(A input) {
+    return input;
   }
 
   @Override
-  <A extends AnyTO> Function<A, A> afterDelete(List<PropagationStatus> statuses) {
-    Function function = { 
-      A input ->
-      return input;        
-    }
-    return function;
+  <A extends AnyTO> A afterDelete(A input) {
+    return input;
   }
 }
\ No newline at end of file
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy
index 7a8b765..ce039eb 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPullActions.groovy
@@ -29,18 +29,13 @@ import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport
 import org.apache.syncope.core.provisioning.api.pushpull.PullActions
 import org.identityconnectors.framework.common.objects.SyncDelta
 import org.quartz.JobExecutionException
-import java.util.function.Function
 
 @CompileStatic
 class MyPullActions implements PullActions {
   
   @Override
-  Function<SyncDelta, SyncDelta> preprocess(ProvisioningProfile<?, ?> profile) {
-    Function function = { 
-      SyncDelta delta ->
-      return delta;        
-    }
-    return function;
+  SyncDelta preprocess(ProvisioningProfile profile, SyncDelta delta) {
+    return delta;
   }
   
   @Override
@@ -142,4 +137,4 @@ class MyPullActions implements PullActions {
 
     return null;
   }
-}
+}
\ No newline at end of file
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
index dad4206..0828f03 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPushActions.groovy
@@ -109,4 +109,4 @@ class MyPushActions implements PushActions {
 
     // do nothing
   }
-}
+}
\ No newline at end of file
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
index 365801d..3b045ff 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.function.Function;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.request.AnyCR;
@@ -114,11 +113,9 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, C extends AnyCR, U exte
         templateUtils.apply(anyCR, realm.getTemplate(anyType));
 
         List<LogicActions> actions = getActions(realm);
-
-        anyCR = (C) actions.stream().
-                map(action -> action.beforeCreate()).
-                reduce(Function.identity(), Function::andThen).
-                apply(anyCR);
+        for (LogicActions action : actions) {
+            anyCR = action.beforeCreate(anyCR);
+        }
 
         LOG.debug("Input: {}\nOutput: {}\n", input, anyCR);
 
@@ -137,10 +134,9 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, C extends AnyCR, U exte
         U update = input;
 
         List<LogicActions> actions = getActions(realm);
-        update = (U) actions.stream().
-                map(action -> action.beforeUpdate()).
-                reduce(Function.identity(), Function::andThen).
-                apply(update);
+        for (LogicActions action : actions) {
+            update = action.beforeUpdate(update);
+        }
 
         LOG.debug("Input: {}\nOutput: {}\n", input, update);
 
@@ -159,10 +155,9 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, C extends AnyCR, U exte
         TO any = input;
 
         List<LogicActions> actions = getActions(realm);
-        any = (TO) actions.stream().
-                map(action -> action.beforeDelete()).
-                reduce(Function.identity(), Function::andThen).
-                apply(any);
+        for (LogicActions action : actions) {
+            any = action.beforeDelete(any);
+        }
 
         LOG.debug("Input: {}\nOutput: {}\n", input, any);
 
@@ -175,10 +170,9 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, C extends AnyCR, U exte
 
         TO any = input;
 
-        any = (TO) actions.stream().
-                map(action -> action.afterCreate(statuses)).
-                reduce(Function.identity(), Function::andThen).
-                apply(any);
+        for (LogicActions action : actions) {
+            any = action.afterCreate(any, statuses);
+        }
 
         ProvisioningResult<TO> result = new ProvisioningResult<>();
         result.setEntity(any);
@@ -207,10 +201,9 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, C extends AnyCR, U exte
 
         TO any = input;
 
-        any = (TO) actions.stream().
-                map(action -> action.afterUpdate(statuses)).
-                reduce(Function.identity(), Function::andThen).
-                apply(any);
+        for (LogicActions action : actions) {
+            any = action.afterUpdate(any, statuses);
+        }
 
         ProvisioningResult<TO> result = new ProvisioningResult<>();
         result.setEntity(any);
@@ -225,10 +218,9 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, C extends AnyCR, U exte
 
         TO any = input;
 
-        any = (TO) actions.stream().
-                map(action -> action.afterDelete(statuses)).
-                reduce(Function.identity(), Function::andThen).
-                apply(any);
+        for (LogicActions action : actions) {
+            any = action.afterDelete(any, statuses);
+        }
 
         ProvisioningResult<TO> result = new ProvisioningResult<>();
         result.setEntity(any);
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/LogicActions.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/LogicActions.java
index e2a2f65..5c5b766 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/LogicActions.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/LogicActions.java
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.provisioning.api;
 
 import java.util.List;
-import java.util.function.Function;
 import org.apache.syncope.common.lib.request.AnyCR;
 import org.apache.syncope.common.lib.request.AnyUR;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -30,27 +29,27 @@ import org.apache.syncope.common.lib.to.PropagationStatus;
  */
 public interface LogicActions {
 
-    default <C extends AnyCR> Function<C, C> beforeCreate() {
-        return Function.identity();
+    default <C extends AnyCR> C beforeCreate(C input) {
+        return input;
     }
 
-    default <A extends AnyTO> Function<A, A> afterCreate(List<PropagationStatus> statuses) {
-        return Function.identity();
+    default <A extends AnyTO> A afterCreate(A input, List<PropagationStatus> statuses) {
+        return input;
     }
 
-    default <U extends AnyUR> Function<U, U> beforeUpdate() {
-        return Function.identity();
+    default <U extends AnyUR> U beforeUpdate(U input) {
+        return input;
     }
 
-    default <A extends AnyTO> Function<A, A> afterUpdate(List<PropagationStatus> statuses) {
-        return Function.identity();
+    default <A extends AnyTO> A afterUpdate(A input, List<PropagationStatus> statuses) {
+        return input;
     }
 
-    default <A extends AnyTO> Function<A, A> beforeDelete() {
-        return Function.identity();
+    default <A extends AnyTO> A beforeDelete(A input) {
+        return input;
     }
 
-    default <A extends AnyTO> Function<A, A> afterDelete(List<PropagationStatus> statuses) {
-        return Function.identity();
+    default <A extends AnyTO> A afterDelete(A input, List<PropagationStatus> statuses) {
+        return input;
     }
 }
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullActions.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullActions.java
index 03690bd..a9e93ca 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullActions.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/pushpull/PullActions.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.provisioning.api.pushpull;
 
 import org.apache.syncope.common.lib.request.AnyCR;
 import org.apache.syncope.common.lib.request.AnyUR;
-import java.util.function.Function;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.LinkedAccountTO;
 import org.apache.syncope.common.lib.to.RealmTO;
@@ -38,10 +37,11 @@ public interface PullActions extends ProvisioningActions {
      * Pre-process the pull information received by the underlying connector, before any internal activity occurs.
      *
      * @param profile profile of the pull being executed.
-     * @return pull information, possibly altered
+     * @param delta retrieved pull information
+     * @return pull information, possibly altered.
      */
-    default Function<SyncDelta, SyncDelta> preprocess(ProvisioningProfile<?, ?> profile) {
-        return Function.identity();
+    default SyncDelta preprocess(ProvisioningProfile<?, ?> profile, SyncDelta delta) {
+        return delta;
     }
 
     /**
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index 7afe3a5..15ec686 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.syncope.common.lib.AnyOperations;
@@ -848,10 +847,10 @@ public abstract class AbstractPullResultHandler extends AbstractSyncopeResultHan
         LOG.debug("Process {} for {} as {}",
                 delta.getDeltaType(), delta.getUid().getUidValue(), delta.getObject().getObjectClass());
 
-        SyncDelta finalDelta = profile.getActions().stream().
-                map(action -> action.preprocess(profile)).
-                reduce(Function.identity(), Function::andThen).
-                apply(delta);
+        SyncDelta finalDelta = delta;
+        for (PullActions action : profile.getActions()) {
+            finalDelta = action.preprocess(profile, finalDelta);
+        }
 
         LOG.debug("Transformed {} for {} as {}",
                 finalDelta.getDeltaType(), finalDelta.getUid().getUidValue(), finalDelta.getObject().getObjectClass());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
index 6cdf297..1c5250d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.java.pushpull;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
-import java.util.function.Function;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -630,10 +629,10 @@ public class DefaultRealmPullResultHandler
         LOG.debug("Process {} for {} as {}",
                 delta.getDeltaType(), delta.getUid().getUidValue(), delta.getObject().getObjectClass());
 
-        SyncDelta finalDelta = profile.getActions().stream().
-                map(action -> action.preprocess(profile)).
-                reduce(Function.identity(), Function::andThen).
-                apply(delta);
+        SyncDelta finalDelta = delta;
+        for (PullActions action : profile.getActions()) {
+            finalDelta = action.preprocess(profile, finalDelta);
+        }
 
         LOG.debug("Transformed {} for {} as {}",
                 finalDelta.getDeltaType(), finalDelta.getUid().getUidValue(), finalDelta.getObject().getObjectClass());
diff --git a/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/oidc/OIDCUserManager.java b/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/oidc/OIDCUserManager.java
index ae03541..dd9c0f0 100644
--- a/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/oidc/OIDCUserManager.java
+++ b/ext/oidcclient/logic/src/main/java/org/apache/syncope/core/logic/oidc/OIDCUserManager.java
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.tuple.Pair;
@@ -242,10 +241,9 @@ public class OIDCUserManager {
         }
 
         List<OIDCProviderActions> actions = getActions(op);
-        userCR = actions.stream().
-                map(action -> action.beforeCreate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userCR);
+        for (OIDCProviderActions action : actions) {
+            userCR = action.beforeCreate(userCR, responseTO);
+        }
 
         UserTO userTO = new UserTO();
         fill(op, responseTO, userTO);
@@ -261,10 +259,9 @@ public class OIDCUserManager {
         Pair<String, List<PropagationStatus>> created = provisioningManager.create(userCR, false);
         userTO = binder.getUserTO(created.getKey());
 
-        userTO = actions.stream().
-                map(action -> action.afterCreate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userTO);
+        for (OIDCProviderActions action : actions) {
+            userTO = action.afterCreate(userTO, responseTO);
+        }
 
         return userTO.getUsername();
     }
@@ -279,18 +276,16 @@ public class OIDCUserManager {
         UserUR userUR = AnyOperations.diff(userTO, original, true);
 
         List<OIDCProviderActions> actions = getActions(op);
-        userUR = actions.stream().
-                map(action -> action.beforeUpdate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userUR);
+        for (OIDCProviderActions action : actions) {
+            userUR = action.beforeUpdate(userUR, responseTO);
+        }
 
         Pair<UserUR, List<PropagationStatus>> updated = provisioningManager.update(userUR, false);
         userTO = binder.getUserTO(updated.getLeft().getKey());
 
-        userTO = actions.stream().
-                map(action -> action.afterUpdate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userTO);
+        for (OIDCProviderActions action : actions) {
+            userTO = action.afterUpdate(userTO, responseTO);
+        }
 
         return userTO.getUsername();
     }
diff --git a/ext/oidcclient/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/OIDCProviderActions.java b/ext/oidcclient/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/OIDCProviderActions.java
index 4828fbb..6a08e70 100644
--- a/ext/oidcclient/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/OIDCProviderActions.java
+++ b/ext/oidcclient/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/OIDCProviderActions.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.api;
 
-import java.util.function.Function;
 import org.apache.syncope.common.lib.request.UserCR;
 import org.apache.syncope.common.lib.request.UserUR;
 import org.apache.syncope.common.lib.to.OIDCLoginResponseTO;
@@ -26,19 +25,19 @@ import org.apache.syncope.common.lib.to.UserTO;
 
 public interface OIDCProviderActions {
 
-    default Function<UserCR, UserCR> beforeCreate(OIDCLoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserCR beforeCreate(UserCR input, OIDCLoginResponseTO loginResponse) {
+        return input;
     }
 
-    default Function<UserTO, UserTO> afterCreate(OIDCLoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserTO afterCreate(UserTO input, OIDCLoginResponseTO loginResponse) {
+        return input;
     }
 
-    default Function<UserUR, UserUR> beforeUpdate(OIDCLoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserUR beforeUpdate(UserUR input, OIDCLoginResponseTO loginResponse) {
+        return input;
     }
 
-    default Function<UserTO, UserTO> afterUpdate(OIDCLoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserTO afterUpdate(UserTO input, OIDCLoginResponseTO loginResponse) {
+        return input;
     }
 }
diff --git a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
index 0dea98c..0a6b857 100644
--- a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
+++ b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.tuple.Pair;
@@ -260,10 +259,9 @@ public class SAML2UserManager {
         }
 
         List<SAML2IdPActions> actions = getActions(idp);
-        userCR = actions.stream().
-                map(action -> action.beforeCreate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userCR);
+        for (SAML2IdPActions action : actions) {
+            userCR = action.beforeCreate(userCR, responseTO);
+        }
 
         UserTO userTO = new UserTO();
         fill(idp.getKey(), responseTO, userTO);
@@ -279,10 +277,9 @@ public class SAML2UserManager {
         Pair<String, List<PropagationStatus>> created = provisioningManager.create(userCR, false);
         userTO = binder.getUserTO(created.getKey());
 
-        userTO = actions.stream().
-                map(action -> action.afterCreate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userTO);
+        for (SAML2IdPActions action : actions) {
+            userTO = action.afterCreate(userTO, responseTO);
+        }
 
         return userTO.getUsername();
     }
@@ -297,18 +294,16 @@ public class SAML2UserManager {
         UserUR userUR = AnyOperations.diff(userTO, original, true);
 
         List<SAML2IdPActions> actions = getActions(idp);
-        userUR = actions.stream().
-                map(action -> action.beforeUpdate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userUR);
+        for (SAML2IdPActions action : actions) {
+            userUR = action.beforeUpdate(userUR, responseTO);
+        }
 
         Pair<UserUR, List<PropagationStatus>> updated = provisioningManager.update(userUR, false);
         userTO = binder.getUserTO(updated.getLeft().getKey());
 
-        userTO = actions.stream().
-                map(action -> action.afterUpdate(responseTO)).
-                reduce(Function.identity(), Function::andThen).
-                apply(userTO);
+        for (SAML2IdPActions action : actions) {
+            userTO = action.afterUpdate(userTO, responseTO);
+        }
 
         return userTO.getUsername();
     }
diff --git a/ext/saml2sp/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/SAML2IdPActions.java b/ext/saml2sp/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/SAML2IdPActions.java
index 9948e63..dddc6dc 100644
--- a/ext/saml2sp/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/SAML2IdPActions.java
+++ b/ext/saml2sp/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/SAML2IdPActions.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.core.provisioning.api;
 
-import java.util.function.Function;
 import org.apache.syncope.common.lib.request.UserCR;
 import org.apache.syncope.common.lib.request.UserUR;
 import org.apache.syncope.common.lib.to.SAML2LoginResponseTO;
@@ -26,19 +25,19 @@ import org.apache.syncope.common.lib.to.UserTO;
 
 public interface SAML2IdPActions {
 
-    default Function<UserCR, UserCR> beforeCreate(SAML2LoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserCR beforeCreate(UserCR input, SAML2LoginResponseTO loginResponse) {
+        return input;
     }
 
-    default Function<UserTO, UserTO> afterCreate(SAML2LoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserTO afterCreate(UserTO input, SAML2LoginResponseTO loginResponse) {
+        return input;
     }
 
-    default Function<UserUR, UserUR> beforeUpdate(SAML2LoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserUR beforeUpdate(UserUR input, SAML2LoginResponseTO loginResponse) {
+        return input;
     }
 
-    default Function<UserTO, UserTO> afterUpdate(SAML2LoginResponseTO loginResponse) {
-        return Function.identity();
+    default UserTO afterUpdate(UserTO input, SAML2LoginResponseTO loginResponse) {
+        return input;
     }
 }
diff --git a/fit/core-reference/src/test/resources/DoubleValueLogicActions.groovy b/fit/core-reference/src/test/resources/DoubleValueLogicActions.groovy
index 6d19408..720eeca 100644
--- a/fit/core-reference/src/test/resources/DoubleValueLogicActions.groovy
+++ b/fit/core-reference/src/test/resources/DoubleValueLogicActions.groovy
@@ -22,7 +22,6 @@ import org.apache.syncope.common.lib.Attr
 import org.apache.syncope.common.lib.request.AnyCR
 import org.apache.syncope.common.lib.request.AnyUR
 import org.apache.syncope.common.lib.request.AttrPatch
-import java.util.function.Function
 import org.apache.syncope.core.provisioning.api.LogicActions
 
 /**
@@ -34,50 +33,42 @@ class DoubleValueLogicActions implements LogicActions {
   private static final String NAME = "makeItDouble";
 
   @Override
-  <C extends AnyCR> Function<C, C> beforeCreate() {
-    Function function = { 
-      C input ->
-      for (Attr attr : input.getPlainAttrs()) {
-        if (NAME.equals(attr.getSchema())) {
-          List<String> values = new ArrayList<String>(attr.getValues().size());
-          for (String value : attr.getValues()) {
-            try {
-              values.add(String.valueOf(2 * Long.parseLong(value)));
-            } catch (NumberFormatException e) {
-              // ignore
-            }
+  <C extends AnyCR> C beforeCreate(final C input) {
+    for (Attr attr : input.getPlainAttrs()) {
+      if (NAME.equals(attr.getSchema())) {
+        List<String> values = new ArrayList<String>(attr.getValues().size());
+        for (String value : attr.getValues()) {
+          try {
+            values.add(String.valueOf(2 * Long.parseLong(value)));
+          } catch (NumberFormatException e) {
+            // ignore
           }
-          attr.getValues().clear();
-          attr.getValues().addAll(values);
         }
+        attr.getValues().clear();
+        attr.getValues().addAll(values);
       }
-
-      return input;        
     }
-    return function;
+
+    return input;
   }
 
   @Override
-  <R extends AnyUR> Function<R, R> beforeUpdate() {
-    Function function = { 
-      R input ->
-      for (AttrPatch patch : input.getPlainAttrs()) {
-        if (NAME.equals(patch.getAttr().getSchema())) {
-          List<String> values = new ArrayList<String>(patch.getAttr().getValues().size());
-          for (String value : patch.getAttr().getValues()) {
-            try {
-              values.add(String.valueOf(2 * Long.parseLong(value)));
-            } catch (NumberFormatException e) {
-              // ignore
-            }
+  <R extends AnyUR> R beforeUpdate(final R input) {
+    for (AttrPatch patch : input.getPlainAttrs()) {
+      if (NAME.equals(patch.getAttr().getSchema())) {
+        List<String> values = new ArrayList<String>(patch.getAttr().getValues().size());
+        for (String value : patch.getAttr().getValues()) {
+          try {
+            values.add(String.valueOf(2 * Long.parseLong(value)));
+          } catch (NumberFormatException e) {
+            // ignore
           }
-          patch.getAttr().getValues().clear();
-          patch.getAttr().getValues().addAll(values);
         }
+        patch.getAttr().getValues().clear();
+        patch.getAttr().getValues().addAll(values);
       }
-
-      return input;
     }
-    return function;
+
+    return input;
   }
-}
+}
\ No newline at end of file