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 2020/11/19 13:55:26 UTC
[syncope] branch 2_1_X updated: [SYNCOPE-1603] Ensuring
PushCorrelationRule is always applied if available
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_1_X by this push:
new 1acdd4e [SYNCOPE-1603] Ensuring PushCorrelationRule is always applied if available
1acdd4e is described below
commit 1acdd4e45e2082be724b086b50528c38bd529cbd
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Nov 19 14:43:11 2020 +0100
[SYNCOPE-1603] Ensuring PushCorrelationRule is always applied if available
---
.../api/propagation/PropagationManager.java | 16 -----
.../java/DefaultUserProvisioningManager.java | 3 +-
.../java/data/AnyObjectDataBinderImpl.java | 23 ++++---
.../provisioning/java/data/UserDataBinderImpl.java | 23 ++++---
.../AbstractPropagationTaskExecutor.java | 57 ++--------------
.../java/propagation/PropagationManagerImpl.java | 75 ++++------------------
.../stream/StreamAnyObjectPushResultHandler.java | 1 -
.../stream/StreamGroupPushResultHandler.java | 1 -
.../stream/StreamUserPushResultHandler.java | 1 -
.../camel/producer/DeleteProducer.java | 3 +-
.../org/apache/syncope/fit/core/UserITCase.java | 12 +---
11 files changed, 51 insertions(+), 164 deletions(-)
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
index 0b05b64..fc2cbe5 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
@@ -142,28 +142,12 @@ public interface PropagationManager {
PropagationByResource<Pair<String, String>> propByLinkedAccount,
Collection<String> noPropResourceKeys);
- /**
- * Create the delete tasks for the any object from each resource associated, unless in {@code noPropResourceKeys}.
- *
- * @param key any object key
- * @param propByRes operation to be performed per resource
- * @param propByLinkedAccount operation to be performed for linked accounts
- * @param noPropResourceKeys external resource keys not to be considered for propagation
- * @return list of propagation tasks
- */
- List<PropagationTaskInfo> getUserDeleteTasks(
- String key,
- PropagationByResource<String> propByRes,
- PropagationByResource<Pair<String, String>> propByLinkedAccount,
- Collection<String> noPropResourceKeys);
-
PropagationTaskInfo newTask(
DerAttrHandler derAttrHandler,
Any<?> any,
ExternalResource resource,
ResourceOperation operation,
Provision provision,
- boolean deleteOnResource,
Stream<? extends Item> mappingItems,
Pair<String, Set<Attribute>> preparedAttrs);
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 808f5b0..2f14c52 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -205,7 +205,8 @@ public class DefaultUserProvisioningManager implements UserProvisioningManager {
// information could only be available after uwfAdapter.delete(), which
// will also effectively remove user from db, thus making virtually
// impossible by NotificationManager to fetch required user information
- List<PropagationTaskInfo> taskInfos = propagationManager.getUserDeleteTasks(
+ List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
+ AnyTypeKind.USER,
key,
propByRes,
propByLinkedAccount,
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index f0547fb..60b3280 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -493,27 +493,21 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
forEach(delete -> {
groupDAO.find(delete).getResources().stream().
filter(resource -> !propByRes.contains(resource.getKey())).
- forEach(resource -> {
- propByRes.add(ResourceOperation.DELETE, resource.getKey());
- });
+ forEach(resource -> propByRes.add(ResourceOperation.DELETE, resource.getKey()));
});
dynGroupMembs.getLeft().stream().
filter(group -> dynGroupMembs.getRight().contains(group)).
forEach(update -> {
groupDAO.find(update).getResources().stream().
filter(resource -> !propByRes.contains(resource.getKey())).
- forEach(resource -> {
- propByRes.add(ResourceOperation.UPDATE, resource.getKey());
- });
+ forEach(resource -> propByRes.add(ResourceOperation.UPDATE, resource.getKey()));
});
dynGroupMembs.getRight().stream().
filter(group -> !dynGroupMembs.getLeft().contains(group)).
forEach(create -> {
groupDAO.find(create).getResources().stream().
filter(resource -> !propByRes.contains(resource.getKey())).
- forEach(resource -> {
- propByRes.add(ResourceOperation.CREATE, resource.getKey());
- });
+ forEach(resource -> propByRes.add(ResourceOperation.CREATE, resource.getKey()));
});
// Throw composite exception if there is at least one element set in the composing exceptions
@@ -522,7 +516,16 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
}
// Re-merge any pending change from above
- anyObjectDAO.save(anyObject);
+ AnyObject saved = anyObjectDAO.save(anyObject);
+
+ // ensure not to DELETE on External Resources that remain assigned
+ Set<String> assigned = saved.getResources().stream().
+ map(ExternalResource::getKey).collect(Collectors.toCollection(HashSet::new));
+ assigned.addAll(saved.getMemberships().stream().
+ flatMap(m -> m.getRightEnd().getResources().stream()).map(ExternalResource::getKey).
+ collect(Collectors.toSet()));
+ propByRes.removeAll(ResourceOperation.DELETE, assigned);
+
return propByRes;
}
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index 58e8a93..2553c61 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -710,27 +710,21 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
forEach(delete -> {
groupDAO.find(delete).getResources().stream().
filter(resource -> !propByRes.contains(resource.getKey())).
- forEach(resource -> {
- propByRes.add(ResourceOperation.DELETE, resource.getKey());
- });
+ forEach(resource -> propByRes.add(ResourceOperation.DELETE, resource.getKey()));
});
dynGroupMembs.getLeft().stream().
filter(group -> dynGroupMembs.getRight().contains(group)).
forEach(update -> {
groupDAO.find(update).getResources().stream().
filter(resource -> !propByRes.contains(resource.getKey())).
- forEach(resource -> {
- propByRes.add(ResourceOperation.UPDATE, resource.getKey());
- });
+ forEach(resource -> propByRes.add(ResourceOperation.UPDATE, resource.getKey()));
});
dynGroupMembs.getRight().stream().
filter(group -> !dynGroupMembs.getLeft().contains(group)).
forEach(create -> {
groupDAO.find(create).getResources().stream().
filter(resource -> !propByRes.contains(resource.getKey())).
- forEach(resource -> {
- propByRes.add(ResourceOperation.CREATE, resource.getKey());
- });
+ forEach(resource -> propByRes.add(ResourceOperation.CREATE, resource.getKey()));
});
// Throw composite exception if there is at least one element set in the composing exceptions
@@ -739,7 +733,16 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
}
// Re-merge any pending change from above
- userDAO.save(user);
+ User saved = userDAO.save(user);
+
+ // ensure not to DELETE on External Resources that remain assigned
+ Set<String> assigned = saved.getResources().stream().
+ map(ExternalResource::getKey).collect(Collectors.toCollection(HashSet::new));
+ assigned.addAll(saved.getMemberships().stream().
+ flatMap(m -> m.getRightEnd().getResources().stream()).map(ExternalResource::getKey).
+ collect(Collectors.toSet()));
+ propByRes.removeAll(ResourceOperation.DELETE, assigned);
+
return Pair.of(propByRes, propByLinkedAccount);
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
index 5eb6365..ccff44b 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/AbstractPropagationTaskExecutor.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.java.propagation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -278,61 +277,13 @@ public abstract class AbstractPropagationTaskExecutor implements PropagationTask
Uid result;
if (beforeObj == null) {
- LOG.debug("{} not found on external resource: ignoring delete", task.getConnObjectKey());
+ LOG.debug("{} not found on {}: ignoring delete", task.getConnObjectKey(), task.getResource().getKey());
result = null;
} else {
- /*
- * We must choose here whether to
- * a. actually delete the provided entity from the external resource
- * b. just update the provided entity data onto the external resource
- *
- * (a) happens when either there is no entity associated with the PropagationTask (this takes place
- * when the task is generated via Logic's delete()) or the provided updated
- * entity hasn't the current resource assigned (when the task is generated via
- * Logic's update()).
- *
- * (b) happens when the provided updated entity does have the current resource assigned (when the task
- * is generated via Logic's update()): this basically means that before such
- * update, this entity used to have the current resource assigned by more than one mean (for example,
- * two different memberships with the same resource).
- */
- Collection<String> resources = Collections.emptySet();
- if (task.getEntityKey() != null && task.getAnyTypeKind() != null) {
- switch (task.getAnyTypeKind()) {
- case USER:
- try {
- resources = userDAO.findAllResourceKeys(task.getEntityKey());
- } catch (Exception e) {
- LOG.error("Could not read user {}", task.getEntityKey(), e);
- }
- break;
-
- case GROUP:
- try {
- resources = groupDAO.findAllResourceKeys(task.getEntityKey());
- } catch (Exception e) {
- LOG.error("Could not read group {}", task.getEntityKey(), e);
- }
- break;
+ LOG.debug("Delete {} on {}", beforeObj.getUid(), task.getResource().getKey());
- case ANY_OBJECT:
- default:
- try {
- resources = anyObjectDAO.findAllResourceKeys(task.getEntityKey());
- } catch (Exception e) {
- LOG.error("Could not read any object {}", task.getEntityKey(), e);
- }
- break;
- }
- }
- if (task.getAnyTypeKind() == null || !resources.contains(task.getResource().getKey())) {
- LOG.debug("Delete {} on {}", beforeObj.getUid(), task.getResource().getKey());
-
- connector.delete(beforeObj.getObjectClass(), beforeObj.getUid(), null, propagationAttempted);
- result = beforeObj.getUid();
- } else {
- result = createOrUpdate(task, beforeObj, connector, propagationAttempted);
- }
+ connector.delete(beforeObj.getObjectClass(), beforeObj.getUid(), null, propagationAttempted);
+ result = beforeObj.getUid();
}
return result;
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
index 1782982..31316fa 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PropagationManagerImpl.java
@@ -36,13 +36,9 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.common.lib.types.ResourceOperation;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
-import org.apache.syncope.core.persistence.api.dao.GroupDAO;
-import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
-import org.apache.syncope.core.persistence.api.dao.AnyDAO;
-import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
import org.apache.syncope.core.persistence.api.entity.Any;
import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
@@ -83,15 +79,6 @@ public class PropagationManagerImpl implements PropagationManager {
protected VirSchemaDAO virSchemaDAO;
@Autowired
- protected AnyObjectDAO anyObjectDAO;
-
- @Autowired
- protected UserDAO userDAO;
-
- @Autowired
- protected GroupDAO groupDAO;
-
- @Autowired
protected ExternalResourceDAO resourceDAO;
@Autowired
@@ -109,25 +96,6 @@ public class PropagationManagerImpl implements PropagationManager {
@Autowired
protected AnyUtilsFactory anyUtilsFactory;
- protected AnyDAO<? extends Any<?>> dao(final AnyTypeKind kind) {
- AnyDAO<? extends Any<?>> dao;
- switch (kind) {
- case ANY_OBJECT:
- dao = anyObjectDAO;
- break;
-
- case GROUP:
- dao = groupDAO;
- break;
-
- case USER:
- default:
- dao = userDAO;
- }
-
- return dao;
- }
-
@Override
public List<PropagationTaskInfo> getCreateTasks(
final AnyTypeKind kind,
@@ -138,7 +106,7 @@ public class PropagationManagerImpl implements PropagationManager {
final Collection<String> noPropResourceKeys) {
return getCreateTasks(
- dao(kind).authFind(key),
+ anyUtilsFactory.getInstance(kind).dao().authFind(key),
null,
enable,
propByRes,
@@ -158,7 +126,7 @@ public class PropagationManagerImpl implements PropagationManager {
final Collection<String> noPropResourceKeys) {
return getCreateTasks(
- userDAO.authFind(key),
+ anyUtilsFactory.getInstance(AnyTypeKind.USER).dao().authFind(key),
password,
enable,
propByRes,
@@ -193,7 +161,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
}
- return createTasks(any, password, true, enable, false, propByRes, propByLinkedAccount, vAttrs);
+ return createTasks(any, password, true, enable, propByRes, propByLinkedAccount, vAttrs);
}
@Override
@@ -208,7 +176,7 @@ public class PropagationManagerImpl implements PropagationManager {
final Collection<String> noPropResourceKeys) {
return getUpdateTasks(
- dao(kind).authFind(key),
+ anyUtilsFactory.getInstance(kind).dao().authFind(key),
null,
changePwd,
enable,
@@ -225,7 +193,7 @@ public class PropagationManagerImpl implements PropagationManager {
final Collection<String> noPropResourceKeys) {
return getUpdateTasks(
- userDAO.authFind(wfResult.getResult().getLeft().getKey()),
+ anyUtilsFactory.getInstance(AnyTypeKind.USER).dao().authFind(wfResult.getResult().getLeft().getKey()),
wfResult.getResult().getLeft().getPassword() == null
? null
: wfResult.getResult().getLeft().getPassword().getValue(),
@@ -258,7 +226,8 @@ public class PropagationManagerImpl implements PropagationManager {
wfResult.getPerformedTasks());
Set<String> pwdResourceNames = new HashSet<>(userPatch.getPassword().getResources());
- Collection<String> allResourceNames = userDAO.findAllResourceKeys(userPatch.getKey());
+ Collection<String> allResourceNames = anyUtilsFactory.getInstance(AnyTypeKind.USER).
+ dao().findAllResourceKeys(userPatch.getKey());
pwdResourceNames.retainAll(allResourceNames);
pwdWFResult.getPropByRes().addAll(ResourceOperation.UPDATE, pwdResourceNames);
@@ -320,7 +289,6 @@ public class PropagationManagerImpl implements PropagationManager {
password,
changePwd,
enable,
- false,
propByRes == null ? new PropagationByResource<>() : propByRes,
propByLinkedAccount,
vAttrs);
@@ -334,17 +302,9 @@ public class PropagationManagerImpl implements PropagationManager {
final PropagationByResource<Pair<String, String>> propByLinkedAccount,
final Collection<String> noPropResourceKeys) {
- return getDeleteTasks(dao(kind).authFind(key), propByRes, propByLinkedAccount, noPropResourceKeys);
- }
-
- @Override
- public List<PropagationTaskInfo> getUserDeleteTasks(
- final String key,
- final PropagationByResource<String> propByRes,
- final PropagationByResource<Pair<String, String>> propByLinkedAccount,
- final Collection<String> noPropResourceKeys) {
-
- return getDeleteTasks(userDAO.authFind(key), propByRes, propByLinkedAccount, noPropResourceKeys);
+ return getDeleteTasks(
+ anyUtilsFactory.getInstance(kind).dao().authFind(key),
+ propByRes, propByLinkedAccount, noPropResourceKeys);
}
protected List<PropagationTaskInfo> getDeleteTasks(
@@ -358,7 +318,7 @@ public class PropagationManagerImpl implements PropagationManager {
if (propByRes == null || propByRes.isEmpty()) {
localPropByRes.addAll(
ResourceOperation.DELETE,
- dao(any.getType().getKind()).findAllResourceKeys(any.getKey()));
+ anyUtilsFactory.getInstance(any).dao().findAllResourceKeys(any.getKey()));
} else {
localPropByRes.merge(propByRes);
}
@@ -376,7 +336,7 @@ public class PropagationManagerImpl implements PropagationManager {
}
}
- return createTasks(any, null, false, false, true, localPropByRes, propByLinkedAccount, null);
+ return createTasks(any, null, false, false, localPropByRes, propByLinkedAccount, null);
}
@Override
@@ -386,7 +346,6 @@ public class PropagationManagerImpl implements PropagationManager {
final ExternalResource resource,
final ResourceOperation operation,
final Provision provision,
- final boolean deleteOnResource,
final Stream<? extends Item> mappingItems,
final Pair<String, Set<Attribute>> preparedAttrs) {
@@ -394,9 +353,7 @@ public class PropagationManagerImpl implements PropagationManager {
task.setObjectClassName(provision.getObjectClass().getObjectClassValue());
task.setAnyTypeKind(any.getType().getKind());
task.setAnyType(any.getType().getKey());
- if (!deleteOnResource) {
- task.setEntityKey(any.getKey());
- }
+ task.setEntityKey(any.getKey());
task.setOperation(operation);
task.setConnObjectKey(preparedAttrs.getLeft());
@@ -436,7 +393,6 @@ public class PropagationManagerImpl implements PropagationManager {
* @param password clear text password to be provisioned
* @param changePwd whether password should be included for propagation attributes or not
* @param enable whether user must be enabled or not
- * @param deleteOnResource whether any must be deleted anyway from external resource or not
* @param propByRes operation to be performed per resource
* @param propByLinkedAccount operation to be performed on linked accounts
* @param vAttrs virtual attributes to be set
@@ -447,7 +403,6 @@ public class PropagationManagerImpl implements PropagationManager {
final String password,
final boolean changePwd,
final Boolean enable,
- final boolean deleteOnResource,
final PropagationByResource<String> propByRes,
final PropagationByResource<Pair<String, String>> propByLinkedAccount,
final Collection<AttrTO> vAttrs) {
@@ -462,7 +417,7 @@ public class PropagationManagerImpl implements PropagationManager {
Set<String> virtualResources = new HashSet<>();
virtualResources.addAll(propByRes.get(ResourceOperation.CREATE));
virtualResources.addAll(propByRes.get(ResourceOperation.UPDATE));
- virtualResources.addAll(dao(any.getType().getKind()).findAllResourceKeys(any.getKey()));
+ virtualResources.addAll(anyUtilsFactory.getInstance(any).dao().findAllResourceKeys(any.getKey()));
Map<String, Set<Attribute>> vAttrMap = new HashMap<>();
if (vAttrs != null) {
@@ -524,7 +479,6 @@ public class PropagationManagerImpl implements PropagationManager {
resource,
operation,
provision,
- deleteOnResource,
mappingItems,
preparedAttrs);
task.setOldConnObjectKey(propByRes.getOldConnObjectKey(resourceKey));
@@ -568,7 +522,6 @@ public class PropagationManagerImpl implements PropagationManager {
account.getResource(),
operation,
provision,
- deleteOnResource,
mappingItems,
Pair.of(account.getConnObjectKeyValue(),
mappingManager.prepareAttrsFromLinkedAccount(
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamAnyObjectPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamAnyObjectPushResultHandler.java
index fd860ef..aabaf4a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamAnyObjectPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamAnyObjectPushResultHandler.java
@@ -55,7 +55,6 @@ public class StreamAnyObjectPushResultHandler extends DefaultAnyObjectPushResult
profile.getTask().getResource(),
ResourceOperation.CREATE,
provision,
- false,
items,
preparedAttrs);
propagationTask.setConnector(profile.getConnector());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamGroupPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamGroupPushResultHandler.java
index a38c1ba..52e87ce 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamGroupPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamGroupPushResultHandler.java
@@ -55,7 +55,6 @@ public class StreamGroupPushResultHandler extends DefaultGroupPushResultHandler
profile.getTask().getResource(),
ResourceOperation.CREATE,
provision,
- false,
items,
preparedAttrs);
propagationTask.setConnector(profile.getConnector());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamUserPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamUserPushResultHandler.java
index 49f9b26..f63d17d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamUserPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/stream/StreamUserPushResultHandler.java
@@ -55,7 +55,6 @@ public class StreamUserPushResultHandler extends DefaultUserPushResultHandler {
profile.getTask().getResource(),
ResourceOperation.CREATE,
provision,
- false,
items,
preparedAttrs);
propagationTask.setConnector(profile.getConnector());
diff --git a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java
index e765f71..60d33c0 100644
--- a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java
+++ b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/DeleteProducer.java
@@ -74,7 +74,8 @@ public class DeleteProducer extends AbstractProducer {
// information could only be available after uwfAdapter.delete(), which
// will also effectively remove user from db, thus making virtually
// impossible by NotificationManager to fetch required user information
- taskInfos = getPropagationManager().getUserDeleteTasks(
+ taskInfos = getPropagationManager().getDeleteTasks(
+ AnyTypeKind.USER,
key,
propByRes,
propByLinkedAccount,
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
index 862bccf..b767d33 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
@@ -1325,9 +1325,7 @@ public class UserITCase extends AbstractITCase {
userTO.getResources().add(RESOURCE_NAME_REST);
// 1. create
- ProvisioningResult<UserTO> result = userService.create(userTO, true).readEntity(
- new GenericType<ProvisioningResult<UserTO>>() {
- });
+ ProvisioningResult<UserTO> result = createUser(userTO);
assertEquals(1, result.getPropagationStatuses().size());
assertEquals(ExecStatus.SUCCESS, result.getPropagationStatuses().get(0).getStatus());
assertEquals(RESOURCE_NAME_REST, result.getPropagationStatuses().get(0).getResource());
@@ -1344,9 +1342,7 @@ public class UserITCase extends AbstractITCase {
patch.setKey(result.getEntity().getKey());
patch.getPlainAttrs().add(new AttrPatch.Builder().
attrTO(new AttrTO.Builder().schema("surname").value("surname2").build()).build());
- result = userService.update(patch).readEntity(
- new GenericType<ProvisioningResult<UserTO>>() {
- });
+ result = updateUser(patch);
assertEquals(1, result.getPropagationStatuses().size());
assertEquals(ExecStatus.SUCCESS, result.getPropagationStatuses().get(0).getStatus());
assertEquals(RESOURCE_NAME_REST, result.getPropagationStatuses().get(0).getResource());
@@ -1358,9 +1354,7 @@ public class UserITCase extends AbstractITCase {
assertNotNull(response.getEntity());
// 3. delete
- result = userService.delete(result.getEntity().getKey()).readEntity(
- new GenericType<ProvisioningResult<UserTO>>() {
- });
+ result = deleteUser(result.getEntity().getKey());
assertEquals(1, result.getPropagationStatuses().size());
assertEquals(ExecStatus.SUCCESS, result.getPropagationStatuses().get(0).getStatus());
assertEquals(RESOURCE_NAME_REST, result.getPropagationStatuses().get(0).getResource());