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 2022/06/28 05:59:03 UTC

[syncope] branch master updated: [SYNCOPE-1685] Powering up JexlUtils and JEXLItemTransformerImpl (#356)

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


The following commit(s) were added to refs/heads/master by this push:
     new 2a350f216d [SYNCOPE-1685] Powering up JexlUtils and JEXLItemTransformerImpl (#356)
2a350f216d is described below

commit 2a350f216d0a063e0d6996bda71aec1332504335
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Tue Jun 28 07:58:58 2022 +0200

    [SYNCOPE-1685] Powering up JexlUtils and JEXLItemTransformerImpl (#356)
---
 .../provisioning/api/data/ItemTransformer.java     |  6 +-
 .../core/provisioning/api/jexl/JexlUtils.java      | 13 ++-
 .../core/provisioning/api/utils/JexlUtilsTest.java |  5 +-
 .../provisioning/java/DefaultDerAttrHandler.java   |  4 +-
 .../provisioning/java/DefaultMappingManager.java   | 11 +--
 .../java/data/JEXLItemTransformerImpl.java         | 98 +++++++++++++++-------
 .../LDAPMembershipPropagationActions.java          |  2 +-
 .../provisioning/java/utils/TemplateUtils.java     | 10 +--
 .../core/reference/DateToDateItemTransformer.java  | 12 +--
 .../core/reference/DateToLongItemTransformer.java  | 24 +++---
 .../syncope/fit/core/PropagationTaskITCase.java    |  4 +-
 .../test/resources/PrefixItemTransformer.groovy    | 25 +++---
 .../wa/starter/config/WARefreshContextJob.java     |  3 -
 13 files changed, 124 insertions(+), 93 deletions(-)

diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java
index 786d8cbe5f..409cb43fe1 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ItemTransformer.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.resource.Item;
 
@@ -38,14 +38,14 @@ public interface ItemTransformer {
      * Invoked while preparing attribute values to be sent out to external resource during propagation.
      *
      * @param item mapping item
-     * @param entity entity
+     * @param any any
      * @param schemaType schema type
      * @param values original values
      * @return transformed values
      */
     default Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
             Item item,
-            Entity entity,
+            Any<?> any,
             AttrSchemaType schemaType,
             List<PlainAttrValue> values) {
 
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java
index ed8a5e5207..4692f82876 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtils.java
@@ -103,16 +103,13 @@ public final class JexlUtils {
         return result;
     }
 
-    public static String evaluate(final String expression, final JexlContext jexlContext) {
-        String result = StringUtils.EMPTY;
+    public static Object evaluate(final String expression, final JexlContext jexlContext) {
+        Object result = null;
 
         if (StringUtils.isNotBlank(expression) && jexlContext != null) {
             try {
                 JexlExpression jexlExpression = getEngine().createExpression(expression);
-                Object evaluated = jexlExpression.evaluate(jexlContext);
-                if (evaluated != null) {
-                    result = evaluated.toString();
-                }
+                result = jexlExpression.evaluate(jexlContext);
             } catch (Exception e) {
                 LOG.error("Error while evaluating JEXL expression: " + expression, e);
             }
@@ -120,7 +117,7 @@ public final class JexlUtils {
             LOG.debug("Expression not provided or invalid context");
         }
 
-        return result;
+        return result == null ? StringUtils.EMPTY : result;
     }
 
     public static void addFieldsToContext(final Object object, final JexlContext jexlContext) {
@@ -254,7 +251,7 @@ public final class JexlUtils {
         addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
         addDerAttrsToContext(any, derAttrHandler, jexlContext);
 
-        return Boolean.parseBoolean(evaluate(mandatoryCondition, jexlContext));
+        return Boolean.parseBoolean(evaluate(mandatoryCondition, jexlContext).toString());
     }
 
     /**
diff --git a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java
index e9334be44a..54b352dd8e 100644
--- a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java
+++ b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/utils/JexlUtilsTest.java
@@ -73,11 +73,10 @@ public class JexlUtilsTest extends AbstractTest {
 
     @Test
     public void evaluate() {
-        String result = StringUtils.EMPTY;
-        assertEquals(result, JexlUtils.evaluate(expression, context));
+        assertEquals(StringUtils.EMPTY, JexlUtils.evaluate(expression, context));
 
         expression = "6 * 12 + 5 / 2.6";
-        result = "73.92307692307692";
+        double result = 73.92307692307692;
         assertEquals(result, JexlUtils.evaluate(expression, context));
     }
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java
index 29717f35df..a6b4329d5c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultDerAttrHandler.java
@@ -47,7 +47,7 @@ public class DefaultDerAttrHandler implements DerAttrHandler {
             JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
             JexlUtils.addFieldsToContext(any, jexlContext);
 
-            result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext));
+            result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext).toString());
         });
 
         return result;
@@ -100,7 +100,7 @@ public class DefaultDerAttrHandler implements DerAttrHandler {
             JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(membership), jexlContext);
             JexlUtils.addFieldsToContext(any, jexlContext);
 
-            result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext));
+            result.put(schema, JexlUtils.evaluate(schema.getExpression(), jexlContext).toString());
         });
 
         return result;
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
index 1d78e338dc..27756d3e54 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
@@ -246,7 +246,7 @@ public class DefaultMappingManager implements MappingManager {
             JexlUtils.addFieldsToContext(any, jexlContext);
             JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
             JexlUtils.addDerAttrsToContext(any, derAttrHandler, jexlContext);
-            evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext);
+            evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext).toString();
         }
 
         return getName(evalConnObjectLink, connObjectKey);
@@ -274,7 +274,7 @@ public class DefaultMappingManager implements MappingManager {
         if (StringUtils.isNotBlank(connObjectLink)) {
             JexlContext jexlContext = new MapContext();
             JexlUtils.addFieldsToContext(realm, jexlContext);
-            evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext);
+            evalConnObjectLink = JexlUtils.evaluate(connObjectLink, jexlContext).toString();
         }
 
         return getName(evalConnObjectLink, connObjectKey);
@@ -849,17 +849,18 @@ public class DefaultMappingManager implements MappingManager {
 
         LOG.debug("Internal values: {}", values);
 
-        Pair<AttrSchemaType, List<PlainAttrValue>> trans = Pair.of(schemaType, values);
+        Pair<AttrSchemaType, List<PlainAttrValue>> transformed = Pair.of(schemaType, values);
         if (transform) {
             for (ItemTransformer transformer : MappingUtils.getItemTransformers(mapItem)) {
-                trans = transformer.beforePropagation(mapItem, any, trans.getLeft(), trans.getRight());
+                transformed = transformer.beforePropagation(
+                        mapItem, any, transformed.getLeft(), transformed.getRight());
             }
             LOG.debug("Transformed values: {}", values);
         } else {
             LOG.debug("No transformation occurred");
         }
 
-        return trans;
+        return transformed;
     }
 
     protected String getGroupOwnerValue(final Provision provision, final Any<?> any) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java
index 0f2dd54cdc..8e3e82af72 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/JEXLItemTransformerImpl.java
@@ -18,18 +18,19 @@
  */
 package org.apache.syncope.core.provisioning.java.data;
 
+import java.time.OffsetDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
 import org.apache.commons.jexl3.JexlContext;
 import org.apache.commons.jexl3.MapContext;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.EntityTO;
-import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.core.persistence.api.entity.Any;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.resource.Item;
 import org.apache.syncope.core.provisioning.api.DerAttrHandler;
@@ -42,6 +43,9 @@ public class JEXLItemTransformerImpl implements JEXLItemTransformer {
     @Autowired
     private DerAttrHandler derAttrHandler;
 
+    @Autowired
+    private AnyUtilsFactory anyUtilsFactory;
+
     private String propagationJEXL;
 
     private String pullJEXL;
@@ -56,40 +60,76 @@ public class JEXLItemTransformerImpl implements JEXLItemTransformer {
         this.pullJEXL = pullJEXL;
     }
 
+    protected AttrSchemaType beforePropagation(final PlainAttrValue value, final Any<?> any) {
+        JexlContext jexlContext = new MapContext();
+        if (any != null) {
+            JexlUtils.addFieldsToContext(any, jexlContext);
+            JexlUtils.addPlainAttrsToContext(any.getPlainAttrs(), jexlContext);
+            JexlUtils.addDerAttrsToContext(any, derAttrHandler, jexlContext);
+        }
+        jexlContext.set("value", value.getValue());
+
+        Object tValue = JexlUtils.evaluate(propagationJEXL, jexlContext);
+
+        value.setBinaryValue(null);
+        value.setBooleanValue(null);
+        value.setDateValue(null);
+        value.setDoubleValue(null);
+        value.setLongValue(null);
+        value.setStringValue(null);
+
+        if (tValue instanceof byte[]) {
+            value.setBinaryValue((byte[]) tValue);
+            return AttrSchemaType.Binary;
+        }
+
+        if (tValue instanceof Boolean) {
+            value.setBooleanValue((Boolean) tValue);
+            return AttrSchemaType.Boolean;
+        }
+
+        if (tValue instanceof OffsetDateTime) {
+            value.setDateValue((OffsetDateTime) tValue);
+            return AttrSchemaType.Date;
+        }
+
+        if (tValue instanceof Double) {
+            value.setDoubleValue((Double) tValue);
+            return AttrSchemaType.Double;
+        }
+
+        if (tValue instanceof Long) {
+            value.setLongValue((Long) tValue);
+            return AttrSchemaType.Long;
+        }
+
+        if (tValue != null) {
+            value.setStringValue(tValue.toString());
+        }
+        return AttrSchemaType.String;
+    }
+
     @Override
     public Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
             final Item item,
-            final Entity entity,
+            final Any<?> any,
             final AttrSchemaType schemaType,
             final List<PlainAttrValue> values) {
 
-        if (StringUtils.isNotBlank(propagationJEXL) && values != null) {
-            values.forEach(value -> {
-                Object originalValue = value.getValue();
-                if (originalValue != null) {
-                    JexlContext jexlContext = new MapContext();
-                    if (entity != null) {
-                        JexlUtils.addFieldsToContext(entity, jexlContext);
-                        if (entity instanceof Any) {
-                            JexlUtils.addPlainAttrsToContext(((Any<?>) entity).getPlainAttrs(), jexlContext);
-                            JexlUtils.addDerAttrsToContext(((Any<?>) entity), derAttrHandler, jexlContext);
-                        }
-                    }
-                    jexlContext.set("value", originalValue);
-
-                    value.setBinaryValue(null);
-                    value.setBooleanValue(null);
-                    value.setDateValue(null);
-                    value.setDoubleValue(null);
-                    value.setLongValue(null);
-                    value.setStringValue(JexlUtils.evaluate(propagationJEXL, jexlContext));
-                }
-            });
+        if (StringUtils.isBlank(propagationJEXL)) {
+            return JEXLItemTransformer.super.beforePropagation(item, any, schemaType, values);
+        }
 
-            return Pair.of(AttrSchemaType.String, values);
+        AtomicReference<AttrSchemaType> tType = new AtomicReference<>();
+        if (values.isEmpty()) {
+            PlainAttrValue value = anyUtilsFactory.getInstance(any).newPlainAttrValue();
+            tType.set(beforePropagation(value, any));
+            values.add(value);
+        } else {
+            values.forEach(value -> tType.set(beforePropagation(value, any)));
         }
 
-        return JEXLItemTransformer.super.beforePropagation(item, entity, schemaType, values);
+        return Pair.of(tType.get(), values);
     }
 
     @Override
@@ -103,13 +143,11 @@ public class JEXLItemTransformerImpl implements JEXLItemTransformer {
             values.forEach(value -> {
                 JexlContext jexlContext = new MapContext();
                 jexlContext.set("value", value);
+                JexlUtils.addFieldsToContext(entityTO, jexlContext);
                 if (entityTO instanceof AnyTO) {
-                    JexlUtils.addFieldsToContext((AnyTO) entityTO, jexlContext);
                     JexlUtils.addAttrsToContext(((AnyTO) entityTO).getPlainAttrs(), jexlContext);
                     JexlUtils.addAttrsToContext(((AnyTO) entityTO).getDerAttrs(), jexlContext);
                     JexlUtils.addAttrsToContext(((AnyTO) entityTO).getVirAttrs(), jexlContext);
-                } else if (entityTO instanceof RealmTO) {
-                    JexlUtils.addFieldsToContext((RealmTO) entityTO, jexlContext);
                 }
 
                 newValues.add(JexlUtils.evaluate(pullJEXL, jexlContext));
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
index 2b0c1bf8c2..70aa90477b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/LDAPMembershipPropagationActions.java
@@ -146,7 +146,7 @@ public class LDAPMembershipPropagationActions implements PropagationActions {
         JexlUtils.addPlainAttrsToContext(group.getPlainAttrs(), jexlContext);
         JexlUtils.addDerAttrsToContext(group, derAttrHandler, jexlContext);
 
-        return JexlUtils.evaluate(connObjectLinkTemplate, jexlContext);
+        return JexlUtils.evaluate(connObjectLinkTemplate, jexlContext).toString();
     }
 
     private void buildManagedGroupConnObjectLinks(final ExternalResource externalResource,
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
index f118fec405..873287a73f 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java
@@ -50,7 +50,7 @@ public class TemplateUtils {
 
         if (template.getValues() != null && !template.getValues().isEmpty()) {
             template.getValues().forEach(value -> {
-                String evaluated = JexlUtils.evaluate(value, jexlContext);
+                String evaluated = JexlUtils.evaluate(value, jexlContext).toString();
                 if (StringUtils.isNotBlank(evaluated)) {
                     result.getValues().add(evaluated);
                 }
@@ -68,7 +68,7 @@ public class TemplateUtils {
         JexlUtils.addAttrsToContext(realmMember.getVirAttrs(), jexlContext);
 
         if (template.getRealm() != null) {
-            String evaluated = JexlUtils.evaluate(template.getRealm(), jexlContext);
+            String evaluated = JexlUtils.evaluate(template.getRealm(), jexlContext).toString();
             if (StringUtils.isNotBlank(evaluated)) {
                 realmMember.setRealm(evaluated);
             }
@@ -156,7 +156,7 @@ public class TemplateUtils {
             fillMemberships((GroupableRelatableTO) realmMember, ((GroupableRelatableTO) template));
         } else if (template instanceof UserTO) {
             if (StringUtils.isNotBlank(((UserTO) template).getUsername())) {
-                String evaluated = JexlUtils.evaluate(((UserTO) template).getUsername(), jexlContext);
+                String evaluated = JexlUtils.evaluate(((UserTO) template).getUsername(), jexlContext).toString();
                 if (StringUtils.isNotBlank(evaluated)) {
                     if (realmMember instanceof UserTO) {
                         ((UserTO) realmMember).setUsername(evaluated);
@@ -167,7 +167,7 @@ public class TemplateUtils {
             }
 
             if (StringUtils.isNotBlank(((UserTO) template).getPassword())) {
-                String evaluated = JexlUtils.evaluate(((UserTO) template).getPassword(), jexlContext);
+                String evaluated = JexlUtils.evaluate(((UserTO) template).getPassword(), jexlContext).toString();
                 if (StringUtils.isNotBlank(evaluated)) {
                     if (realmMember instanceof UserTO) {
                         ((UserTO) realmMember).setPassword(evaluated);
@@ -186,7 +186,7 @@ public class TemplateUtils {
             }
         } else if (template instanceof GroupTO) {
             if (StringUtils.isNotBlank(((GroupTO) template).getName())) {
-                String evaluated = JexlUtils.evaluate(((GroupTO) template).getName(), jexlContext);
+                String evaluated = JexlUtils.evaluate(((GroupTO) template).getName(), jexlContext).toString();
                 if (StringUtils.isNotBlank(evaluated)) {
                     if (realmMember instanceof GroupTO) {
                         ((GroupTO) realmMember).setName(evaluated);
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java
index 686aecbffb..6582b984e2 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToDateItemTransformer.java
@@ -21,7 +21,7 @@ package org.apache.syncope.fit.core.reference;
 import java.util.List;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.resource.Item;
 import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
@@ -31,15 +31,15 @@ public class DateToDateItemTransformer implements ItemTransformer {
     @Override
     public Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
             final Item item,
-            final Entity entity,
+            final Any<?> any,
             final AttrSchemaType schemaType,
             final List<PlainAttrValue> values) {
 
         if (values == null || values.isEmpty() || values.get(0).getDateValue() == null) {
-            return ItemTransformer.super.beforePropagation(item, entity, schemaType, values);
-        } else {
-            values.get(0).setDateValue(values.get(0).getDateValue().plusDays(1));
-            return Pair.of(schemaType, values);
+            return ItemTransformer.super.beforePropagation(item, any, schemaType, values);
         }
+
+        values.get(0).setDateValue(values.get(0).getDateValue().plusDays(1));
+        return Pair.of(schemaType, values);
     }
 }
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java
index 5324419ebe..054d142b0b 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/DateToLongItemTransformer.java
@@ -21,7 +21,7 @@ package org.apache.syncope.fit.core.reference;
 import java.util.List;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
-import org.apache.syncope.core.persistence.api.entity.Entity;
+import org.apache.syncope.core.persistence.api.entity.Any;
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
 import org.apache.syncope.core.persistence.api.entity.resource.Item;
 import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
@@ -31,21 +31,21 @@ public class DateToLongItemTransformer implements ItemTransformer {
     @Override
     public Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
             final Item item,
-            final Entity entity,
+            final Any<?> any,
             final AttrSchemaType schemaType,
             final List<PlainAttrValue> values) {
 
         if (values == null || values.isEmpty() || values.get(0).getDateValue() == null) {
-            return ItemTransformer.super.beforePropagation(item, entity, schemaType, values);
-        } else {
-            values.get(0).setLongValue(values.get(0).getDateValue().toInstant().toEpochMilli());
-            values.get(0).setBinaryValue(null);
-            values.get(0).setBooleanValue(null);
-            values.get(0).setDateValue(null);
-            values.get(0).setDoubleValue(null);
-            values.get(0).setStringValue(null);
-
-            return Pair.of(AttrSchemaType.Long, values);
+            return ItemTransformer.super.beforePropagation(item, any, schemaType, values);
         }
+
+        values.get(0).setLongValue(values.get(0).getDateValue().toInstant().toEpochMilli());
+        values.get(0).setBinaryValue(null);
+        values.get(0).setBooleanValue(null);
+        values.get(0).setDateValue(null);
+        values.get(0).setDoubleValue(null);
+        values.get(0).setStringValue(null);
+
+        return Pair.of(AttrSchemaType.Long, values);
     }
 }
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
index 88af5f60ea..f5db2a3d42 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PropagationTaskITCase.java
@@ -473,7 +473,7 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
             provision.getMapping().getItems().removeIf(item -> "mail".equals(item.getExtAttrName()));
             provision.getVirSchemas().clear();
 
-            // Date -> long (JEXL expression) -> string (as all JEXL in Syncope)
+            // Date -> long (JEXL expression) -> string
             ItemTO loginDateForJexlAsLong = new ItemTO();
             loginDateForJexlAsLong.setPurpose(MappingPurpose.PROPAGATION);
             loginDateForJexlAsLong.setIntAttrName("loginDate");
@@ -536,7 +536,7 @@ public class PropagationTaskITCase extends AbstractTaskITCase {
 
             Attribute employeeNumber = AttributeUtil.find("employeeNumber", propagationAttrs);
             assertNotNull(employeeNumber);
-            assertEquals(String.valueOf(loginDate.toInstant().toEpochMilli()), employeeNumber.getValue().get(0));
+            assertEquals(loginDate.toInstant().toEpochMilli(), employeeNumber.getValue().get(0));
 
             Attribute street = AttributeUtil.find("street", propagationAttrs);
             assertNotNull(street);
diff --git a/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy b/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy
index e35e54dc8a..94e3a1dce4 100644
--- a/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy
+++ b/fit/core-reference/src/test/resources/PrefixItemTransformer.groovy
@@ -23,7 +23,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair
 import org.apache.syncope.common.lib.to.EntityTO
 import org.apache.syncope.common.lib.types.AttrSchemaType
-import org.apache.syncope.core.persistence.api.entity.Entity
+import org.apache.syncope.core.persistence.api.entity.Any
 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue
 import org.apache.syncope.core.persistence.api.entity.resource.Item
 import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
@@ -36,18 +36,18 @@ class PrefixItemTransformer implements ItemTransformer {
   @Override
   Pair<AttrSchemaType, List<PlainAttrValue>> beforePropagation(
     Item item,
-    Entity entity,
+    Any<?> any,
     AttrSchemaType schemaType,
     List<PlainAttrValue> values) {
 
     if (values == null || values.isEmpty() || values.get(0).getStringValue() == null) {
-      return Pair.of(schemaType, values);
-    } else {
-      String value = values.get(0).getStringValue();
-      values.get(0).setStringValue(PREFIX + value);
-
       return Pair.of(schemaType, values);
     }
+
+    String value = values.get(0).getStringValue();
+    values.get(0).setStringValue(PREFIX + value);
+
+    return Pair.of(schemaType, values);
   }
 
   @Override
@@ -58,12 +58,11 @@ class PrefixItemTransformer implements ItemTransformer {
 
     if (values == null || values.isEmpty() || values.get(0) == null) {
       return values;
-    } else {
-      List<Object> newValues = new ArrayList<>(values);
-      newValues.set(0, StringUtils.substringAfter(values.get(0).toString(), PREFIX));
-
-      return newValues;
     }
+    
+    List<Object> newValues = new ArrayList<>(values);
+    newValues.set(0, StringUtils.substringAfter(values.get(0).toString(), PREFIX));
+
+    return newValues;
   }
 }
-
diff --git a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
index 6acac0dc9f..bca830d3de 100644
--- a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
+++ b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WARefreshContextJob.java
@@ -42,9 +42,6 @@ public class WARefreshContextJob implements Job {
     @Autowired
     private SamlIdPMetadataGenerator metadataGenerator;
 
-    public WARefreshContextJob() {
-    }
-
     @Override
     public void execute(final JobExecutionContext jobExecutionContext) throws JobExecutionException {
         try {