diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java index 55ceee82c64..66111da16fe 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/ModelController.java @@ -29,7 +29,6 @@ import com.evolveum.midpoint.model.impl.importer.ImportAccountsFromResourceTaskHandler; import com.evolveum.midpoint.model.impl.importer.ObjectImporter; import com.evolveum.midpoint.model.impl.lens.*; -import com.evolveum.midpoint.model.impl.messaging.MessageProcessor; import com.evolveum.midpoint.model.impl.scripting.ExecutionContext; import com.evolveum.midpoint.model.impl.scripting.ScriptingExpressionEvaluator; import com.evolveum.midpoint.model.impl.util.ModelImplUtils; @@ -157,7 +156,6 @@ public class ModelController implements ModelService, TaskService, WorkflowServi @Autowired private CacheRegistry cacheRegistry; @Autowired private ClockworkMedic clockworkMedic; @Autowired private ChangeNotificationDispatcher dispatcher; - @Autowired private MessageProcessor messageProcessor; @Autowired @Qualifier("cacheRepositoryService") private transient RepositoryService cacheRepositoryService; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/messaging/MessageProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/messaging/MessageProcessor.java deleted file mode 100644 index f27b31f5b24..00000000000 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/messaging/MessageProcessor.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2010-2019 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.evolveum.midpoint.model.impl.messaging; - -import com.evolveum.midpoint.model.api.ModelService; -import com.evolveum.midpoint.model.impl.expr.ModelExpressionThreadLocalHolder; -import com.evolveum.midpoint.prism.*; -import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple; -import com.evolveum.midpoint.repo.api.PreconditionViolationException; -import com.evolveum.midpoint.repo.common.expression.*; -import com.evolveum.midpoint.schema.SchemaConstantsGenerated; -import com.evolveum.midpoint.schema.constants.ExpressionConstants; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.security.api.SecurityContextManager; -import com.evolveum.midpoint.task.api.Task; -import com.evolveum.midpoint.util.exception.*; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - -/** - * - */ -@Component -public class MessageProcessor { - - private static final Trace LOGGER = TraceManager.getTrace(MessageProcessor.class); - - public static final String DOT_CLASS = MessageProcessor.class.getName() + "."; - - @Autowired ModelService modelService; - @Autowired ExpressionFactory expressionFactory; - @Autowired PrismContext prismContext; - @Autowired SecurityContextManager securityContextManager; - -// public void processMessage(DataMessageType message, MessageProcessingConfigurationType processing, -// ResourceType resource, Task task, OperationResult parentResult) -// throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException, -// ConfigurationException, ExpressionEvaluationException, PreconditionViolationException, PolicyViolationException, -// ObjectAlreadyExistsException { -// OperationResult result = parentResult.createSubresult(DOT_CLASS + "processMessage"); -// try { -// ExpressionVariables variables = createVariables(message, resource); -// if (processing.getConsumerExpression() != null && processing.getTransformerExpression() != null) { -// throw new IllegalStateException("Both consumerExpression and transformerExpression cannot be specified at once"); -// } -// if (processing.getConsumerExpression() != null) { -// evaluateExpression(processing.getConsumerExpression(), variables, "consumer expression", task, result); -// } else { -// List descriptions = evaluateExpression(processing.getTransformerExpression(), -// variables, "transformer expression", task, result); -// LOGGER.trace("Change description computation returned {} description(s)", descriptions.size()); -// for (ResourceObjectShadowChangeDescriptionType description : descriptions) { -// modelService.notifyChange(description, task, result); -// } -// } -// result.computeStatusIfUnknown(); -// } catch (Throwable t) { -// result.recordFatalError("Couldn't process message: " + t.getMessage(), t); -// throw t; -// } -// } -// -// @NotNull -// private List evaluateExpression(ExpressionType expressionBean, ExpressionVariables variables, String contextDescription, -// Task task, OperationResult result) -// throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, -// ConfigurationException, SecurityViolationException { -// Expression, PrismPropertyDefinition> expression = expressionFactory.makePropertyExpression(expressionBean, -// SchemaConstantsGenerated.C_RESOURCE_OBJECT_SHADOW_CHANGE_DESCRIPTION, contextDescription, task, result); -// ExpressionEvaluationContext context = new ExpressionEvaluationContext(null, variables, contextDescription, task, result); -// PrismValueDeltaSetTriple> exprResultTriple = -// ModelExpressionThreadLocalHolder.evaluateExpressionInContext(expression, context, task, result); -// List list = new ArrayList<>(); -// for (PrismPropertyValue pv : exprResultTriple.getZeroSet()) { -// list.add(pv.getRealValue()); -// } -// return list; -// } -// -// @NotNull -// private ExpressionVariables createVariables(DataMessageType message, -// ResourceType resource) { -// ExpressionVariables variables = new ExpressionVariables(); -// variables.addVariableDefinition(ExpressionConstants.VAR_MESSAGE, new MessageWrapper(message)); -// variables.addVariableDefinition(ExpressionConstants.VAR_RESOURCE, resource); -// return variables; -// } -} diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/messaging/MessageWrapper.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/messaging/MessageWrapper.java index 755a20c38ca..ae26faa900b 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/messaging/MessageWrapper.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/messaging/MessageWrapper.java @@ -28,7 +28,7 @@ import java.util.Map; /** - * + * TODO move somewhere else or rewrite */ public class MessageWrapper { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/AsyncUpdateTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/AsyncUpdateTaskHandler.java index 4395c02fa34..998b3c08a2e 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/AsyncUpdateTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/AsyncUpdateTaskHandler.java @@ -17,10 +17,10 @@ package com.evolveum.midpoint.model.impl.sync; import com.evolveum.midpoint.model.impl.ModelConstants; +import com.evolveum.midpoint.model.impl.sync.SyncTaskHelper.TargetInfo; import com.evolveum.midpoint.model.impl.util.ModelImplUtils; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.provisioning.api.ProvisioningService; -import com.evolveum.midpoint.schema.ResourceShadowDiscriminator; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationConstants; import com.evolveum.midpoint.schema.result.OperationResult; @@ -64,7 +64,6 @@ public class AsyncUpdateTaskHandler implements TaskHandler { @PostConstruct private void initialize() { taskManager.registerHandler(HANDLER_URI, this); - System.out.println("URI = " + HANDLER_URI); } @NotNull @@ -90,16 +89,16 @@ public TaskRunResult run(RunningTask task, TaskPartitionDefinitionType partition final String CTX = "Async Update"; - ResourceShadowDiscriminator coords = helper.getCoords(LOGGER, task, opResult, runResult, CTX); - if (coords == null) { + TargetInfo targetInfo = helper.getTargetInfo(LOGGER, task, opResult, runResult, CTX); + if (targetInfo == null) { return runResult; } String listeningActivityHandle = null; try { ModelImplUtils.clearRequestee(task); // todo is this needed? - listeningActivityHandle = provisioningService.startListeningForAsyncUpdates(coords, task, opResult); - System.out.println("Handle = " + listeningActivityHandle); + listeningActivityHandle = provisioningService.startListeningForAsyncUpdates(targetInfo.coords, task, opResult); + LOGGER.info("Started listening for async updates on {} with handle {}", targetInfo.resource, listeningActivityHandle); long lastCheck = 0; @@ -108,7 +107,7 @@ public TaskRunResult run(RunningTask task, TaskPartitionDefinitionType partition lastCheck = System.currentTimeMillis(); AsyncUpdateListeningActivityInformationType info = provisioningService .getAsyncUpdatesListeningActivityInformation(listeningActivityHandle, task, opResult); - LOGGER.info("Listening activity {} state:\n{}", listeningActivityHandle, + LOGGER.info("Listening activity {} state:\n{}", listeningActivityHandle, // todo trace prismContext.xmlSerializer().root(new QName("info")).serializeRealValue(info)); if (isAllDown(info)) { throw new SystemException("All listening activities are down, suspending the task: " + task); @@ -121,7 +120,7 @@ public TaskRunResult run(RunningTask task, TaskPartitionDefinitionType partition Thread.sleep(TASK_CHECK_INTERVAL); } } catch (RuntimeException | ObjectNotFoundException | SchemaException | CommunicationException | ConfigurationException | - ExpressionEvaluationException | InterruptedException | SecurityViolationException e) { + ExpressionEvaluationException | InterruptedException e) { helper.processException(LOGGER, e, opResult, runResult, partition, CTX); return runResult; } finally { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/LiveSyncTaskHandler.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/LiveSyncTaskHandler.java index cacc4dc5815..8af66e9e670 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/LiveSyncTaskHandler.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/LiveSyncTaskHandler.java @@ -16,9 +16,9 @@ package com.evolveum.midpoint.model.impl.sync; import com.evolveum.midpoint.model.impl.ModelConstants; +import com.evolveum.midpoint.model.impl.sync.SyncTaskHelper.TargetInfo; import com.evolveum.midpoint.model.impl.util.ModelImplUtils; import com.evolveum.midpoint.provisioning.api.ProvisioningService; -import com.evolveum.midpoint.schema.ResourceShadowDiscriminator; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationConstants; import com.evolveum.midpoint.schema.result.OperationResult; @@ -86,8 +86,8 @@ public TaskRunResult run(RunningTask task, TaskPartitionDefinitionType partition final String CTX = "Live Sync"; - ResourceShadowDiscriminator coords = helper.getCoords(LOGGER, task, opResult, runResult, CTX); - if (coords == null) { + TargetInfo targetInfo = helper.getTargetInfo(LOGGER, task, opResult, runResult, CTX); + if (targetInfo == null) { return runResult; } @@ -98,7 +98,7 @@ public TaskRunResult run(RunningTask task, TaskPartitionDefinitionType partition // This will detect the changes and notify model about them. // It will use extension of task to store synchronization state ModelImplUtils.clearRequestee(task); - changesProcessed = provisioningService.synchronize(coords, task, partition, opResult); + changesProcessed = provisioningService.synchronize(targetInfo.coords, task, partition, opResult); } catch (Throwable t) { helper.processException(LOGGER, t, opResult, runResult, partition, CTX); return runResult; @@ -109,7 +109,7 @@ public TaskRunResult run(RunningTask task, TaskPartitionDefinitionType partition // This "run" is finished. But the task goes on ... runResult.setRunResultStatus(TaskRunResultStatus.FINISHED); - LOGGER.trace("LiveSyncTaskHandler.run stopping (resource {})", coords.getResourceOid()); + LOGGER.trace("LiveSyncTaskHandler.run stopping (resource {})", targetInfo.resource); return runResult; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SyncTaskHelper.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SyncTaskHelper.java index fa3e8d6828b..d2f13b34dae 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SyncTaskHelper.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SyncTaskHelper.java @@ -46,7 +46,22 @@ public class SyncTaskHelper { @Autowired private ProvisioningService provisioningService; @Autowired private PrismContext prismContext; - ResourceShadowDiscriminator getCoords(Trace LOGGER, Task task, OperationResult opResult, TaskRunResult runResult, String ctx) { + public class TargetInfo { + final public ResourceShadowDiscriminator coords; + final public ResourceType resource; + final public RefinedResourceSchema refinedResourceSchema; + final public ObjectClassComplexTypeDefinition objectClassDefinition; + + public TargetInfo(ResourceShadowDiscriminator coords, ResourceType resource, + RefinedResourceSchema refinedResourceSchema, ObjectClassComplexTypeDefinition objectClassDefinition) { + this.coords = coords; + this.resource = resource; + this.refinedResourceSchema = refinedResourceSchema; + this.objectClassDefinition = objectClassDefinition; + } + } + + TargetInfo getTargetInfo(Trace LOGGER, Task task, OperationResult opResult, TaskRunResult runResult, String ctx) { String resourceOid = getResourceOid(LOGGER, task, opResult, runResult, ctx); if (resourceOid == null) { return null; @@ -73,7 +88,9 @@ ResourceShadowDiscriminator getCoords(Trace LOGGER, Task task, OperationResult o LOGGER.debug("{}: Processing all object classes", ctx); } - return new ResourceShadowDiscriminator(resourceOid, objectClass==null?null:objectClass.getTypeName()); + return new TargetInfo( + new ResourceShadowDiscriminator(resourceOid, objectClass==null?null:objectClass.getTypeName()), + resource, refinedSchema, objectClass); } public String getResourceOid(Trace logger, Task task, OperationResult opResult, TaskRunResult runResult, String ctx) { diff --git a/model/model-intest/src/test/resources/async/grouper-amqp091/resource-grouper-amqp091.xml b/model/model-intest/src/test/resources/async/grouper-amqp091/resource-grouper-amqp091.xml index 3e28c4101c1..91e43c1c1d8 100644 --- a/model/model-intest/src/test/resources/async/grouper-amqp091/resource-grouper-amqp091.xml +++ b/model/model-intest/src/test/resources/async/grouper-amqp091/resource-grouper-amqp091.xml @@ -89,7 +89,6 @@ EXPORTED_GROUP_PREFIX = 'ref:' RELEVANT_SOURCE_ID = 'ldap' - this.binding.variables.each {k,v -> println "$k = $v"} esbEvent = midpoint.getMessageBodyAsMap(message)['esbEvent'][0] log.info('esbEvent = {}', esbEvent) eventType = esbEvent['eventType'] diff --git a/model/model-intest/testng-integration.xml b/model/model-intest/testng-integration.xml index dcdaf99b562..7df29a8f300 100644 --- a/model/model-intest/testng-integration.xml +++ b/model/model-intest/testng-integration.xml @@ -94,6 +94,13 @@ + + + + + + + diff --git a/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningService.java b/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningService.java index 5f75aa57486..2cde8db9657 100644 --- a/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningService.java +++ b/provisioning/provisioning-api/src/main/java/com/evolveum/midpoint/provisioning/api/ProvisioningService.java @@ -204,7 +204,7 @@ int synchronize(ResourceShadowDiscriminator shadowCoordinates, Task task, TaskPa */ String startListeningForAsyncUpdates(ResourceShadowDiscriminator shadowCoordinates, Task task, OperationResult parentResult) throws ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, - ExpressionEvaluationException, SecurityViolationException; + ExpressionEvaluationException; /** * Stops the given listening activity. diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java index 1c962e71f31..fccf27a70cd 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ProvisioningServiceImpl.java @@ -382,7 +382,7 @@ public int synchronize(ResourceShadowDiscriminator shadowCoordinates, Task task, public String startListeningForAsyncUpdates(@NotNull ResourceShadowDiscriminator shadowCoordinates, @NotNull Task task, @NotNull OperationResult parentResult) throws ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, - ExpressionEvaluationException, SecurityViolationException { + ExpressionEvaluationException { String resourceOid = shadowCoordinates.getResourceOid(); Validate.notNull(resourceOid, "Resource oid must not be null."); @@ -394,7 +394,7 @@ public String startListeningForAsyncUpdates(@NotNull ResourceShadowDiscriminator try { LOGGER.trace("Starting listening for async updates for {}", shadowCoordinates); listeningActivityHandle = shadowCache.startListeningForAsyncUpdates(shadowCoordinates, task, result); - } catch (ObjectNotFoundException | CommunicationException | SchemaException | ConfigurationException | ExpressionEvaluationException | RuntimeException | Error | SecurityViolationException e) { + } catch (ObjectNotFoundException | CommunicationException | SchemaException | ConfigurationException | ExpressionEvaluationException | RuntimeException | Error e) { ProvisioningUtil.recordFatalError(LOGGER, result, null, e); result.summarize(true); throw e; diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceObjectConverter.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceObjectConverter.java index 1d0173c64cd..8cd93098f44 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceObjectConverter.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceObjectConverter.java @@ -1859,8 +1859,7 @@ public List fetchChanges(ProvisioningContext ctx, PrismProperty lastT String startListeningForAsyncUpdates(@NotNull ProvisioningContext ctx, @NotNull ChangeListener outerListener, @NotNull OperationResult parentResult) throws SchemaException, - CommunicationException, ConfigurationException, ObjectNotFoundException, ExpressionEvaluationException, - SecurityViolationException { + CommunicationException, ConfigurationException, ObjectNotFoundException, ExpressionEvaluationException { LOGGER.trace("START start listening for async updates, objectClass: {}", ctx.getObjectClassDefinition()); ConnectorInstance connector = ctx.getConnector(AsyncUpdateCapabilityType.class, parentResult); diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java index 8f803d86517..fd7c4e9fc9c 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java @@ -2391,7 +2391,7 @@ public int synchronize(ResourceShadowDiscriminator shadowCoordinates, PrismPrope String startListeningForAsyncUpdates(ResourceShadowDiscriminator shadowCoordinates, Task task, OperationResult parentResult) throws ObjectNotFoundException, CommunicationException, SchemaException, ConfigurationException, - ExpressionEvaluationException, SecurityViolationException { + ExpressionEvaluationException { InternalMonitor.recordCount(InternalCounters.PROVISIONING_ALL_EXT_OPERATION_COUNT); ProvisioningContext ctx = ctxFactory.create(shadowCoordinates, task, parentResult); diff --git a/provisioning/provisioning-impl/testng-integration.xml b/provisioning/provisioning-impl/testng-integration.xml index cd6c0eeda6b..f3a399d2165 100644 --- a/provisioning/provisioning-impl/testng-integration.xml +++ b/provisioning/provisioning-impl/testng-integration.xml @@ -77,6 +77,7 @@ + diff --git a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java index 0ddd9f2eb3d..b1adc4cc199 100644 --- a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java +++ b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java @@ -336,8 +336,7 @@ List fetchChanges(ObjectClassComplexTypeDefinition objectClass, PrismPro */ void dispose(); - default ListeningActivity startListeningForChanges(ChangeListener changeListener, OperationResult parentResult) - throws SchemaException, SecurityViolationException { + default ListeningActivity startListeningForChanges(ChangeListener changeListener, OperationResult parentResult) throws SchemaException { throw new UnsupportedOperationException(); } } diff --git a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/AsyncUpdateConnectorInstance.java b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/AsyncUpdateConnectorInstance.java index 3241faa2951..87980f973d4 100644 --- a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/AsyncUpdateConnectorInstance.java +++ b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/AsyncUpdateConnectorInstance.java @@ -32,7 +32,6 @@ import com.evolveum.midpoint.security.api.SecurityContextManagerAware; import com.evolveum.midpoint.task.api.StateReporter; import com.evolveum.midpoint.util.exception.SchemaException; -import com.evolveum.midpoint.util.exception.SecurityViolationException; import com.evolveum.midpoint.util.logging.LoggingUtils; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; @@ -41,6 +40,7 @@ import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.PagedSearchCapabilityType; import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ReadCapabilityType; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.springframework.security.core.Authentication; import javax.xml.namespace.QName; @@ -137,13 +137,9 @@ public void dispose() { @Override public ListeningActivity startListeningForChanges(ChangeListener changeListener, OperationResult parentResult) - throws SchemaException, SecurityViolationException { + throws SchemaException { Authentication authentication = securityContextManager.getAuthentication(); - if (authentication == null) { - throw new SecurityViolationException("No authentication"); - } - ConnectorInstanceListeningActivity listeningActivity = new ConnectorInstanceListeningActivity(changeListener, authentication); try { openListeningActivities.add(listeningActivity); @@ -321,10 +317,10 @@ private class ConnectorInstanceListeningActivity implements ListeningActivity { @NotNull private final List activities = new ArrayList<>(); // do not forget to synchronize on this @NotNull private final ChangeListener changeListener; - @NotNull private final Authentication authentication; + @Nullable private final Authentication authentication; private AsyncUpdateListeningActivityStatusType status; - ConnectorInstanceListeningActivity(@NotNull ChangeListener changeListener, @NotNull Authentication authentication) { + ConnectorInstanceListeningActivity(@NotNull ChangeListener changeListener, @Nullable Authentication authentication) { this.changeListener = changeListener; this.authentication = authentication; } diff --git a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/TransformationalAsyncUpdateMessageListener.java b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/TransformationalAsyncUpdateMessageListener.java index 0053d9cd624..0989aae6a88 100644 --- a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/TransformationalAsyncUpdateMessageListener.java +++ b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/TransformationalAsyncUpdateMessageListener.java @@ -40,6 +40,7 @@ import com.evolveum.prism.xml.ns._public.types_3.ChangeTypeType; import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.springframework.security.core.Authentication; import javax.xml.namespace.QName; @@ -62,11 +63,11 @@ public class TransformationalAsyncUpdateMessageListener implements AsyncUpdateMe private static final QName VAR_MESSAGE = new QName("message"); @NotNull private final ChangeListener changeListener; - @NotNull private final Authentication authentication; + @Nullable private final Authentication authentication; @NotNull private final AsyncUpdateConnectorInstance connectorInstance; TransformationalAsyncUpdateMessageListener(@NotNull ChangeListener changeListener, - @NotNull Authentication authentication, + @Nullable Authentication authentication, @NotNull AsyncUpdateConnectorInstance connectorInstance) { this.changeListener = changeListener; this.authentication = authentication;