From 5c738fc64cd30d1b2529ba3c58fd787805c041be Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Tue, 18 Nov 2025 14:31:05 +0100 Subject: [PATCH 1/6] Upgrade to Jackson 3 Use Jackson 3 instead of Jackson 2 in our entire codebase Using JsonMapper builder and JsonMapper.shared() in appropriate places Use Jackson 3 with Spring Web --- .../api/repository/AppDeploymentResponse.java | 2 +- .../rest/DispatcherServletConfiguration.java | 8 +++--- .../conf/common/JacksonConfiguration.java | 7 ++--- .../rest/service/BaseSpringRestTestCase.java | 15 +++++----- .../repository/AppDefinitionResourceTest.java | 4 +-- .../DeploymentCollectionResourceTest.java | 2 +- .../DeploymentResourceResourceTest.java | 2 +- .../repository/DeploymentResourceTest.java | 2 +- .../DeploymentResourcesResourceTest.java | 2 +- .../autodeployment/SpringAutoDeployTest.java | 5 ++-- modules/flowable-app-engine/pom.xml | 1 + .../deployer/AppResourceConverterImpl.java | 2 +- .../CustomAppResourceConverter.java | 2 +- ...xAllowedShortStringVariableLengthTest.java | 5 ---- .../MaxAllowedVariableLengthTest.java | 4 +-- .../service/BatchServiceConfiguration.java | 2 +- .../xml/ValuedDataObjectConverterTest.java | 2 +- modules/flowable-bpmn-model/pom.xml | 4 +-- .../flowable/bpmn/model/JsonDataObject.java | 28 +++++++------------ .../api/DecisionTableVariableManager.java | 2 +- .../org/flowable/cmmn/test/CaseTaskTest.java | 8 +++--- .../flowable/cmmn/test/ProcessTaskTest.java | 8 +++--- modules/flowable-cmmn-engine/pom.xml | 1 + ...cLeaveActivePlanItemInstanceOperation.java | 12 ++------ ...aluateVariableEventListenersOperation.java | 2 +- .../impl/DecisionTaskActivityBehavior.java | 8 +++--- .../impl/HumanTaskActivityBehavior.java | 2 +- ...ariableEventListenerActivityBehaviour.java | 2 +- ...etCaseInstanceMigrationBatchResultCmd.java | 8 +++--- .../JsonPlanItemVariableAggregator.java | 8 +++--- .../impl/delete/BatchDeleteCaseConfig.java | 16 +++-------- ...leteHistoricCaseInstanceIdsJobHandler.java | 4 +-- ...leteHistoricCaseInstanceIdsJobHandler.java | 17 ++++------- ...storicCaseInstanceIdsStatusJobHandler.java | 14 +++------- ...oricCaseInstancesSequentialJobHandler.java | 4 +-- ...eHistoricCaseInstancesUsingBatchesCmd.java | 4 +-- ...stractCaseInstanceMigrationJobHandler.java | 16 +++++------ ...LeaveActivePlanItemInstanceJobHandler.java | 2 +- .../job/CaseInstanceMigrationJobHandler.java | 2 +- ...storicCaseInstanceMigrationJobHandler.java | 2 +- ...aseInstanceMigrationDocumentConverter.java | 24 ++++++++-------- ...aseInstanceMigrationDocumentConverter.java | 19 ++++++------- .../entity/CaseInstanceEntityImpl.java | 2 +- .../entity/PlanItemInstanceEntityImpl.java | 2 +- .../cmmn/engine/impl/task/TaskHelper.java | 2 +- .../impl/util/CmmnLoggingSessionUtil.java | 6 ++-- .../engine/impl/util/IOParameterUtil.java | 2 +- .../engine/impl/util/IdentityLinkUtil.java | 2 +- .../el/VariableFunctionDelegatesTest.java | 4 +-- ...AbstractCmmnEventRegistryConsumerTest.java | 25 ++++------------- .../CmmnEventRegistryConsumerTest.java | 4 +-- .../CmmnHeaderEventRegistryConsumerTest.java | 13 +++------ ...tiTenantCmmnEventRegistryConsumerTest.java | 17 +++-------- .../MultiTenantSendEventTaskTest.java | 2 +- .../test/eventregistry/SendEventTaskTest.java | 2 +- ...ameWithRepetitionBasedOnJsonArrayTest.java | 3 +- .../RepetitionVariableAggregationTest.java | 6 ++-- .../PlanItemLifecycleListenerTest.java | 2 +- .../test/logging/FlowableLoggingListener.java | 2 +- .../test/logging/ServiceTaskLoggingTest.java | 2 +- .../cmmn/test/runtime/CaseTaskTest.java | 8 +++--- .../cmmn/test/runtime/HumanTaskTest.java | 2 +- .../runtime/MaxAllowedVariableLengthTest.java | 2 +- .../flowable/cmmn/test/runtime/StageTest.java | 2 +- .../cmmn/test/task/CmmnMailTaskTest.java | 3 +- .../service/api/CmmnRestResponseFactory.java | 2 +- .../service/api/engine/EventResponse.java | 3 +- .../caze/HistoricCaseInstanceResponse.java | 2 +- .../HistoricMilestoneInstanceResponse.java | 2 +- .../HistoricPlanItemInstanceResponse.java | 2 +- .../task/HistoricTaskInstanceResponse.java | 2 +- .../api/management/HistoryJobResponse.java | 2 +- .../service/api/management/JobResponse.java | 2 +- .../repository/CmmnDeploymentResponse.java | 2 +- .../runtime/caze/BaseVariableResource.java | 4 +-- .../runtime/caze/CaseInstanceResponse.java | 2 +- .../caze/CaseInstanceVariableResource.java | 2 +- .../caze/EventSubscriptionResponse.java | 2 +- .../planitem/PlanItemInstanceResponse.java | 2 +- .../api/runtime/task/TaskResponse.java | 2 +- .../task/TaskVariableCollectionResource.java | 2 +- .../runtime/task/TaskVariableResource.java | 2 +- .../rest/DispatcherServletConfiguration.java | 8 +++--- .../engine/variable/QueryVariableTest.java | 2 +- .../TaskSubTaskCollectionResourceTest.java | 2 +- .../MockFormHandlerRestApiInterceptor.java | 4 +-- .../conf/common/JacksonConfiguration.java | 7 ++--- .../rest/conf/common/RestConfiguration.java | 2 +- .../rest/conf/engine/EngineConfiguration.java | 3 +- .../rest/service/BaseSpringRestTestCase.java | 6 ++-- ...ricCaseInstanceCollectionResourceTest.java | 7 ++--- ...nceIdentityLinkCollectionResourceTest.java | 2 +- ...HistoricCaseInstanceQueryResourceTest.java | 6 ++-- .../HistoricCaseInstanceResourceTest.java | 4 +-- ...istoricMilestoneInstanceResourcesTest.java | 4 +-- ...HistoricPlanItemInstanceResourcesTest.java | 4 +-- ...ricTaskInstanceCollectionResourceTest.java | 5 ++-- ...nceIdentityLinkCollectionResourceTest.java | 2 +- ...HistoricTaskInstanceQueryResourceTest.java | 9 +++--- .../HistoricTaskInstanceResourceTest.java | 2 +- ...ariableInstanceCollectionResourceTest.java | 5 ++-- ...oricVariableInstanceQueryResourceTest.java | 9 +++--- .../management/JobCollectionResourceTest.java | 4 +-- .../api/management/JobResourceTest.java | 5 ++-- .../CaseDefinitionCollectionResourceTest.java | 2 +- ...seDefinitionIdentityLinksResourceTest.java | 4 +-- .../CaseDefinitionResourceTest.java | 4 +-- .../DeploymentCollectionResourceTest.java | 2 +- .../DeploymentResourceResourceTest.java | 2 +- .../repository/DeploymentResourceTest.java | 2 +- .../DeploymentResourcesResourceTest.java | 2 +- .../CaseInstanceCollectionResourceTest.java | 6 ++-- .../CaseInstanceIdentityLinkResourceTest.java | 2 +- .../CaseInstanceQueryResourceTest.java | 6 ++-- .../api/runtime/CaseInstanceResourceTest.java | 7 ++--- .../CaseInstanceVariableResourceTest.java | 4 +-- ...stanceVariablesCollectionResourceTest.java | 6 ++-- .../EventSubscriptionResourceTest.java | 2 +- ...lanItemInstanceCollectionResourceTest.java | 2 +- .../PlanItemInstanceQueryResourceTest.java | 6 ++-- .../runtime/PlanItemInstanceResourceTest.java | 2 +- ...nstanceVariableCollectionResourceTest.java | 6 ++-- .../runtime/PlanItemVariableResourceTest.java | 4 +-- .../runtime/TaskCollectionResourceTest.java | 4 +-- .../runtime/TaskIdentityLinkResourceTest.java | 4 +-- .../api/runtime/TaskQueryResourceTest.java | 4 +-- .../service/api/runtime/TaskResourceTest.java | 7 ++--- .../api/runtime/TaskVariableResourceTest.java | 4 +-- .../TaskVariablesCollectionResourceTest.java | 6 ++-- ...ariableInstanceCollectionResourceTest.java | 5 ++-- .../VariableInstanceQueryResourceTest.java | 9 +++--- modules/flowable-common-rest/pom.xml | 7 +---- .../rest/util/DateToStringSerializer.java | 14 ++++------ .../JsonObjectRestVariableConverter.java | 6 ++-- .../impl/webservice/WebServiceTaskTest.java | 8 +++--- modules/flowable-dependencies/pom.xml | 8 ++++++ .../dmn/test/runtime/DecisionTaskTest.java | 10 +++---- .../dmn/test/runtime/DmnTaskTest.java | 10 +++---- .../dmn/engine/RuleEngineExecutor.java | 2 +- .../engine/impl/RuleEngineExecutorImpl.java | 2 +- .../PersistHistoricDecisionExecutionCmd.java | 5 ++-- .../engine/impl/el/util/CollectionUtil.java | 2 +- .../dmn/engine/impl/el/util/DMNParseUtil.java | 4 +-- .../impl/el/util/CollectionUtilTest.java | 10 +++---- .../dmn/engine/test/history/HistoryTest.java | 2 +- .../test/runtime/CollectionsContainsTest.java | 6 ++-- .../dmn/engine/test/runtime/RuntimeTest.java | 2 +- modules/flowable-dmn-model/pom.xml | 6 +--- .../api/repository/DmnDeploymentResponse.java | 2 +- .../rest/DispatcherServletConfiguration.java | 13 --------- .../conf/common/JacksonConfiguration.java | 7 ++--- .../api/BaseSpringDmnRestTestCase.java | 14 +++++----- .../decision/DmnRuleServiceResourceTest.java | 6 ++-- ...ecisionExecutionAuditDataResourceTest.java | 9 ++---- .../repository/DecisionModelResourceTest.java | 2 +- .../api/repository/DecisionResourceTest.java | 2 +- .../DecisionTableModelResourceTest.java | 2 +- .../repository/DecisionTableResourceTest.java | 2 +- .../DmnDeploymentCollectionResourceTest.java | 2 +- .../repository/DmnDeploymentResourceTest.java | 2 +- modules/flowable-engine-common/pom.xml | 6 +--- .../impl/AbstractEngineConfiguration.java | 7 ++--- .../impl/AbstractServiceConfiguration.java | 2 +- .../engine/impl/assignment/CandidateUtil.java | 4 +-- .../engine/impl/el/JsonNodeELResolver.java | 10 +++---- ...VariableContainsAnyExpressionFunction.java | 2 +- .../VariableContainsExpressionFunction.java | 4 +-- .../VariableIsEmptyExpressionFunction.java | 2 +- .../impl/interceptor/CommandContext.java | 2 +- .../CommandContextInterceptor.java | 2 +- .../engine/impl/logging/LoggingListener.java | 2 +- .../engine/impl/logging/LoggingSession.java | 4 +-- ...ingSessionCommandContextCloseListener.java | 4 +-- .../impl/logging/LoggingSessionFactory.java | 2 +- .../logging/LoggingSessionLoggerOutput.java | 2 +- .../impl/logging/LoggingSessionUtil.java | 4 +-- modules/flowable-engine/pom.xml | 2 ++ .../engine/DecisionTableVariableManager.java | 2 +- .../flowable/engine/DynamicBpmnService.java | 2 +- .../Flowable5CompatibilityHandler.java | 2 +- .../engine/dynamic/BasePropertiesParser.java | 8 +++--- .../dynamic/DefaultPropertiesParser.java | 4 +-- .../DynamicProcessDefinitionSummary.java | 6 ++-- .../engine/dynamic/PropertiesParser.java | 4 +-- .../dynamic/ScriptTaskPropertiesParser.java | 4 +-- .../dynamic/UserTaskPropertiesParser.java | 4 +-- .../DefaultProcessLocalizationManager.java | 4 +-- .../engine/impl/DynamicBpmnServiceImpl.java | 8 +++--- .../engine/impl/ExecutionQueryImpl.java | 4 +-- ...ableListenerEventDefinitionsOperation.java | 2 +- .../impl/app/AppResourceConverterImpl.java | 2 +- ...VariableListenerEventActivityBehavior.java | 2 +- .../bpmn/behavior/CallActivityBehavior.java | 2 +- .../bpmn/behavior/DmnActivityBehavior.java | 8 +++--- ...VariableListenerEventActivityBehavior.java | 2 +- .../MultiInstanceActivityBehavior.java | 4 +-- .../behavior/ScriptTaskActivityBehavior.java | 2 +- ...askDelegateExpressionActivityBehavior.java | 2 +- ...ServiceTaskExpressionActivityBehavior.java | 2 +- .../bpmn/behavior/TaskActivityBehavior.java | 4 +-- .../behavior/UserTaskActivityBehavior.java | 6 ++-- .../bpmn/data/FieldBaseStructureInstance.java | 8 +++--- .../TransformationDataOutputAssociation.java | 21 ++++++-------- .../impl/bpmn/deployer/BpmnDeployer.java | 4 +-- .../deployer/CachingAndArtifactsManager.java | 4 +-- .../impl/bpmn/helper/ClassDelegate.java | 2 +- .../impl/bpmn/helper/DynamicPropertyUtil.java | 4 +-- .../impl/bpmn/helper/SkipExpressionUtil.java | 4 +-- .../cfg/DefaultTaskLocalizationManager.java | 4 +-- .../engine/impl/cmd/GetDataObjectCmd.java | 4 +-- .../engine/impl/cmd/GetDataObjectsCmd.java | 4 +-- .../impl/cmd/GetProcessDefinitionInfoCmd.java | 2 +- ...rocessInstanceMigrationBatchResultCmd.java | 8 +++--- .../engine/impl/cmd/GetTaskDataObjectCmd.java | 4 +-- .../impl/cmd/GetTaskDataObjectsCmd.java | 4 +-- .../cmd/SaveProcessDefinitionInfoCmd.java | 4 +-- .../impl/context/BpmnOverrideContext.java | 2 +- .../impl/delegate/JsonVariableAggregator.java | 8 +++--- .../impl/delete/BatchDeleteProcessConfig.java | 16 +++-------- ...eHistoricProcessInstanceIdsJobHandler.java | 4 +-- ...eHistoricProcessInstanceIdsJobHandler.java | 18 ++++-------- ...ricProcessInstanceIdsStatusJobHandler.java | 14 +++------- ...cProcessInstancesSequentialJobHandler.java | 4 +-- ...storicProcessInstancesUsingBatchesCmd.java | 4 +-- .../engine/impl/event/logger/EventLogger.java | 2 +- ...stractDatabaseEventLoggerEventHandler.java | 2 +- .../handler/EventLoggerEventHandler.java | 2 +- .../logger/handler/VariableEventHandler.java | 9 +++--- ...actProcessInstanceMigrationJobHandler.java | 16 +++++------ .../jobexecutor/AsyncLeaveJobHandler.java | 24 +++++----------- .../ProcessInstanceMigrationJobHandler.java | 2 +- ...TimerActivateProcessDefinitionHandler.java | 2 +- ...ssDefinitionSuspensionStateJobHandler.java | 4 +-- .../impl/jobexecutor/TimerEventHandler.java | 25 ++++++++--------- .../TimerSuspendProcessDefinitionHandler.java | 2 +- .../ProcessInstanceMigrationDocumentImpl.java | 2 +- .../deploy/ProcessDefinitionInfoCache.java | 4 +-- .../ProcessDefinitionInfoCacheObject.java | 2 +- .../entity/ExecutionEntityImpl.java | 2 +- .../entity/SuspensionStateUtil.java | 2 +- ...tProcessDefinitionLocalizationManager.java | 4 +-- .../impl/test/AbstractFlowableTestCase.java | 17 ++++------- .../impl/util/BpmnLoggingSessionUtil.java | 6 ++-- .../engine/impl/util/IOParameterUtil.java | 2 +- .../engine/impl/util/IdentityLinkUtil.java | 2 +- .../impl/util/ProcessInstanceHelper.java | 2 +- .../flowable/engine/impl/util/TaskHelper.java | 2 +- .../impl/util/condition/ConditionUtil.java | 4 +-- ...essInstanceMigrationDocumentConverter.java | 22 +++++++-------- .../api/event/DatabaseEventLoggerTest.java | 16 +++++------ .../HistoricProcessInstanceQueryTest.java | 2 +- .../test/api/history/HistoryServiceTest.java | 2 +- .../ProcessDefinitionQueryTest.java | 2 +- .../test/api/runtime/ExecutionQueryTest.java | 2 +- .../api/runtime/ProcessInstanceQueryTest.java | 2 +- ...nceMigrationEventRegistryConsumerTest.java | 11 ++------ .../migration/ConvertProcessVariable.java | 4 +-- ...essInstanceMigrationMultiInstanceTest.java | 4 +-- .../ProcessInstanceMigrationTest.java | 14 +++++----- .../test/api/task/TaskIdentityLinksTest.java | 2 +- .../engine/test/api/task/TaskQueryTest.java | 2 +- ...VariableInstanceValueModifierBpmnTest.java | 11 ++------ .../test/api/variables/VariablesTest.java | 2 +- .../dynamic/DynamicCandidateGroupsTest.java | 2 +- .../DynamicProcessDefinitionSummaryTest.java | 4 +-- .../bpmn/gateway/InclusiveGatewayTest.java | 2 +- .../test/bpmn/mail/EmailServiceTaskTest.java | 4 +-- .../DynamicMultiInstanceTest.java | 2 +- .../multiinstance/JSONCollectionHandler.java | 4 +-- .../MultiInstanceNoWaitStatesTest.java | 6 ++-- .../MultiInstanceVariableAggregationTest.java | 8 +++--- .../ParallelMultiInstanceAsyncTest.java | 5 ++-- .../bpmn/multiinstance/TestJsonDelegate.java | 2 +- .../ConditionalSequenceFlowTest.java | 2 +- .../servicetask/DynamicServiceTaskTest.java | 2 +- .../CallActivityInOutMappingTest.java | 8 +++--- .../DisabledDefinitionInfoCacheTest.java | 2 +- .../bpmn/usertask/DynamicUserTaskTest.java | 2 +- .../TaskAssignmentExtensionsTest.java | 2 +- .../engine/test/el/ExpressionManagerTest.java | 4 +-- .../JsonVariableContainerExpressionTest.java | 3 +- ...AbstractBpmnEventRegistryConsumerTest.java | 11 ++------ .../BpmnEventRegistryConsumerTest.java | 2 +- .../BpmnHeaderEventRegistryConsumerTest.java | 21 ++++---------- .../EventPayloadTypesConversionTest.java | 13 +++------ .../EventRegistryEventSubprocessTest.java | 11 ++------ ...tiTenantBpmnEventRegistryConsumerTest.java | 17 +++-------- .../MultiTenantSendEventTaskTest.java | 9 +++--- .../test/eventregistry/SendEventTaskTest.java | 6 ++-- .../flowable/engine/test/json/JsonTest.java | 11 ++++---- .../test/logging/FlowableLoggingListener.java | 2 +- .../test/logging/ServiceTaskLoggingTest.java | 4 +-- .../engine/test/logging/TimerLoggingTest.java | 2 +- .../MaxAllowedVariableLengthTest.java | 2 +- .../bpmn/callactivity/CallActivityTest.java | 2 +- .../bpmn/scripttask/ScriptTaskTest.java | 2 +- .../examples/variables/VariablesTest.java | 2 +- .../EntityLinkServiceConfiguration.java | 2 +- ...pmnWithEventRegistryTestConfiguration.java | 6 ++-- .../CaseWithEventRegistryTest.java | 4 +-- ...mmnWithEventRegistryTestConfiguration.java | 6 ++-- .../integrationtest/JmsConfiguration.java | 2 +- .../ProcessWithEventRegistryTest.java | 5 ++-- .../pom.xml | 6 +--- .../json/converter/ChannelJsonConverter.java | 16 ++++------- .../json/converter/EventJsonConverter.java | 12 ++++---- .../converter/EventJsonConverterTest.java | 2 -- modules/flowable-event-registry-model/pom.xml | 4 +-- .../model/ChannelEventTenantIdDetection.java | 2 ++ .../eventregistry/model/ChannelModel.java | 2 +- .../api/EventRegistryRestResponseFactory.java | 2 +- .../repository/ChannelDefinitionResponse.java | 2 +- .../repository/EventDeploymentResponse.java | 2 +- .../runtime/EventInstanceCreateRequest.java | 3 +- .../rest/DispatcherServletConfiguration.java | 8 +++--- .../rest/TestInboundEventChannelAdapter.java | 11 ++------ .../conf/common/JacksonConfiguration.java | 7 ++--- .../rest/conf/common/RestConfiguration.java | 2 +- .../rest/conf/engine/EngineConfiguration.java | 3 +- .../rest/service/BaseSpringRestTestCase.java | 6 ++-- ...annelDefinitionCollectionResourceTest.java | 2 +- .../ChannelDefinitionResourceTest.java | 2 +- .../DeploymentCollectionResourceTest.java | 2 +- .../DeploymentResourceResourceTest.java | 2 +- .../repository/DeploymentResourceTest.java | 2 +- .../DeploymentResourcesResourceTest.java | 2 +- .../EventDefinitionResourceTest.java | 2 +- .../EventInstanceCollectionResourceTest.java | 2 +- .../spring/jms/JmsChannelModelProcessor.java | 2 +- .../KafkaChannelDefinitionProcessor.java | 2 +- .../RabbitChannelDefinitionProcessor.java | 2 +- .../jms/EventRegistryJmsConfiguration.java | 5 ++-- .../EventRegistryKafkaConfiguration.java | 5 ++-- .../EventRegistryRabbitConfiguration.java | 5 ++-- modules/flowable-event-registry/pom.xml | 5 +--- ...JsonFieldBasedInboundEventKeyDetector.java | 2 +- ...onPointerBasedInboundEventKeyDetector.java | 6 ++-- .../InboundChannelDefinitionBuilderImpl.java | 2 +- .../JsonFieldToMapPayloadExtractor.java | 2 +- ...xpressionInboundChannelModelProcessor.java | 2 +- ...pressionOutboundChannelModelProcessor.java | 2 +- .../InboundChannelModelProcessor.java | 4 +-- .../OutboundChannelModelProcessor.java | 2 +- .../EventPayloadToJsonStringSerializer.java | 13 +++++---- .../StringToJsonDeserializer.java | 9 +++--- ...ointerBasedInboundEventTenantDetector.java | 4 +-- .../test/DefaultEventRegistryTest.java | 19 +++---------- .../test/deployment/DeploymentTest.java | 2 +- ...EventSubscriptionServiceConfiguration.java | 2 +- modules/flowable-external-job-rest/pom.xml | 10 ------- .../api/ExternalJobRestResponseFactory.java | 2 +- .../api/query/ExternalWorkerJobResponse.java | 2 +- .../conf/CmmnEngineTestConfiguration.java | 17 ----------- .../DispatcherServletConfiguration.java | 9 +++--- .../ExternalWorkerAcquireJobResourceTest.java | 8 +++--- ...xternalWorkerUnacquireJobResourceTest.java | 4 +-- modules/flowable-form-api/pom.xml | 6 +--- modules/flowable-form-model/pom.xml | 8 ------ modules/flowable-http-common/pom.xml | 2 +- .../common/impl/BaseHttpActivityDelegate.java | 8 ++---- modules/flowable-http/pom.xml | 8 ------ .../http/bpmn/HttpServiceTaskTest.java | 4 +-- .../http/bpmn/HttpServiceTaskTestServer.java | 9 +++--- .../bpmn/ParametrizedHttpResponseHandler.java | 7 +++-- .../http/bpmn/SimpleHttpResponseHandler.java | 7 +++-- .../IdentityLinkServiceConfiguration.java | 2 +- .../job/service/JobServiceConfiguration.java | 2 +- .../impl/asyncexecutor/DefaultJobManager.java | 2 +- .../async/util/AsyncHistoryJsonUtil.java | 4 +-- modules/flowable-mail/pom.xml | 2 +- .../common/impl/BaseMailActivityDelegate.java | 4 +-- .../osgi/blueprint/BlueprintBasicTest.java | 4 +-- .../rest/service/api/RestResponseFactory.java | 2 +- .../api/engine/AttachmentResponse.java | 2 +- .../service/api/engine/CommentResponse.java | 2 +- .../service/api/engine/EventResponse.java | 3 +- .../HistoricActivityInstanceResponse.java | 2 +- .../api/history/HistoricDetailResponse.java | 2 +- .../HistoricProcessInstanceResponse.java | 2 +- .../history/HistoricTaskInstanceResponse.java | 2 +- .../history/HistoricTaskLogEntryResponse.java | 2 +- .../api/management/BatchPartResponse.java | 2 +- .../service/api/management/BatchResponse.java | 2 +- .../api/management/HistoryJobResponse.java | 2 +- .../service/api/management/JobResponse.java | 2 +- .../api/repository/DeploymentResponse.java | 2 +- .../service/api/repository/ModelResponse.java | 2 +- .../process/ActivityInstanceResponse.java | 2 +- .../BaseVariableCollectionResource.java | 2 +- .../process/EventSubscriptionResponse.java | 2 +- .../process/ExecutionVariableResource.java | 2 +- .../process/ProcessInstanceResponse.java | 2 +- .../ProcessInstanceVariableResource.java | 2 +- .../TaskAttachmentCollectionResource.java | 2 +- .../api/runtime/task/TaskResponse.java | 2 +- .../task/TaskVariableCollectionResource.java | 2 +- .../runtime/task/TaskVariableResource.java | 2 +- .../rest/DispatcherServletConfiguration.java | 12 -------- .../engine/variable/QueryVariableTest.java | 2 +- .../HistoricDetailCollectionResourceTest.java | 5 ++-- .../flowable/rest/api/jpa/JpaRestTest.java | 2 +- .../TaskSubTaskCollectionResourceTest.java | 2 +- .../MockFormHandlerRestApiInterceptor.java | 4 +-- .../conf/common/JacksonConfiguration.java | 7 ++--- .../rest/conf/common/RestConfiguration.java | 2 +- .../rest/conf/engine/EngineConfiguration.java | 3 +- .../rest/service/BaseSpringRestTestCase.java | 20 ++++++------- .../api/form/FormDataResourceTest.java | 6 ++-- ...ctivityInstanceCollectionResourceTest.java | 5 ++-- ...oricActivityInstanceQueryResourceTest.java | 7 ++--- .../HistoricDetailQueryResourceTest.java | 7 ++--- ...ProcessInstanceCollectionResourceTest.java | 7 ++--- ...ricProcessInstanceCommentResourceTest.java | 4 +-- ...nceIdentityLinkCollectionResourceTest.java | 2 +- ...toricProcessInstanceQueryResourceTest.java | 6 ++-- .../HistoricProcessInstanceResourceTest.java | 2 +- ...ricTaskInstanceCollectionResourceTest.java | 7 ++--- ...nceIdentityLinkCollectionResourceTest.java | 2 +- ...HistoricTaskInstanceQueryResourceTest.java | 10 +++---- .../HistoricTaskInstanceResourceTest.java | 2 +- ...HistoricTaskLogCollectionResourceTest.java | 6 ++-- ...ariableInstanceCollectionResourceTest.java | 5 ++-- ...oricVariableInstanceQueryResourceTest.java | 9 +++--- .../identity/GroupCollectionResourceTest.java | 4 +-- .../identity/GroupMembershipResourceTest.java | 4 +-- .../api/identity/GroupResourceTest.java | 4 +-- .../identity/UserCollectionResourceTest.java | 4 +-- .../api/identity/UserInfoResourceTest.java | 4 +-- .../api/identity/UserResourceTest.java | 4 +-- .../BatchCollectionResourceTest.java | 2 +- .../BatchPartCollectionResourceTest.java | 4 +-- .../EnginePropertiesResourceTest.java | 4 +-- .../management/JobCollectionResourceTest.java | 6 ++-- .../api/management/JobResourceTest.java | 4 +-- .../PropertiesCollectionResourceTest.java | 2 +- .../management/TableColumnsResourceTest.java | 4 +-- .../api/management/TableDataResourceTest.java | 2 +- .../api/management/TableResourceTest.java | 4 +-- .../DeploymentCollectionResourceTest.java | 2 +- .../DeploymentResourceResourceTest.java | 2 +- .../repository/DeploymentResourceTest.java | 2 +- .../DeploymentResourcesResourceTest.java | 2 +- .../ModelCollectionResourceTest.java | 4 +-- .../api/repository/ModelResourceTest.java | 4 +-- ...ocessDefinitionCollectionResourceTest.java | 2 +- ...ssDefinitionIdentityLinksResourceTest.java | 4 +-- .../ProcessDefinitionResourceTest.java | 4 +-- ...ctivityInstanceCollectionResourceTest.java | 5 ++-- .../ActivityInstanceQueryResourceTest.java | 7 ++--- ...ctiveActivitiesCollectionResourceTest.java | 2 +- .../ExecutionCollectionResourceTest.java | 4 +-- .../runtime/ExecutionQueryResourceTest.java | 4 +-- .../api/runtime/ExecutionResourceTest.java | 6 ++-- .../ExecutionVariableResourceTest.java | 4 +-- ...stanceChangeActivityStateResourceTest.java | 4 +-- ...ProcessInstanceCollectionResourceTest.java | 6 ++-- ...ocessInstanceIdentityLinkResourceTest.java | 4 +-- .../ProcessInstanceQueryResourceTest.java | 6 ++-- .../runtime/ProcessInstanceResourceTest.java | 4 +-- .../ProcessInstanceVariableResourceTest.java | 4 +-- ...stanceVariablesCollectionResourceTest.java | 6 ++-- .../api/runtime/SignalsResourceTest.java | 6 ++-- .../runtime/TaskAttachmentResourceTest.java | 4 +-- .../runtime/TaskCollectionResourceTest.java | 4 +-- .../api/runtime/TaskCommentResourceTest.java | 4 +-- .../api/runtime/TaskEventResourceTest.java | 2 +- .../runtime/TaskIdentityLinkResourceTest.java | 4 +-- .../api/runtime/TaskQueryResourceTest.java | 6 ++-- .../service/api/runtime/TaskResourceTest.java | 6 ++-- .../api/runtime/TaskVariableResourceTest.java | 4 +-- .../TaskVariablesCollectionResourceTest.java | 6 ++-- ...ariableInstanceCollectionResourceTest.java | 5 ++-- .../VariableInstanceQueryResourceTest.java | 9 +++--- .../spring/boot/RestApiApplicationTest.java | 2 +- .../pom.xml | 10 +++---- .../boot/DispatcherServletConfiguration.java | 8 +++--- .../boot/ProcessEngineAutoConfiguration.java | 2 +- .../boot/app/AppEngineAutoConfiguration.java | 2 +- .../cmmn/CmmnEngineAutoConfiguration.java | 2 +- .../cmmn/CmmnEngineRestConfiguration.java | 2 +- .../boot/dmn/DmnEngineAutoConfiguration.java | 2 +- .../EventRegistryAutoConfiguration.java | 2 +- .../EventRegistryRestConfiguration.java | 2 +- .../job/ExternalJobRestConfiguration.java | 2 +- .../ProcessEngineRestConfiguration.java | 2 +- .../cmmn/CmmnEngineAutoConfigurationTest.java | 10 +++---- .../dmn/DmnEngineAutoConfigurationTest.java | 8 +++--- .../EventRegistryAutoConfigurationTest.java | 4 +-- .../ProcessEngineAutoConfigurationTest.java | 8 +++--- .../pom.xml | 4 --- .../pom.xml | 4 --- .../pom.xml | 4 --- .../pom.xml | 4 --- .../TestInboundEventChannelAdapter.java | 14 ++++------ .../persistence/entity/TaskEntityImpl.java | 2 +- .../entity/TaskEntityManagerImpl.java | 2 +- .../persistence/entity/VariableScopeImpl.java | 2 +- .../variable/service/impl/types/JsonType.java | 4 +-- .../impl/util/VariableLoggingSessionUtil.java | 6 ++-- .../DefaultFlowable5CompatibilityHandler.java | 2 +- modules/flowable5-engine/pom.xml | 1 + .../activiti/engine/DynamicBpmnService.java | 2 +- .../engine/dynamic/BasePropertiesParser.java | 8 +++--- .../dynamic/DefaultPropertiesParser.java | 4 +-- .../engine/dynamic/PropertiesParser.java | 4 +-- .../dynamic/ScriptTaskPropertiesParser.java | 4 +-- .../dynamic/UserTaskPropertiesParser.java | 4 +-- .../engine/impl/DynamicBpmnServiceImpl.java | 8 +++--- .../engine/impl/ExecutionQueryImpl.java | 4 +-- .../HistoricProcessInstanceQueryImpl.java | 4 +-- .../impl/HistoricTaskInstanceQueryImpl.java | 4 +-- .../engine/impl/ProcessInstanceQueryImpl.java | 4 +-- .../activiti/engine/impl/TaskQueryImpl.java | 4 +-- .../behavior/ScriptTaskActivityBehavior.java | 2 +- ...askDelegateExpressionActivityBehavior.java | 2 +- ...ServiceTaskExpressionActivityBehavior.java | 2 +- .../behavior/UserTaskActivityBehavior.java | 4 +-- .../impl/bpmn/deployer/BpmnDeployer.java | 6 ++-- .../impl/bpmn/helper/ClassDelegate.java | 2 +- .../cfg/ProcessEngineConfigurationImpl.java | 2 +- .../impl/cmd/GetProcessDefinitionInfoCmd.java | 2 +- .../cmd/SaveProcessDefinitionInfoCmd.java | 4 +-- .../activiti/engine/impl/context/Context.java | 2 +- .../impl/el/UelExpressionCondition.java | 4 +-- .../engine/impl/event/logger/EventLogger.java | 2 +- ...stractDatabaseEventLoggerEventHandler.java | 2 +- .../handler/EventLoggerEventHandler.java | 2 +- .../logger/handler/VariableEventHandler.java | 9 +++--- ...TimerActivateProcessDefinitionHandler.java | 2 +- ...ssDefinitionSuspensionStateJobHandler.java | 4 +-- .../impl/jobexecutor/TimerEventHandler.java | 8 +++--- .../TimerSuspendProcessDefinitionHandler.java | 2 +- .../deploy/ProcessDefinitionInfoCache.java | 4 +-- .../ProcessDefinitionInfoCacheObject.java | 2 +- .../impl/scripting/ScriptCondition.java | 4 +-- .../api/event/DatabaseEventLoggerTest.java | 7 +++-- .../StandaloneDatabaseEventLoggerTest.java | 7 +++-- .../HistoricProcessInstanceQueryTest.java | 2 +- .../test/api/history/HistoryServiceTest.java | 2 +- .../test/api/runtime/ExecutionQueryTest.java | 2 +- .../api/runtime/ProcessInstanceQueryTest.java | 2 +- .../engine/test/api/task/TaskQueryTest.java | 2 +- .../dynamic/DynamicCandidateGroupsTest.java | 2 +- .../DynamicProcessDefinitionSummaryTest.java | 6 ++-- .../ConditionalSequenceFlowTest.java | 2 +- .../servicetask/DynamicServiceTaskTest.java | 2 +- .../DisabledDefinitionInfoCacheTest.java | 2 +- .../bpmn/usertask/DynamicUserTaskTest.java | 2 +- .../activiti/engine/test/json/JsonTest.java | 9 +++--- .../bpmn/scripttask/ScriptTaskTest.java | 2 +- 550 files changed, 1151 insertions(+), 1449 deletions(-) diff --git a/modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/repository/AppDeploymentResponse.java b/modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/repository/AppDeploymentResponse.java index 8b4b5309d02..34423c4f84b 100644 --- a/modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/repository/AppDeploymentResponse.java +++ b/modules/flowable-app-engine-rest/src/main/java/org/flowable/app/rest/service/api/repository/AppDeploymentResponse.java @@ -17,7 +17,7 @@ import org.flowable.app.api.repository.AppDeployment; import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/DispatcherServletConfiguration.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/DispatcherServletConfiguration.java index 8c7cae11a9b..416fc7c4790 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/DispatcherServletConfiguration.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/DispatcherServletConfiguration.java @@ -17,19 +17,19 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; @Configuration(proxyBeanMethods = false) @ComponentScan({ "org.flowable.app.rest.service.api" }) public class DispatcherServletConfiguration extends WebMvcConfigurationSupport { @Autowired - private ObjectMapper objectMapper; + private JsonMapper objectMapper; @Bean public MultipartResolver multipartResolver() { @@ -38,7 +38,7 @@ public MultipartResolver multipartResolver() { @Override protected void configureMessageConverters(HttpMessageConverters.ServerBuilder builder) { - builder.withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)); + builder.withJsonConverter(new JacksonJsonHttpMessageConverter(objectMapper)); } } diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/conf/common/JacksonConfiguration.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/conf/common/JacksonConfiguration.java index 9870f7f89bd..33a2edb39de 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/conf/common/JacksonConfiguration.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/conf/common/JacksonConfiguration.java @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -24,10 +24,9 @@ public class JacksonConfiguration { @Bean() - public ObjectMapper objectMapper() { + public JsonMapper objectMapper() { // To avoid instantiating and configuring the mapper everywhere - ObjectMapper mapper = new ObjectMapper(); - return mapper; + return JsonMapper.shared(); } } diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/BaseSpringRestTestCase.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/BaseSpringRestTestCase.java index 74c84159ac5..bb637ea4496 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/BaseSpringRestTestCase.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/BaseSpringRestTestCase.java @@ -60,10 +60,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; @SpringJUnitWebConfig(ApplicationConfiguration.class) @ExtendWith(InternalFlowableAppSpringExtension.class) @@ -186,7 +185,7 @@ protected String encode(String string) { /** * Checks if the returned "data" array (child-node of root-json node returned by invoking a GET on the given url) contains entries with the given ID's. */ - protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = expectedResourceIds.length; // Do the actual call @@ -207,7 +206,7 @@ protected void assertResultsPresentInDataResponse(String url, String... expected assertThat(toBeFound).as("Not all expected ids have been found in result, missing: " + StringUtils.join(toBeFound, ", ")).isEmpty(); } - protected void assertEmptyResultsPresentInDataResponse(String url) throws JsonProcessingException, IOException { + protected void assertEmptyResultsPresentInDataResponse(String url) throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); @@ -220,11 +219,11 @@ protected void assertEmptyResultsPresentInDataResponse(String url) throws JsonPr /** * Checks if the returned "data" array (child-node of root-json node returned by invoking a POST on the given url) contains entries with the given ID's. */ - protected void assertResultsPresentInPostDataResponse(String url, ObjectNode body, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInPostDataResponse(String url, ObjectNode body, String... expectedResourceIds) throws IOException { assertResultsPresentInPostDataResponseWithStatusCheck(url, body, HttpStatus.SC_OK, expectedResourceIds); } - protected void assertResultsPresentInPostDataResponseWithStatusCheck(String url, ObjectNode body, int expectedStatusCode, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInPostDataResponseWithStatusCheck(String url, ObjectNode body, int expectedStatusCode, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = 0; if (expectedResourceIds != null) { numberOfResultsExpected = expectedResourceIds.length; diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/AppDefinitionResourceTest.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/AppDefinitionResourceTest.java index 79ee79d96ee..505a10919b2 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/AppDefinitionResourceTest.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/AppDefinitionResourceTest.java @@ -29,8 +29,8 @@ import org.flowable.app.rest.service.BaseSpringRestTestCase; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentCollectionResourceTest.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentCollectionResourceTest.java index b9b3ffbed96..cbc7e4de931 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentCollectionResourceTest.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.app.rest.service.BaseSpringRestTestCase; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceResourceTest.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceResourceTest.java index 6bf1614f0c0..359c05b2fcb 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceResourceTest.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceResourceTest.java @@ -30,7 +30,7 @@ import org.flowable.app.rest.service.BaseSpringRestTestCase; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceTest.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceTest.java index d50e0dc0320..a33b8028f1d 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceTest.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourceTest.java @@ -29,7 +29,7 @@ import org.flowable.common.engine.impl.util.ReflectUtil; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourcesResourceTest.java b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourcesResourceTest.java index 5f82bbdecca..f21d0e09813 100644 --- a/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourcesResourceTest.java +++ b/modules/flowable-app-engine-rest/src/test/java/org/flowable/app/rest/service/api/repository/DeploymentResourcesResourceTest.java @@ -26,7 +26,7 @@ import org.flowable.app.rest.service.BaseSpringRestTestCase; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-app-engine-spring/src/test/java/org/flowable/app/spring/test/autodeployment/SpringAutoDeployTest.java b/modules/flowable-app-engine-spring/src/test/java/org/flowable/app/spring/test/autodeployment/SpringAutoDeployTest.java index c23fe590d3f..08887ae4621 100644 --- a/modules/flowable-app-engine-spring/src/test/java/org/flowable/app/spring/test/autodeployment/SpringAutoDeployTest.java +++ b/modules/flowable-app-engine-spring/src/test/java/org/flowable/app/spring/test/autodeployment/SpringAutoDeployTest.java @@ -48,9 +48,10 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.core.JsonParseException; import com.zaxxer.hikari.HikariDataSource; +import tools.jackson.core.JacksonException; + /** * @author Tijs Rademakers * @author Joram Barrez @@ -192,7 +193,7 @@ public void testAutoDeployWithInvalidResourcesWithDeploymentModeDefault() { .cause() .hasMessageContaining("Error reading app resource") .isInstanceOf(FlowableException.class) - .hasRootCauseInstanceOf(JsonParseException.class); + .hasRootCauseInstanceOf(JacksonException.class); assertThat(repositoryService).isNull(); // Some of the resources should have been deployed diff --git a/modules/flowable-app-engine/pom.xml b/modules/flowable-app-engine/pom.xml index 717ad71468f..9843449b27f 100644 --- a/modules/flowable-app-engine/pom.xml +++ b/modules/flowable-app-engine/pom.xml @@ -140,6 +140,7 @@ org.apache.xerces*;resolution:=optional, org.springframework*;resolution:=optional, com.fasterxml*;resolution:=optional, + tools.jackson*;resolution:=optional, jakarta.transaction;resolution:=optional, jakarta.enterprise.concurrent;resolution:=optional, diff --git a/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/deployer/AppResourceConverterImpl.java b/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/deployer/AppResourceConverterImpl.java index f04c4a2bf44..37ad2c6f04e 100644 --- a/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/deployer/AppResourceConverterImpl.java +++ b/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/deployer/AppResourceConverterImpl.java @@ -16,7 +16,7 @@ import org.flowable.app.api.repository.AppResourceConverter; import org.flowable.common.engine.api.FlowableException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public class AppResourceConverterImpl implements AppResourceConverter { diff --git a/modules/flowable-app-engine/src/test/java/org/flowable/app/engine/test/repository/CustomAppResourceConverter.java b/modules/flowable-app-engine/src/test/java/org/flowable/app/engine/test/repository/CustomAppResourceConverter.java index d7640d3fb9e..3d91eeb38ee 100644 --- a/modules/flowable-app-engine/src/test/java/org/flowable/app/engine/test/repository/CustomAppResourceConverter.java +++ b/modules/flowable-app-engine/src/test/java/org/flowable/app/engine/test/repository/CustomAppResourceConverter.java @@ -16,7 +16,7 @@ import org.flowable.app.api.repository.AppResourceConverter; import org.flowable.common.engine.api.FlowableException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public class CustomAppResourceConverter implements AppResourceConverter { diff --git a/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedShortStringVariableLengthTest.java b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedShortStringVariableLengthTest.java index 4d5c148cdb4..52c79b2466d 100644 --- a/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedShortStringVariableLengthTest.java +++ b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedShortStringVariableLengthTest.java @@ -40,8 +40,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; -import com.fasterxml.jackson.databind.ObjectMapper; - /** * @author Filip Hrisafov */ @@ -65,9 +63,6 @@ public class MaxAllowedShortStringVariableLengthTest { @Autowired protected CmmnTaskService cmmnTaskService; - @Autowired - protected ObjectMapper objectMapper; - @Nested class Bpmn { diff --git a/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedVariableLengthTest.java b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedVariableLengthTest.java index d11147194e4..56f5d388a8f 100644 --- a/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedVariableLengthTest.java +++ b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/MaxAllowedVariableLengthTest.java @@ -46,8 +46,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-batch-service/src/main/java/org/flowable/batch/service/BatchServiceConfiguration.java b/modules/flowable-batch-service/src/main/java/org/flowable/batch/service/BatchServiceConfiguration.java index 005e5f97ac4..0f71ff0128b 100755 --- a/modules/flowable-batch-service/src/main/java/org/flowable/batch/service/BatchServiceConfiguration.java +++ b/modules/flowable-batch-service/src/main/java/org/flowable/batch/service/BatchServiceConfiguration.java @@ -24,7 +24,7 @@ import org.flowable.batch.service.impl.persistence.entity.data.impl.MybatisBatchPartDataManager; import org.flowable.common.engine.impl.AbstractServiceConfiguration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tijs Rademakers diff --git a/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/ValuedDataObjectConverterTest.java b/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/ValuedDataObjectConverterTest.java index bf5b6cc6fe3..523e1805b8b 100644 --- a/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/ValuedDataObjectConverterTest.java +++ b/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/ValuedDataObjectConverterTest.java @@ -32,7 +32,7 @@ import org.flowable.bpmn.model.ValuedDataObject; import org.flowable.editor.language.xml.util.BpmnXmlConverterTest; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @see {https://activiti.atlassian.net/browse/ACT-1847}. diff --git a/modules/flowable-bpmn-model/pom.xml b/modules/flowable-bpmn-model/pom.xml index 1b54d5aca04..470b823118c 100644 --- a/modules/flowable-bpmn-model/pom.xml +++ b/modules/flowable-bpmn-model/pom.xml @@ -29,10 +29,10 @@ com.fasterxml.jackson.core - jackson-core + jackson-annotations - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/modules/flowable-bpmn-model/src/main/java/org/flowable/bpmn/model/JsonDataObject.java b/modules/flowable-bpmn-model/src/main/java/org/flowable/bpmn/model/JsonDataObject.java index 909007fa969..255d90e7bc5 100644 --- a/modules/flowable-bpmn-model/src/main/java/org/flowable/bpmn/model/JsonDataObject.java +++ b/modules/flowable-bpmn-model/src/main/java/org/flowable/bpmn/model/JsonDataObject.java @@ -12,16 +12,13 @@ */ package org.flowable.bpmn.model; -import java.io.IOException; - import org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; + +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.json.JsonMapper; /** * @author Christophe DENEUX @@ -31,23 +28,18 @@ public class JsonDataObject extends ValuedDataObject { @Override public void setValue(Object value) { if (value instanceof String && !StringUtils.isEmpty(((String) value).trim())) { - final ObjectMapper mapper = new ObjectMapper(); try { - this.value = mapper.readTree((String) value); - } catch (final IOException e) { + this.value = JsonMapper.shared().readTree((String) value); + } catch (JacksonException e) { throw new IllegalArgumentException("Invalid JSON expression to parse", e); } } else if (value instanceof JsonNode) { this.value = value; } else { - final ObjectMapper mapper = new ObjectMapper(); - - // By default, Jackson serializes only public fields, we force to use all fields of the Java Bean - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - - // By default, Jackson serializes java.util.Date as timestamp, we force ISO-8601 - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true)); + JsonMapper mapper = JsonMapper.builder() + // By default, Jackson serializes only public fields, we force to use all fields of the Java Bean + .changeDefaultVisibility(visibilityChecker -> visibilityChecker.withFieldVisibility(Visibility.ANY)) + .build(); this.value = mapper.convertValue(value, JsonNode.class); } diff --git a/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/DecisionTableVariableManager.java b/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/DecisionTableVariableManager.java index 2a8fa0235c9..9c50acd706d 100644 --- a/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/DecisionTableVariableManager.java +++ b/modules/flowable-cmmn-api/src/main/java/org/flowable/cmmn/api/DecisionTableVariableManager.java @@ -17,7 +17,7 @@ import org.flowable.cmmn.api.runtime.PlanItemInstance; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public interface DecisionTableVariableManager { diff --git a/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/CaseTaskTest.java b/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/CaseTaskTest.java index 25227d8d954..a3ef383f73f 100644 --- a/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/CaseTaskTest.java +++ b/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/CaseTaskTest.java @@ -56,10 +56,10 @@ import org.flowable.variable.service.impl.types.JsonType; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java b/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java index 9aafed20524..060d4149a03 100644 --- a/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java +++ b/modules/flowable-cmmn-engine-configurator/src/test/java/org/flowable/cmmn/test/ProcessTaskTest.java @@ -64,10 +64,10 @@ import org.flowable.variable.service.impl.types.JsonType; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/pom.xml b/modules/flowable-cmmn-engine/pom.xml index a8f59d1f252..8a3a9233ab2 100644 --- a/modules/flowable-cmmn-engine/pom.xml +++ b/modules/flowable-cmmn-engine/pom.xml @@ -210,6 +210,7 @@ org.apache.xerces*;resolution:=optional, org.springframework*;resolution:=optional, com.fasterxml*;resolution:=optional, + tools.jackson*;resolution:=optional, jakarta.transaction;resolution:=optional, jakarta.enterprise.concurrent;resolution:=optional, diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/AsyncLeaveActivePlanItemInstanceOperation.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/AsyncLeaveActivePlanItemInstanceOperation.java index 96ee0bd1b43..b06bf52ff75 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/AsyncLeaveActivePlanItemInstanceOperation.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/AsyncLeaveActivePlanItemInstanceOperation.java @@ -32,9 +32,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez @@ -89,12 +88,7 @@ protected String createJobConfiguration() { objectNode.put(key, transitionMetadata.get(key)); } - try { - return objectMapper.writeValueAsString(objectNode); - } catch (JsonProcessingException e) { - LOGGER.warn("Programmatic error: could not create job configuration JSON", e); - } - return null; + return objectMapper.writeValueAsString(objectNode); } @Override diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/EvaluateVariableEventListenersOperation.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/EvaluateVariableEventListenersOperation.java index 737b716b092..6321bb6ab72 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/EvaluateVariableEventListenersOperation.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/agenda/operation/EvaluateVariableEventListenersOperation.java @@ -28,7 +28,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; public class EvaluateVariableEventListenersOperation extends AbstractEvaluationCriteriaOperation { diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/DecisionTaskActivityBehavior.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/DecisionTaskActivityBehavior.java index 63915019371..1cf65538083 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/DecisionTaskActivityBehavior.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/DecisionTaskActivityBehavior.java @@ -33,10 +33,10 @@ import org.flowable.dmn.api.DmnDecisionService; import org.flowable.dmn.api.ExecuteDecisionBuilder; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author martin.grofcik diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/HumanTaskActivityBehavior.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/HumanTaskActivityBehavior.java index 36c74598645..94331f788c4 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/HumanTaskActivityBehavior.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/HumanTaskActivityBehavior.java @@ -59,7 +59,7 @@ import org.flowable.task.service.delegate.TaskListener; import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/VariableEventListenerActivityBehaviour.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/VariableEventListenerActivityBehaviour.java index d6684e18502..fd4cd171b11 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/VariableEventListenerActivityBehaviour.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/VariableEventListenerActivityBehaviour.java @@ -35,7 +35,7 @@ import org.flowable.eventsubscription.service.EventSubscriptionService; import org.flowable.eventsubscription.service.impl.persistence.entity.EventSubscriptionEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * {@link CmmnActivityBehavior} implementation for the CMMN extension Variable Event Listener. diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/GetCaseInstanceMigrationBatchResultCmd.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/GetCaseInstanceMigrationBatchResultCmd.java index 5300386ee42..018eea0578c 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/GetCaseInstanceMigrationBatchResultCmd.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/GetCaseInstanceMigrationBatchResultCmd.java @@ -13,7 +13,6 @@ package org.flowable.cmmn.engine.impl.cmd; -import java.io.IOException; import java.util.List; import org.flowable.batch.api.Batch; @@ -27,8 +26,9 @@ import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** * @author Valentin Zickner @@ -105,7 +105,7 @@ protected CaseInstanceBatchMigrationPartResult convertFromBatchPart(BatchPart ba partResult.setMigrationStacktrace(resultStacktrace); } - } catch (IOException e) { + } catch (JacksonException e) { throw new FlowableException("Error reading batch part " + batchPart.getId()); } } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java index b6ec7361dfe..70793c524de 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java @@ -47,10 +47,10 @@ import org.flowable.variable.service.impl.types.StringType; import org.flowable.variable.service.impl.types.UUIDType; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/BatchDeleteCaseConfig.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/BatchDeleteCaseConfig.java index 5e7fb68530a..4d7d098bd55 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/BatchDeleteCaseConfig.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/BatchDeleteCaseConfig.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -28,15 +27,13 @@ import org.flowable.common.engine.api.FlowableException; import org.flowable.common.engine.api.FlowableIllegalArgumentException; import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; -import org.flowable.common.engine.impl.util.ExceptionUtil; import org.flowable.job.service.impl.history.async.AsyncHistoryDateUtil; import org.flowable.variable.api.types.ValueFields; import org.flowable.variable.api.types.VariableType; import org.flowable.variable.service.impl.QueryOperator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov @@ -410,13 +407,8 @@ protected static Set asStringSet(JsonNode node) { } protected static JsonNode getBatchConfiguration(Batch batch, CmmnEngineConfiguration engineConfiguration) { - try { - return engineConfiguration.getObjectMapper() - .readTree(batch.getBatchDocumentJson(EngineConfigurationConstants.KEY_CMMN_ENGINE_CONFIG)); - } catch (JsonProcessingException e) { - ExceptionUtil.sneakyThrow(e); - return null; - } + return engineConfiguration.getObjectMapper() + .readTree(batch.getBatchDocumentJson(EngineConfigurationConstants.KEY_CMMN_ENGINE_CONFIG)); } protected static String prepareFailedResultAsJsonString(String errorMessage, CmmnEngineConfiguration engineConfiguration) { diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/ComputeDeleteHistoricCaseInstanceIdsJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/ComputeDeleteHistoricCaseInstanceIdsJobHandler.java index 977f2e8454e..020fbf30f02 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/ComputeDeleteHistoricCaseInstanceIdsJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/ComputeDeleteHistoricCaseInstanceIdsJobHandler.java @@ -28,8 +28,8 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsJobHandler.java index fa60aaae9b6..a0b09e5166d 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsJobHandler.java @@ -29,16 +29,14 @@ import org.flowable.common.engine.api.scope.ScopeTypes; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; -import org.flowable.common.engine.impl.util.ExceptionUtil; import org.flowable.job.service.JobHandler; import org.flowable.job.service.JobService; import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov @@ -150,12 +148,7 @@ public void execute(JobEntity job, String configuration, VariableScope variableS } protected JsonNode getBatchPartResult(BatchPart batchPart, CmmnEngineConfiguration engineConfiguration) { - try { - return engineConfiguration.getObjectMapper() - .readTree(batchPart.getResultDocumentJson(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG)); - } catch (JsonProcessingException e) { - ExceptionUtil.sneakyThrow(e); - return null; - } + return engineConfiguration.getObjectMapper() + .readTree(batchPart.getResultDocumentJson(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG)); } } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsStatusJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsStatusJobHandler.java index d6e4f72f2a4..1ea169720b9 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsStatusJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstanceIdsStatusJobHandler.java @@ -21,7 +21,6 @@ import org.flowable.cmmn.api.CmmnManagementService; import org.flowable.cmmn.engine.CmmnEngineConfiguration; import org.flowable.cmmn.engine.impl.util.CommandContextUtil; -import org.flowable.common.engine.api.FlowableException; import org.flowable.common.engine.api.FlowableIllegalArgumentException; import org.flowable.common.engine.api.scope.ScopeTypes; import org.flowable.common.engine.impl.interceptor.CommandContext; @@ -29,10 +28,9 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov @@ -122,10 +120,6 @@ protected JsonNode readJson(String json, ObjectMapper objectMapper) { if (json == null) { return null; } - try { - return objectMapper.readTree(json); - } catch (JsonProcessingException e) { - throw new FlowableException("Failed to read json", e); - } + return objectMapper.readTree(json); } } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesSequentialJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesSequentialJobHandler.java index 705e36b0fb8..506e629eb4a 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesSequentialJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesSequentialJobHandler.java @@ -32,8 +32,8 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesUsingBatchesCmd.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesUsingBatchesCmd.java index 22cadb13373..709bbecada8 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesUsingBatchesCmd.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delete/DeleteHistoricCaseInstancesUsingBatchesCmd.java @@ -38,8 +38,8 @@ import org.flowable.job.service.impl.persistence.entity.TimerJobEntity; import org.flowable.variable.service.impl.QueryVariableValue; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AbstractCaseInstanceMigrationJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AbstractCaseInstanceMigrationJobHandler.java index ead3feca77f..24ef9e22e09 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AbstractCaseInstanceMigrationJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AbstractCaseInstanceMigrationJobHandler.java @@ -12,14 +12,14 @@ */ package org.flowable.cmmn.engine.impl.job; -import java.io.IOException; - import org.flowable.cmmn.engine.impl.util.CommandContextUtil; import org.flowable.job.service.JobHandler; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; public abstract class AbstractCaseInstanceMigrationJobHandler implements JobHandler { @@ -37,7 +37,7 @@ protected static String getBatchIdFromHandlerCfg(String handlerCfg) { return cfgAsJson.get(CFG_LABEL_BATCH_ID).asText(); } return null; - } catch (IOException e) { + } catch (JacksonException e) { return null; } } @@ -49,7 +49,7 @@ protected static String getBatchPartIdFromHandlerCfg(String handlerCfg) { return cfgAsJson.get(CFG_LABEL_BATCH_PART_ID).asText(); } return null; - } catch (IOException e) { + } catch (JacksonException e) { return null; } } @@ -70,7 +70,7 @@ protected static ObjectMapper getObjectMapper() { if (CommandContextUtil.getCommandContext() != null) { return CommandContextUtil.getCmmnEngineConfiguration().getObjectMapper(); } else { - return new ObjectMapper(); + return JsonMapper.shared(); } } } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AsyncLeaveActivePlanItemInstanceJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AsyncLeaveActivePlanItemInstanceJobHandler.java index 289a7b63601..5d2200e9df3 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AsyncLeaveActivePlanItemInstanceJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/AsyncLeaveActivePlanItemInstanceJobHandler.java @@ -25,7 +25,7 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/CaseInstanceMigrationJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/CaseInstanceMigrationJobHandler.java index c3f27b9ea61..6604f12b208 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/CaseInstanceMigrationJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/CaseInstanceMigrationJobHandler.java @@ -31,7 +31,7 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class CaseInstanceMigrationJobHandler extends AbstractCaseInstanceMigrationJobHandler { diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/HistoricCaseInstanceMigrationJobHandler.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/HistoricCaseInstanceMigrationJobHandler.java index 0925e930e95..c77fc126773 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/HistoricCaseInstanceMigrationJobHandler.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/job/HistoricCaseInstanceMigrationJobHandler.java @@ -31,7 +31,7 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class HistoricCaseInstanceMigrationJobHandler extends AbstractCaseInstanceMigrationJobHandler { diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentConverter.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentConverter.java index 8c8b1fd2197..d815c422a5c 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentConverter.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/CaseInstanceMigrationDocumentConverter.java @@ -12,7 +12,6 @@ */ package org.flowable.cmmn.engine.impl.migration; -import java.io.IOException; import java.util.List; import java.util.Map; import java.util.function.Predicate; @@ -28,13 +27,14 @@ import org.flowable.cmmn.api.migration.WaitingForRepetitionPlanItemDefinitionMapping; import org.flowable.common.engine.api.FlowableException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectWriter; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Valentin Zickner @@ -42,10 +42,10 @@ public class CaseInstanceMigrationDocumentConverter implements CaseInstanceMigrationDocumentConstants { protected static Predicate isNotNullNode = jsonNode -> jsonNode != null && !jsonNode.isNull(); - protected static Predicate isSingleTextValue = jsonNode -> isNotNullNode.test(jsonNode) && jsonNode.isTextual(); + protected static Predicate isSingleTextValue = jsonNode -> isNotNullNode.test(jsonNode) && jsonNode.isString(); protected static Predicate isMultiValue = jsonNode -> isNotNullNode.test(jsonNode) && jsonNode.isArray(); - protected static ObjectMapper objectMapper = new ObjectMapper(); + protected static ObjectMapper objectMapper = JsonMapper.shared(); public static JsonNode convertToJson(CaseInstanceMigrationDocument caseInstanceMigrationDocument) { ObjectNode documentNode = objectMapper.createObjectNode(); @@ -127,7 +127,7 @@ public static String convertToJsonString(CaseInstanceMigrationDocument caseInsta ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter(); try { return objectWriter.writeValueAsString(jsonNode); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { return jsonNode.toString(); } } @@ -374,7 +374,7 @@ public static CaseInstanceMigrationDocument convertFromJson(String jsonCaseInsta return documentBuilder.build(); - } catch (IOException e) { + } catch (JacksonException e) { throw new FlowableException("Error parsing Case Instance Migration Document", e); } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/HistoricCaseInstanceMigrationDocumentConverter.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/HistoricCaseInstanceMigrationDocumentConverter.java index bbbd360303b..917987276f0 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/HistoricCaseInstanceMigrationDocumentConverter.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/migration/HistoricCaseInstanceMigrationDocumentConverter.java @@ -12,20 +12,19 @@ */ package org.flowable.cmmn.engine.impl.migration; -import java.io.IOException; - import org.flowable.cmmn.api.migration.HistoricCaseInstanceMigrationDocument; import org.flowable.common.engine.api.FlowableException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectWriter; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; public class HistoricCaseInstanceMigrationDocumentConverter implements CaseInstanceMigrationDocumentConstants { - protected static ObjectMapper objectMapper = new ObjectMapper(); + protected static ObjectMapper objectMapper = JsonMapper.shared(); public static JsonNode convertToJson(HistoricCaseInstanceMigrationDocument historicCaseInstanceMigrationDocument) { ObjectNode documentNode = objectMapper.createObjectNode(); @@ -54,7 +53,7 @@ public static String convertToJsonString(HistoricCaseInstanceMigrationDocument h ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter(); try { return objectWriter.writeValueAsString(jsonNode); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { return jsonNode.toString(); } } @@ -75,7 +74,7 @@ public static HistoricCaseInstanceMigrationDocument convertFromJson(String jsonC return documentBuilder.build(); - } catch (IOException e) { + } catch (JacksonException e) { throw new FlowableException("Error parsing Historic Case Instance Migration Document", e); } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/CaseInstanceEntityImpl.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/CaseInstanceEntityImpl.java index b6b3e508296..50de80e7311 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/CaseInstanceEntityImpl.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/CaseInstanceEntityImpl.java @@ -36,7 +36,7 @@ import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; import org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/PlanItemInstanceEntityImpl.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/PlanItemInstanceEntityImpl.java index 62c7eb82820..17e2d83ae95 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/PlanItemInstanceEntityImpl.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/persistence/entity/PlanItemInstanceEntityImpl.java @@ -42,7 +42,7 @@ import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; import org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/task/TaskHelper.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/task/TaskHelper.java index abf39a4bd96..e7ee597fe02 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/task/TaskHelper.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/task/TaskHelper.java @@ -41,7 +41,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/CmmnLoggingSessionUtil.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/CmmnLoggingSessionUtil.java index f4c1506d1c5..7fea4e99747 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/CmmnLoggingSessionUtil.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/CmmnLoggingSessionUtil.java @@ -33,9 +33,9 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; public class CmmnLoggingSessionUtil { diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java index c1604728423..0a8956aa09f 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java @@ -24,7 +24,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IdentityLinkUtil.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IdentityLinkUtil.java index 3a829027c6e..2d50c57351d 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IdentityLinkUtil.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IdentityLinkUtil.java @@ -27,7 +27,7 @@ import org.flowable.task.service.impl.persistence.CountingTaskEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/el/VariableFunctionDelegatesTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/el/VariableFunctionDelegatesTest.java index ef4f026712b..b476d814457 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/el/VariableFunctionDelegatesTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/el/VariableFunctionDelegatesTest.java @@ -27,8 +27,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/AbstractCmmnEventRegistryConsumerTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/AbstractCmmnEventRegistryConsumerTest.java index 94135a5b20a..9f5a39a2856 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/AbstractCmmnEventRegistryConsumerTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/AbstractCmmnEventRegistryConsumerTest.java @@ -27,9 +27,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez @@ -112,12 +111,8 @@ public void triggerTestEventWithHeaders(String customerId, String headerValue1, Map headers = new HashMap<>(); headers.put("headerProperty1", headerValue1); headers.put("headerProperty2", headerValue2); - try { - String event = objectMapper.writeValueAsString(eventNode); - eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + String event = objectMapper.writeValueAsString(eventNode); + eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); } public void triggerOrderTestEvent(String orderId) { @@ -126,19 +121,11 @@ public void triggerOrderTestEvent(String orderId) { public void triggerTestEvent(String customerId, String orderId) { ObjectNode json = createTestEventNode(customerId, orderId); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } public void triggerTestEventWithJson(ObjectNode eventJson) { - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(eventJson)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(eventJson)); } diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnEventRegistryConsumerTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnEventRegistryConsumerTest.java index f73693749e8..d18a6865c29 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnEventRegistryConsumerTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnEventRegistryConsumerTest.java @@ -29,8 +29,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnHeaderEventRegistryConsumerTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnHeaderEventRegistryConsumerTest.java index c1cf449d92a..60d14b6993d 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnHeaderEventRegistryConsumerTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/CmmnHeaderEventRegistryConsumerTest.java @@ -34,9 +34,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez @@ -133,12 +132,8 @@ public void triggerTestEventWithHeaders(String customerId, String headerValue1, Map headers = new HashMap<>(); headers.put("headerProperty1", headerValue1); headers.put("headerProperty2", headerValue2); - try { - String event = objectMapper.writeValueAsString(eventNode); - eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + String event = objectMapper.writeValueAsString(eventNode); + eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); } protected ObjectNode createTestEventNode(String customerId, String orderId) { diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantCmmnEventRegistryConsumerTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantCmmnEventRegistryConsumerTest.java index 956359066d6..993dabf8da9 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantCmmnEventRegistryConsumerTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantCmmnEventRegistryConsumerTest.java @@ -36,9 +36,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez @@ -420,11 +419,7 @@ public void triggerEventWithoutTenantId(String customerId) { json.put("payload", "Hello World"); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } public void triggerEventForTenantId(String customerId, String tenantId) { @@ -441,11 +436,7 @@ public void triggerEventForTenantId(String customerId, String tenantId) { json.put("payload", "Hello World"); json.put("tenantId", tenantId); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } } diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantSendEventTaskTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantSendEventTaskTest.java index 89047dd709a..86f33791011 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantSendEventTaskTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/MultiTenantSendEventTaskTest.java @@ -28,7 +28,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/SendEventTaskTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/SendEventTaskTest.java index 85447098336..6ede5269525 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/SendEventTaskTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/eventregistry/SendEventTaskTest.java @@ -27,7 +27,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/DynamicPlanItemNameWithRepetitionBasedOnJsonArrayTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/DynamicPlanItemNameWithRepetitionBasedOnJsonArrayTest.java index 9fd15e616ba..63541ee5c02 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/DynamicPlanItemNameWithRepetitionBasedOnJsonArrayTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/DynamicPlanItemNameWithRepetitionBasedOnJsonArrayTest.java @@ -24,8 +24,7 @@ import org.flowable.cmmn.test.FlowableCmmnTestCase; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * Testing dynamic, expression based plan item name with local, collection based variables as well as case based ones. diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java index 39edcb3db4b..eb465fce0aa 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java @@ -46,9 +46,9 @@ import org.flowable.variable.service.impl.types.JsonType; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/listener/PlanItemLifecycleListenerTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/listener/PlanItemLifecycleListenerTest.java index 5f6b5d40b22..5611c645b71 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/listener/PlanItemLifecycleListenerTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/listener/PlanItemLifecycleListenerTest.java @@ -40,7 +40,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/FlowableLoggingListener.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/FlowableLoggingListener.java index 870791b9c40..f04c4a8ed6c 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/FlowableLoggingListener.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/FlowableLoggingListener.java @@ -17,7 +17,7 @@ import org.flowable.common.engine.impl.logging.LoggingListener; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class FlowableLoggingListener implements LoggingListener { diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/ServiceTaskLoggingTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/ServiceTaskLoggingTest.java index c915f459d1b..744e19d83ed 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/ServiceTaskLoggingTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/logging/ServiceTaskLoggingTest.java @@ -35,7 +35,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class ServiceTaskLoggingTest extends CustomCmmnConfigurationFlowableTestCase { diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/CaseTaskTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/CaseTaskTest.java index 745ec9456fb..ed4db9c4899 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/CaseTaskTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/CaseTaskTest.java @@ -48,10 +48,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/HumanTaskTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/HumanTaskTest.java index 485b7e01d98..89afa7dd953 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/HumanTaskTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/HumanTaskTest.java @@ -53,7 +53,7 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/MaxAllowedVariableLengthTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/MaxAllowedVariableLengthTest.java index c47e0a82a5d..b31aeb8109c 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/MaxAllowedVariableLengthTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/MaxAllowedVariableLengthTest.java @@ -32,7 +32,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/StageTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/StageTest.java index 1ab48d776fd..348dfae1646 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/StageTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/runtime/StageTest.java @@ -44,7 +44,7 @@ import org.junit.jupiter.api.Test; import org.opentest4j.AssertionFailedError; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/task/CmmnMailTaskTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/task/CmmnMailTaskTest.java index cba894ff73b..89dc3248071 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/task/CmmnMailTaskTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/task/CmmnMailTaskTest.java @@ -44,8 +44,7 @@ import org.subethamail.wiser.Wiser; import org.subethamail.wiser.WiserMessage; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java index fb199c68c24..2fdaffc1594 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/CmmnRestResponseFactory.java @@ -85,7 +85,7 @@ import org.flowable.variable.api.history.HistoricVariableInstance; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Default implementation of a {@link CmmnRestResponseFactory}. diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/engine/EventResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/engine/EventResponse.java index 2dfd27d5883..82f40e3669c 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/engine/EventResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/engine/EventResponse.java @@ -19,7 +19,8 @@ import org.flowable.common.rest.util.DateToStringSerializer; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Frederik Heremans diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/caze/HistoricCaseInstanceResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/caze/HistoricCaseInstanceResponse.java index dad0ebb5bf0..8a47f7c531e 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/caze/HistoricCaseInstanceResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/caze/HistoricCaseInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.cmmn.rest.service.api.engine.variable.RestVariable; import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/milestone/HistoricMilestoneInstanceResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/milestone/HistoricMilestoneInstanceResponse.java index 78a652976ff..6b6bad2f471 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/milestone/HistoricMilestoneInstanceResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/milestone/HistoricMilestoneInstanceResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/planitem/HistoricPlanItemInstanceResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/planitem/HistoricPlanItemInstanceResponse.java index 45dbb62b5ce..7efe057e6a1 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/planitem/HistoricPlanItemInstanceResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/planitem/HistoricPlanItemInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.cmmn.rest.service.api.engine.variable.RestVariable; import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/task/HistoricTaskInstanceResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/task/HistoricTaskInstanceResponse.java index 61f1b6270ce..a2e78be3a30 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/task/HistoricTaskInstanceResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/history/task/HistoricTaskInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.cmmn.rest.service.api.engine.variable.RestVariable; import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Tijs Rademakers diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/HistoryJobResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/HistoryJobResponse.java index 8ddf9b1e537..b1be05240ed 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/HistoryJobResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/HistoryJobResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java index 6ea27cd20d2..6605f867f2a 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/management/JobResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/CmmnDeploymentResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/CmmnDeploymentResponse.java index 0da6d9a761f..6cee897c159 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/CmmnDeploymentResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/repository/CmmnDeploymentResponse.java @@ -17,7 +17,7 @@ import org.flowable.cmmn.api.repository.CmmnDeployment; import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseVariableResource.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseVariableResource.java index 3bf2332e792..1da216d34f7 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseVariableResource.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/BaseVariableResource.java @@ -43,11 +43,11 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; - import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import tools.jackson.databind.ObjectMapper; + /** * @author Tijs Rademakers */ diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceResponse.java index 9c2488ff964..d3d9ef92d8b 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.cmmn.rest.service.api.engine.variable.RestVariable; import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceVariableResource.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceVariableResource.java index 80ca0a67dd2..7f18e88210d 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceVariableResource.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/CaseInstanceVariableResource.java @@ -32,7 +32,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/EventSubscriptionResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/EventSubscriptionResponse.java index ea741a1b83c..2db580b80e7 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/EventSubscriptionResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/caze/EventSubscriptionResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Tijs Rademakers diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/planitem/PlanItemInstanceResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/planitem/PlanItemInstanceResponse.java index 4b44bf65548..c9cdb3b524a 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/planitem/PlanItemInstanceResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/planitem/PlanItemInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.cmmn.rest.service.api.engine.variable.RestVariable; import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskResponse.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskResponse.java index a2094cda022..a45016989b1 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskResponse.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskResponse.java @@ -23,7 +23,7 @@ import org.flowable.task.api.DelegationState; import org.flowable.task.api.Task; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableCollectionResource.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableCollectionResource.java index 1306a171e13..f47fb9bc590 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableCollectionResource.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableCollectionResource.java @@ -38,7 +38,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableResource.java b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableResource.java index 2577eda184b..8087819c9e7 100644 --- a/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableResource.java +++ b/modules/flowable-cmmn-rest/src/main/java/org/flowable/cmmn/rest/service/api/runtime/task/TaskVariableResource.java @@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/DispatcherServletConfiguration.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/DispatcherServletConfiguration.java index 2ed64809669..71d3fedc10f 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/DispatcherServletConfiguration.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/DispatcherServletConfiguration.java @@ -17,19 +17,19 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; @Configuration(proxyBeanMethods = false) @ComponentScan({ "org.flowable.cmmn.rest.service.api" }) public class DispatcherServletConfiguration extends WebMvcConfigurationSupport { @Autowired - private ObjectMapper objectMapper; + private JsonMapper jsonMapper; @Bean public MultipartResolver multipartResolver() { @@ -38,7 +38,7 @@ public MultipartResolver multipartResolver() { @Override protected void configureMessageConverters(HttpMessageConverters.ServerBuilder builder) { - builder.withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)); + builder.withJsonConverter(new JacksonJsonHttpMessageConverter(jsonMapper)); } } diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/engine/variable/QueryVariableTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/engine/variable/QueryVariableTest.java index 2f5b69a37f7..d02e62dc0d8 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/engine/variable/QueryVariableTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/engine/variable/QueryVariableTest.java @@ -19,7 +19,7 @@ import org.flowable.cmmn.rest.service.api.engine.variable.QueryVariable; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; public class QueryVariableTest extends BaseSpringRestTestCase { diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/runtime/TaskSubTaskCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/runtime/TaskSubTaskCollectionResourceTest.java index 293f9569d81..94641ab2186 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/runtime/TaskSubTaskCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/api/runtime/TaskSubTaskCollectionResourceTest.java @@ -24,7 +24,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/MockFormHandlerRestApiInterceptor.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/MockFormHandlerRestApiInterceptor.java index 49070025ebc..a9ff4904823 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/MockFormHandlerRestApiInterceptor.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/MockFormHandlerRestApiInterceptor.java @@ -18,8 +18,8 @@ import org.flowable.task.api.Task; import org.flowable.task.api.history.HistoricTaskInstance; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/JacksonConfiguration.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/JacksonConfiguration.java index d835208ece9..567ee927aa1 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/JacksonConfiguration.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/JacksonConfiguration.java @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -24,10 +24,9 @@ public class JacksonConfiguration { @Bean() - public ObjectMapper objectMapper() { + public JsonMapper jsonMapper() { // To avoid instantiating and configuring the mapper everywhere - ObjectMapper mapper = new ObjectMapper(); - return mapper; + return JsonMapper.shared(); } } diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/RestConfiguration.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/RestConfiguration.java index 557bf1c1a55..cda730eea33 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/RestConfiguration.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/common/RestConfiguration.java @@ -19,7 +19,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/engine/EngineConfiguration.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/engine/EngineConfiguration.java index 04a165faad1..e3d85970d7d 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/engine/EngineConfiguration.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/conf/engine/EngineConfiguration.java @@ -34,9 +34,10 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; import com.zaxxer.hikari.HikariDataSource; +import tools.jackson.databind.ObjectMapper; + @Configuration(proxyBeanMethods = false) public class EngineConfiguration { diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/BaseSpringRestTestCase.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/BaseSpringRestTestCase.java index dd3044f93dc..40e8c334200 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/BaseSpringRestTestCase.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/BaseSpringRestTestCase.java @@ -68,9 +68,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; @SpringJUnitWebConfig(ApplicationConfiguration.class) @ExtendWith(InternalFlowableCmmnSpringExtension.class) diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceCollectionResourceTest.java index 33c33a196e6..be32da8ae2e 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceCollectionResourceTest.java @@ -43,9 +43,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; @@ -206,7 +205,7 @@ public void testQueryCaseInstances() throws Exception { } @Override - protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = expectedResourceIds.length; // Do the actual call diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceIdentityLinkCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceIdentityLinkCollectionResourceTest.java index ae22907f905..8efb47ac340 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceIdentityLinkCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceIdentityLinkCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceQueryResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceQueryResourceTest.java index 0ef71197208..3f0f59f8071 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceQueryResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceQueryResourceTest.java @@ -30,9 +30,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceResourceTest.java index f2e209fd837..9b29a1fe8b6 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricCaseInstanceResourceTest.java @@ -32,8 +32,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricMilestoneInstanceResourcesTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricMilestoneInstanceResourcesTest.java index e0be10e4b92..4b4ebc4dea6 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricMilestoneInstanceResourcesTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricMilestoneInstanceResourcesTest.java @@ -35,8 +35,8 @@ import org.flowable.cmmn.rest.service.api.CmmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to get historic milestone diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricPlanItemInstanceResourcesTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricPlanItemInstanceResourcesTest.java index 95b6e11f2b4..bcaf797a5b8 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricPlanItemInstanceResourcesTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricPlanItemInstanceResourcesTest.java @@ -42,8 +42,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java index d115066c86f..e7f81421a0c 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java @@ -38,8 +38,7 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; @@ -366,7 +365,7 @@ public void testQueryByParentScopeId() throws IOException { protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String... expectedTaskIds) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java index 4d596d85e5b..1ff6e2392f0 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java @@ -27,7 +27,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java index 06a33171dcc..e5313fb4246 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java @@ -35,10 +35,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the historic task instance query resource. @@ -335,7 +334,7 @@ public void testQueryTaskByCategory() throws Exception { } protected void assertResultsPresentInPostDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String... expectedTaskIds) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + url); httpPost.setEntity(new StringEntity(body.toString())); diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceResourceTest.java index 1a68ab31866..3579e72cf8a 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricTaskInstanceResourceTest.java @@ -46,7 +46,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java index cce2d93fabe..49469ea3283 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java @@ -31,8 +31,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; @@ -191,7 +190,7 @@ public void testVariableInstanceScopeIsPresent() throws Exception { } protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String variableName, Object variableValue) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java index 1b65087021d..5a92d4a28b4 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java @@ -30,10 +30,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the historic variable instance query resource. @@ -131,7 +130,7 @@ public void testQueryVariableInstances() throws Exception { } protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + url); diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobCollectionResourceTest.java index d0fab932ab2..fe70eb4f06f 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobCollectionResourceTest.java @@ -27,8 +27,8 @@ import org.flowable.job.api.Job; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to a job collection resource. diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java index b3df82363e6..dcec0d12cd6 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/management/JobResourceTest.java @@ -37,9 +37,8 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.databind.node.TextNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionCollectionResourceTest.java index 707263dfdde..ee3b207bd64 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.cmmn.rest.service.api.CmmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * Test for all REST-operations related to the Deployment collection. diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionIdentityLinksResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionIdentityLinksResourceTest.java index 335f9e38730..f367a3a570d 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionIdentityLinksResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionIdentityLinksResourceTest.java @@ -31,8 +31,8 @@ import org.flowable.identitylink.api.IdentityLink; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionResourceTest.java index 24dcdaa14cb..5ead38f767a 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/CaseDefinitionResourceTest.java @@ -39,8 +39,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentCollectionResourceTest.java index d9057ead2e9..e9a48ea82de 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.cmmn.rest.service.api.CmmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceResourceTest.java index ddce1b6f101..f28c847ce61 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceResourceTest.java @@ -30,7 +30,7 @@ import org.flowable.cmmn.rest.service.api.CmmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceTest.java index 4cb791e256d..3a1a0b5bccc 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourceTest.java @@ -29,7 +29,7 @@ import org.flowable.common.engine.impl.util.ReflectUtil; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourcesResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourcesResourceTest.java index 7cb505a3bdb..4eabe18eca0 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourcesResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/repository/DeploymentResourcesResourceTest.java @@ -26,7 +26,7 @@ import org.flowable.cmmn.rest.service.api.CmmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceCollectionResourceTest.java index 4d9ab91c32e..ce070e860e6 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceCollectionResourceTest.java @@ -55,9 +55,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceIdentityLinkResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceIdentityLinkResourceTest.java index 6f68199edbe..06a8a342ec3 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceIdentityLinkResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceIdentityLinkResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.cmmn.rest.service.api.CmmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceQueryResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceQueryResourceTest.java index b5a8047f205..b2ebf8f9760 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceQueryResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceQueryResourceTest.java @@ -32,9 +32,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceResourceTest.java index 872b487dfc3..cb1ca2c4410 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceResourceTest.java @@ -38,10 +38,9 @@ import org.flowable.common.engine.impl.identity.Authentication; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.databind.node.TextNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariableResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariableResourceTest.java index f751460ca29..ec0f904f549 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariableResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariableResourceTest.java @@ -46,8 +46,8 @@ import org.flowable.job.api.Job; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariablesCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariablesCollectionResourceTest.java index e5ede1e1568..2d3a8638dbb 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariablesCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/CaseInstanceVariablesCollectionResourceTest.java @@ -40,9 +40,9 @@ import org.flowable.job.api.Job; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/EventSubscriptionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/EventSubscriptionResourceTest.java index 779411d732e..54c2437086b 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/EventSubscriptionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/EventSubscriptionResourceTest.java @@ -29,7 +29,7 @@ import org.flowable.eventsubscription.api.EventSubscription; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceCollectionResourceTest.java index 00ce330d18f..74582bcbe65 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceCollectionResourceTest.java @@ -28,7 +28,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceQueryResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceQueryResourceTest.java index 5cca27935a8..0dde50924b4 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceQueryResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceQueryResourceTest.java @@ -31,9 +31,9 @@ import org.flowable.cmmn.rest.service.api.CmmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceResourceTest.java index 351e9ef8c84..dd05d6c31e7 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceResourceTest.java @@ -31,7 +31,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceVariableCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceVariableCollectionResourceTest.java index 29f7e4542fb..cf90e7d591d 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceVariableCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemInstanceVariableCollectionResourceTest.java @@ -37,9 +37,9 @@ import org.flowable.job.api.Job; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemVariableResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemVariableResourceTest.java index 54108eab063..2f340d44ad1 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemVariableResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/PlanItemVariableResourceTest.java @@ -40,8 +40,8 @@ import org.flowable.job.api.Job; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskCollectionResourceTest.java index 8c040bfd035..47831aaca63 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskCollectionResourceTest.java @@ -40,8 +40,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskIdentityLinkResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskIdentityLinkResourceTest.java index 42fd0fe1519..0d02a053d37 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskIdentityLinkResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskIdentityLinkResourceTest.java @@ -31,8 +31,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskQueryResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskQueryResourceTest.java index e2e11d3406b..81149452fdf 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskQueryResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskQueryResourceTest.java @@ -29,8 +29,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to the Task collection resource. diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskResourceTest.java index 69746224537..ece4eca3582 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskResourceTest.java @@ -54,10 +54,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.databind.node.TextNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariableResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariableResourceTest.java index a53de811766..483f1d75232 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariableResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariableResourceTest.java @@ -39,8 +39,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java index d3ea838be2b..e0fe4f1aba8 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java @@ -41,9 +41,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java index 6889b589088..a358e3bf1e7 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java @@ -31,8 +31,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; @@ -190,7 +189,7 @@ public void testVariableInstanceScopeIsPresent() throws Exception { } protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String variableName, Object variableValue) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); diff --git a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceQueryResourceTest.java b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceQueryResourceTest.java index 4682a0942e9..605fce0f9cf 100644 --- a/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceQueryResourceTest.java +++ b/modules/flowable-cmmn-rest/src/test/java/org/flowable/cmmn/rest/service/api/runtime/VariableInstanceQueryResourceTest.java @@ -30,10 +30,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the variable instance query resource. @@ -131,7 +130,7 @@ public void testQueryVariableInstances() throws Exception { } protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + url); diff --git a/modules/flowable-common-rest/pom.xml b/modules/flowable-common-rest/pom.xml index f82678f4b01..cb04bb85ade 100644 --- a/modules/flowable-common-rest/pom.xml +++ b/modules/flowable-common-rest/pom.xml @@ -35,13 +35,8 @@ provided - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/util/DateToStringSerializer.java b/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/util/DateToStringSerializer.java index c01aacd9fa3..9508ae81c9e 100644 --- a/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/util/DateToStringSerializer.java +++ b/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/util/DateToStringSerializer.java @@ -12,19 +12,17 @@ */ package org.flowable.common.rest.util; -import java.io.IOException; import java.util.Date; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; +import tools.jackson.core.JacksonException; +import tools.jackson.core.JsonGenerator; +import tools.jackson.databind.SerializationContext; +import tools.jackson.databind.ValueSerializer; -public class DateToStringSerializer extends JsonSerializer { +public class DateToStringSerializer extends ValueSerializer { @Override - public void serialize(Date tmpDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { - + public void serialize(Date tmpDate, JsonGenerator jsonGenerator, SerializationContext ctxt) throws JacksonException { if (tmpDate != null) { jsonGenerator.writeString(tmpDate.toInstant().toString()); } else { diff --git a/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/JsonObjectRestVariableConverter.java b/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/JsonObjectRestVariableConverter.java index 1890a63f6ab..1209afdd103 100644 --- a/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/JsonObjectRestVariableConverter.java +++ b/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/JsonObjectRestVariableConverter.java @@ -18,8 +18,8 @@ import org.flowable.common.engine.api.FlowableIllegalArgumentException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; public class JsonObjectRestVariableConverter implements RestVariableConverter { @@ -58,7 +58,7 @@ public Object getVariableValue(EngineRestVariable result) { public void convertVariableValue(Object variableValue, EngineRestVariable result) { if (variableValue != null) { if (!(variableValue instanceof JsonNode)) { - throw new FlowableIllegalArgumentException("Converter can only convert com.fasterxml.jackson.databind.JsonNode."); + throw new FlowableIllegalArgumentException("Converter can only convert tools.jackson.databind.JsonNode."); } result.setValue(variableValue); } else { diff --git a/modules/flowable-cxf/src/test/java/org/flowable/engine/impl/webservice/WebServiceTaskTest.java b/modules/flowable-cxf/src/test/java/org/flowable/engine/impl/webservice/WebServiceTaskTest.java index 3bf0e703bad..59013b3e72c 100644 --- a/modules/flowable-cxf/src/test/java/org/flowable/engine/impl/webservice/WebServiceTaskTest.java +++ b/modules/flowable-cxf/src/test/java/org/flowable/engine/impl/webservice/WebServiceTaskTest.java @@ -36,10 +36,10 @@ import org.flowable.engine.test.Deployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * An integration test for CXF based web services diff --git a/modules/flowable-dependencies/pom.xml b/modules/flowable-dependencies/pom.xml index eb2fc593213..2275aa6b5de 100644 --- a/modules/flowable-dependencies/pom.xml +++ b/modules/flowable-dependencies/pom.xml @@ -32,6 +32,7 @@ 4.4.16 5.5.1 2.20.1 + 3.0.1 4.1.0 3.1.1 2.0.1 @@ -144,6 +145,13 @@ pom import + + tools.jackson + jackson-bom + ${jackson3.version} + pom + import + joda-time joda-time diff --git a/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DecisionTaskTest.java b/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DecisionTaskTest.java index d8ef2084b40..20439dbb8e1 100644 --- a/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DecisionTaskTest.java +++ b/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DecisionTaskTest.java @@ -40,11 +40,11 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.DoubleNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.DoubleNode; +import tools.jackson.databind.node.ObjectNode; /** * @author martin.grofcik diff --git a/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DmnTaskTest.java b/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DmnTaskTest.java index b14135caa05..009121928dc 100644 --- a/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DmnTaskTest.java +++ b/modules/flowable-dmn-engine-configurator/src/test/java/org/flowable/dmn/test/runtime/DmnTaskTest.java @@ -33,11 +33,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.DoubleNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.DoubleNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Valentin Zickner diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/RuleEngineExecutor.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/RuleEngineExecutor.java index ab8c78721fe..1c273d57e2b 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/RuleEngineExecutor.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/RuleEngineExecutor.java @@ -20,7 +20,7 @@ import org.flowable.dmn.engine.impl.hitpolicy.AbstractHitPolicy; import org.flowable.dmn.model.Decision; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Yvo Swillens diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/RuleEngineExecutorImpl.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/RuleEngineExecutorImpl.java index 511509a396c..2f6ea38041e 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/RuleEngineExecutorImpl.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/RuleEngineExecutorImpl.java @@ -42,7 +42,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Yvo Swillens diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/PersistHistoricDecisionExecutionCmd.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/PersistHistoricDecisionExecutionCmd.java index 0e74131d659..7c0ea4167e4 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/PersistHistoricDecisionExecutionCmd.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/PersistHistoricDecisionExecutionCmd.java @@ -23,7 +23,8 @@ import org.flowable.dmn.engine.impl.persistence.entity.HistoricDecisionExecutionEntityManager; import org.flowable.dmn.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Yvo Swillens @@ -65,7 +66,7 @@ public Void execute(CommandContext commandContext) { ObjectMapper objectMapper = engineConfiguration.getObjectMapper(); if (objectMapper == null) { - objectMapper = new ObjectMapper(); + objectMapper = JsonMapper.shared(); } try { diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java index 84f8e1befe7..1ce2346d538 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java @@ -17,7 +17,7 @@ import org.springframework.util.CollectionUtils; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * @author Yvo Swillens diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java index 8571ffdfb6f..943641bbd88 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java @@ -26,8 +26,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; /** * @author Yvo Swillens diff --git a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/impl/el/util/CollectionUtilTest.java b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/impl/el/util/CollectionUtilTest.java index 776c80de0dc..87fd8d8fd48 100644 --- a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/impl/el/util/CollectionUtilTest.java +++ b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/impl/el/util/CollectionUtilTest.java @@ -18,7 +18,7 @@ import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; public class CollectionUtilTest { @@ -35,7 +35,7 @@ public void noneOf() { assertThat(CollectionUtil.noneOf("group1, group2", "group1, group2")).isFalse(); assertThat(CollectionUtil.noneOf("group1, group2", "group2, group3")).isFalse(); - ObjectMapper mapper = new ObjectMapper(); + JsonMapper mapper = JsonMapper.shared(); assertThat(CollectionUtil.noneOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group3", "group4")))) .isTrue(); assertThat(CollectionUtil.noneOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group1", "group2")))) @@ -58,7 +58,7 @@ public void anyOf() { assertThat(CollectionUtil.anyOf("group1, group2", "group1, group2")).isTrue(); assertThat(CollectionUtil.anyOf("group1, group2", "group2, group3")).isTrue(); - ObjectMapper mapper = new ObjectMapper(); + JsonMapper mapper = JsonMapper.shared(); assertThat(CollectionUtil.anyOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group3", "group4")))) .isFalse(); assertThat(CollectionUtil.anyOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group1", "group2")))).isTrue(); @@ -78,7 +78,7 @@ public void notAllOf() { assertThat(CollectionUtil.notAllOf("group1, group2", "group1, group2")).isFalse(); assertThat(CollectionUtil.notAllOf("group1, group2", "group2, group3")).isTrue(); - ObjectMapper mapper = new ObjectMapper(); + JsonMapper mapper = JsonMapper.shared(); assertThat(CollectionUtil.notAllOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group3", "group4")))) .isTrue(); assertThat(CollectionUtil.notAllOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group1", "group2")))) @@ -100,7 +100,7 @@ public void allOf() { assertThat(CollectionUtil.allOf("group1, group2", "group1, group2")).isTrue(); assertThat(CollectionUtil.allOf("group1, group2", "group2, group3")).isFalse(); - ObjectMapper mapper = new ObjectMapper(); + JsonMapper mapper = JsonMapper.shared(); assertThat(CollectionUtil.allOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group3", "group4")))) .isFalse(); assertThat(CollectionUtil.allOf(mapper.valueToTree(Arrays.asList("group1", "group2")), mapper.valueToTree(Arrays.asList("group1", "group2")))).isTrue(); diff --git a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/history/HistoryTest.java b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/history/HistoryTest.java index aa16aaf3060..5c60662e743 100644 --- a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/history/HistoryTest.java +++ b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/history/HistoryTest.java @@ -25,7 +25,7 @@ import org.flowable.dmn.engine.test.DmnDeployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/CollectionsContainsTest.java b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/CollectionsContainsTest.java index 4163da8daeb..7f53e0d3a30 100644 --- a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/CollectionsContainsTest.java +++ b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/CollectionsContainsTest.java @@ -30,9 +30,9 @@ import org.joda.time.format.DateTimeFormatter; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Yvo Swillens diff --git a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/RuntimeTest.java b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/RuntimeTest.java index f52b20509cd..9e8cff1472e 100644 --- a/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/RuntimeTest.java +++ b/modules/flowable-dmn-engine/src/test/java/org/flowable/dmn/engine/test/runtime/RuntimeTest.java @@ -28,7 +28,7 @@ import org.joda.time.format.DateTimeFormatter; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Yvo Swillens diff --git a/modules/flowable-dmn-model/pom.xml b/modules/flowable-dmn-model/pom.xml index 31bdb660648..e3aad56ef5c 100644 --- a/modules/flowable-dmn-model/pom.xml +++ b/modules/flowable-dmn-model/pom.xml @@ -23,11 +23,7 @@ com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-databind + jackson-annotations org.apache.commons diff --git a/modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResponse.java b/modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResponse.java index e53f36a7ffa..b2e40fd7236 100644 --- a/modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResponse.java +++ b/modules/flowable-dmn-rest/src/main/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; import org.flowable.dmn.api.DmnDeployment; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/DispatcherServletConfiguration.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/DispatcherServletConfiguration.java index 176f55834b3..3e4f71a347e 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/DispatcherServletConfiguration.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/DispatcherServletConfiguration.java @@ -12,33 +12,20 @@ */ package org.flowable.dmn.rest; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import com.fasterxml.jackson.databind.ObjectMapper; - @Configuration(proxyBeanMethods = false) @ComponentScan({ "org.flowable.dmn.rest.exception", "org.flowable.dmn.rest.service.api" }) public class DispatcherServletConfiguration extends WebMvcConfigurationSupport { - @Autowired - private ObjectMapper objectMapper; - @Bean public MultipartResolver multipartResolver() { return new StandardServletMultipartResolver(); } - @Override - protected void configureMessageConverters(HttpMessageConverters.ServerBuilder builder) { - builder.withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)); - } - } diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/conf/common/JacksonConfiguration.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/conf/common/JacksonConfiguration.java index 7c3f0f0df2b..4fec2cd609b 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/conf/common/JacksonConfiguration.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/conf/common/JacksonConfiguration.java @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -24,10 +24,9 @@ public class JacksonConfiguration { @Bean() - public ObjectMapper objectMapper() { + public JsonMapper jsonMapper() { // To avoid instantiating and configuring the mapper everywhere - ObjectMapper mapper = new ObjectMapper(); - return mapper; + return JsonMapper.shared(); } } diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/BaseSpringDmnRestTestCase.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/BaseSpringDmnRestTestCase.java index ace43706be9..16394efcb38 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/BaseSpringDmnRestTestCase.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/BaseSpringDmnRestTestCase.java @@ -55,10 +55,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; @SpringJUnitWebConfig(ApplicationConfiguration.class) @ExtendWith(InternalFlowableDmnSpringExtension.class) @@ -73,7 +73,7 @@ public abstract class BaseSpringDmnRestTestCase { protected String SERVER_URL_PREFIX; protected DmnRestUrlBuilder URL_BUILDER; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @Autowired protected DmnEngine dmnEngine; @@ -183,7 +183,7 @@ protected String encode(String string) { /** * Checks if the returned "data" array (child-node of root-json node returned by invoking a GET on the given url) contains entries with the given ID's. */ - protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = expectedResourceIds.length; // Do the actual call @@ -206,7 +206,7 @@ protected void assertResultsPresentInDataResponse(String url, String... expected .isEmpty(); } - protected void assertResultsPresentInPostDataResponseWithStatusCheck(String url, ObjectNode body, int expectedStatusCode, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInPostDataResponseWithStatusCheck(String url, ObjectNode body, int expectedStatusCode, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = 0; if (expectedResourceIds != null) { numberOfResultsExpected = expectedResourceIds.length; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/decision/DmnRuleServiceResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/decision/DmnRuleServiceResourceTest.java index 07834c8fd08..44ece4e188f 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/decision/DmnRuleServiceResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/decision/DmnRuleServiceResourceTest.java @@ -27,9 +27,9 @@ import org.flowable.dmn.rest.service.api.DmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/history/HistoricDecisionExecutionAuditDataResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/history/HistoricDecisionExecutionAuditDataResourceTest.java index 87f1b41e65e..71b7f9f5e26 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/history/HistoricDecisionExecutionAuditDataResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/history/HistoricDecisionExecutionAuditDataResourceTest.java @@ -29,8 +29,7 @@ import org.flowable.dmn.rest.service.api.DmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; @@ -60,8 +59,7 @@ public void testGetHistoricDecisionExecutionAuditData() throws Exception { closeResponse(response); assertThat(content).isNotNull(); - JsonNode auditNode = new ObjectMapper().readTree(content); - assertThatJson(auditNode) + assertThatJson(content) .when(Option.IGNORING_EXTRA_FIELDS) .isEqualTo("{" + " decisionKey: 'decision'," @@ -92,8 +90,7 @@ public void testGetHistoricDecisionServiceExecutionAuditData() throws Exception closeResponse(response); assertThat(content).isNotNull(); - JsonNode auditNode = new ObjectMapper().readTree(content); - assertThatJson(auditNode) + assertThatJson(content) .when(Option.IGNORING_EXTRA_FIELDS) .isEqualTo("{" + " decisionKey: 'evaluateMortgageRequestService'," diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionModelResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionModelResourceTest.java index b8160d4d167..dfcd1b68921 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionModelResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionModelResourceTest.java @@ -24,7 +24,7 @@ import org.flowable.dmn.rest.service.api.DmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionResourceTest.java index 06873d89b76..7d955268c1f 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionResourceTest.java @@ -23,7 +23,7 @@ import org.flowable.dmn.rest.service.api.DmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableModelResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableModelResourceTest.java index fa074ff1c6b..4d5e69321a0 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableModelResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableModelResourceTest.java @@ -24,7 +24,7 @@ import org.flowable.dmn.rest.service.api.DmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableResourceTest.java index cf2e4d15cb9..3612c65e7cb 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DecisionTableResourceTest.java @@ -23,7 +23,7 @@ import org.flowable.dmn.rest.service.api.DmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentCollectionResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentCollectionResourceTest.java index c7f03c66aca..1249a2f405c 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentCollectionResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentCollectionResourceTest.java @@ -28,7 +28,7 @@ import org.flowable.dmn.rest.service.api.HttpMultipartHelper; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResourceTest.java b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResourceTest.java index 79c98c615c9..f6b31204a35 100644 --- a/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResourceTest.java +++ b/modules/flowable-dmn-rest/src/test/java/org/flowable/dmn/rest/service/api/repository/DmnDeploymentResourceTest.java @@ -24,7 +24,7 @@ import org.flowable.dmn.rest.service.api.DmnRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-engine-common/pom.xml b/modules/flowable-engine-common/pom.xml index 50e6503c5ea..0a0deae0cc4 100644 --- a/modules/flowable-engine-common/pom.xml +++ b/modules/flowable-engine-common/pom.xml @@ -82,11 +82,7 @@ spring-beans - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java index 39ecfc67ddb..c2e1202ddcb 100755 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java @@ -128,8 +128,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; public abstract class AbstractEngineConfiguration { @@ -643,8 +643,7 @@ public void initIdGenerator() { public void initObjectMapper() { if (objectMapper == null) { - objectMapper = new ObjectMapper(); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + objectMapper = JsonMapper.shared(); } } diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractServiceConfiguration.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractServiceConfiguration.java index b8d80cc0284..db6f830ab87 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractServiceConfiguration.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractServiceConfiguration.java @@ -26,7 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java index b1b2fd541fe..63735ba48cf 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java @@ -19,8 +19,8 @@ import org.apache.commons.lang3.StringUtils; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; public class CandidateUtil { diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java index d1504971652..e3932adae0d 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java @@ -23,10 +23,10 @@ import org.flowable.common.engine.impl.javax.el.ELResolver; import org.flowable.common.engine.impl.javax.el.PropertyNotWritableException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.JsonNodeCreator; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.JsonNodeCreator; +import tools.jackson.databind.node.ObjectNode; /** * Defines property resolution behavior on JsonNodes. @@ -87,7 +87,7 @@ public Class getCommonPropertyType(ELContext context, Object base) { public Iterator getFeatureDescriptors(ELContext context, Object base) { if (isResolvable(base)) { JsonNode node = (JsonNode) base; - final Iterator keys = node.fieldNames(); + final Iterator keys = node.propertyNames().iterator(); return new Iterator<>() { @Override public boolean hasNext() { diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java index 4e27a85af12..feceea40536 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java @@ -17,7 +17,7 @@ import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.api.variable.VariableContainer; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * Checks if the value of a variable (fetched using the variableName through the variable scope) contains any of the provided values. diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java index 31c9c95822e..3e7a8517f51 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java @@ -18,8 +18,8 @@ import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.api.variable.VariableContainer; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; /** * Checks if the value of a variable (fetched using the variableName through the variable scope) contains all of the provided values. diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java index 598d180dd54..72df5dc3b2c 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java @@ -19,7 +19,7 @@ import org.flowable.common.engine.api.variable.VariableContainer; import org.flowable.common.engine.impl.util.CollectionUtil; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * Checks if the value of a variable (fetched using the variableName through the variable scope) is empty. diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContext.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContext.java index b564070dd57..987b0dc59aa 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContext.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContext.java @@ -26,7 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tom Baeyens diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContextInterceptor.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContextInterceptor.java index a61c10dbd7d..049722a36d7 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContextInterceptor.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/interceptor/CommandContextInterceptor.java @@ -23,7 +23,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tom Baeyens diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingListener.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingListener.java index c60d5d07b0e..d71a8782791 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingListener.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingListener.java @@ -14,7 +14,7 @@ import java.util.List; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public interface LoggingListener { diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSession.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSession.java index 70d853009ec..e46d43366bf 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSession.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSession.java @@ -18,8 +18,8 @@ import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.Session; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class LoggingSession implements Session { diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionCommandContextCloseListener.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionCommandContextCloseListener.java index 15d3114ee7e..6c8998de337 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionCommandContextCloseListener.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionCommandContextCloseListener.java @@ -17,8 +17,8 @@ import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandContextCloseListener; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class LoggingSessionCommandContextCloseListener implements CommandContextCloseListener { diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionFactory.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionFactory.java index 451401d8f8c..f96664b94e3 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionFactory.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionFactory.java @@ -16,7 +16,7 @@ import org.flowable.common.engine.impl.interceptor.Session; import org.flowable.common.engine.impl.interceptor.SessionFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public class LoggingSessionFactory implements SessionFactory { diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionLoggerOutput.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionLoggerOutput.java index 27857d3a8eb..ccd8e22f106 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionLoggerOutput.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionLoggerOutput.java @@ -18,7 +18,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class LoggingSessionLoggerOutput { diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionUtil.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionUtil.java index 1a6521d3cf3..d4be0f8b838 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionUtil.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/logging/LoggingSessionUtil.java @@ -25,8 +25,8 @@ import org.joda.time.DateTime; import org.joda.time.LocalDate; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class LoggingSessionUtil { diff --git a/modules/flowable-engine/pom.xml b/modules/flowable-engine/pom.xml index 4683d4820a5..64936151083 100755 --- a/modules/flowable-engine/pom.xml +++ b/modules/flowable-engine/pom.xml @@ -301,6 +301,8 @@ org.drools*;resolution:=optional, org.kie*;resolution:=optional, com.fasterxml*;resolution:=optional, + tools.jackson*;resolution:=optional, + tools.jackson*;resolution:=optional, jakarta.transaction;resolution:=optional, jakarta.enterprise.concurrent;resolution:=optional, diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/DecisionTableVariableManager.java b/modules/flowable-engine/src/main/java/org/flowable/engine/DecisionTableVariableManager.java index 2614a62f06e..a204f10bd6c 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/DecisionTableVariableManager.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/DecisionTableVariableManager.java @@ -17,7 +17,7 @@ import org.flowable.engine.delegate.DelegateExecution; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public interface DecisionTableVariableManager { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/DynamicBpmnService.java b/modules/flowable-engine/src/main/java/org/flowable/engine/DynamicBpmnService.java index f2f869f674b..0c809dc237b 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/DynamicBpmnService.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/DynamicBpmnService.java @@ -19,7 +19,7 @@ import org.flowable.engine.impl.dynamic.DynamicEmbeddedSubProcessBuilder; import org.flowable.engine.impl.dynamic.DynamicUserTaskBuilder; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Service providing access to the repository of process definitions and deployments. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/compatibility/Flowable5CompatibilityHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/compatibility/Flowable5CompatibilityHandler.java index 22d80695cb2..f64d9067554 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/compatibility/Flowable5CompatibilityHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/compatibility/Flowable5CompatibilityHandler.java @@ -39,7 +39,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/BasePropertiesParser.java b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/BasePropertiesParser.java index b835318f376..c04fc4f6cc3 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/BasePropertiesParser.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/BasePropertiesParser.java @@ -18,10 +18,10 @@ import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.DynamicBpmnConstants; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DefaultPropertiesParser.java b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DefaultPropertiesParser.java index c5020378aaf..71d86347d91 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DefaultPropertiesParser.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DefaultPropertiesParser.java @@ -14,8 +14,8 @@ import org.flowable.bpmn.model.FlowElement; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Used for {@link FlowElement} currently not supported by the {@link org.flowable.engine.DynamicBpmnService} and elements who are not parsed. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DynamicProcessDefinitionSummary.java b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DynamicProcessDefinitionSummary.java index f49daf8882a..2945668d43e 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DynamicProcessDefinitionSummary.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/DynamicProcessDefinitionSummary.java @@ -21,9 +21,9 @@ import org.flowable.bpmn.model.UserTask; import org.flowable.engine.DynamicBpmnConstants; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Pojo class who can be used to check information between {@link org.flowable.engine.DynamicBpmnService#getProcessDefinitionInfo(String)} and {@link org.flowable.bpmn.model.BpmnModel}. Without diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/PropertiesParser.java b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/PropertiesParser.java index c72327054ce..c69222a71cd 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/PropertiesParser.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/PropertiesParser.java @@ -14,8 +14,8 @@ import org.flowable.bpmn.model.FlowElement; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java index c6af861d04a..fafb73af897 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java @@ -15,8 +15,8 @@ import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.ScriptTask; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/UserTaskPropertiesParser.java b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/UserTaskPropertiesParser.java index 9a16122cc1f..e9b15ed65c2 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/UserTaskPropertiesParser.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/UserTaskPropertiesParser.java @@ -15,8 +15,8 @@ import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.UserTask; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DefaultProcessLocalizationManager.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DefaultProcessLocalizationManager.java index 3dab196a82c..8bf783ae9b2 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DefaultProcessLocalizationManager.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DefaultProcessLocalizationManager.java @@ -22,8 +22,8 @@ import org.flowable.engine.impl.persistence.entity.HistoricProcessInstanceEntity; import org.flowable.engine.runtime.ProcessInstance; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author David Lamas diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DynamicBpmnServiceImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DynamicBpmnServiceImpl.java index 0547ede11bb..83e96553d26 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DynamicBpmnServiceImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/DynamicBpmnServiceImpl.java @@ -32,10 +32,10 @@ import org.flowable.engine.impl.dynamic.DynamicEmbeddedSubProcessBuilder; import org.flowable.engine.impl.dynamic.DynamicUserTaskBuilder; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/ExecutionQueryImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/ExecutionQueryImpl.java index 5f3cdb3d08e..593881007e0 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/ExecutionQueryImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/ExecutionQueryImpl.java @@ -33,8 +33,8 @@ import org.flowable.eventsubscription.service.impl.EventSubscriptionQueryValue; import org.flowable.variable.service.impl.AbstractVariableQueryImpl; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/agenda/EvaluateVariableListenerEventDefinitionsOperation.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/agenda/EvaluateVariableListenerEventDefinitionsOperation.java index ac6e2bce53a..6cadd4bf999 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/agenda/EvaluateVariableListenerEventDefinitionsOperation.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/agenda/EvaluateVariableListenerEventDefinitionsOperation.java @@ -30,7 +30,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * Operation that triggers conditional events for which the condition evaluate to true and continues the process, leaving that activity. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/app/AppResourceConverterImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/app/AppResourceConverterImpl.java index bbe38da9fb4..c333ab19841 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/app/AppResourceConverterImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/app/AppResourceConverterImpl.java @@ -16,7 +16,7 @@ import org.flowable.engine.app.AppModel; import org.flowable.engine.app.AppResourceConverter; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public class AppResourceConverterImpl implements AppResourceConverter { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/BoundaryVariableListenerEventActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/BoundaryVariableListenerEventActivityBehavior.java index 84a0b3324c9..c13e6919c49 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/BoundaryVariableListenerEventActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/BoundaryVariableListenerEventActivityBehavior.java @@ -27,7 +27,7 @@ import org.flowable.eventsubscription.service.EventSubscriptionService; import org.flowable.eventsubscription.service.impl.persistence.entity.EventSubscriptionEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/CallActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/CallActivityBehavior.java index e38afc3bec2..0a1f1710911 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/CallActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/CallActivityBehavior.java @@ -58,7 +58,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Implementation of the BPMN 2.0 call activity (limited currently to calling a subprocess and not (yet) a global task). diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/DmnActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/DmnActivityBehavior.java index ab7c08c4357..9d1fac16d1d 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/DmnActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/DmnActivityBehavior.java @@ -35,10 +35,10 @@ import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.engine.impl.util.ProcessDefinitionUtil; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; public class DmnActivityBehavior extends TaskActivityBehavior { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/IntermediateCatchVariableListenerEventActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/IntermediateCatchVariableListenerEventActivityBehavior.java index 7757165ad01..cd60d3d50fc 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/IntermediateCatchVariableListenerEventActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/IntermediateCatchVariableListenerEventActivityBehavior.java @@ -28,7 +28,7 @@ import org.flowable.eventsubscription.service.EventSubscriptionService; import org.flowable.eventsubscription.service.impl.persistence.entity.EventSubscriptionEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class IntermediateCatchVariableListenerEventActivityBehavior extends IntermediateCatchEventActivityBehavior { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java index 269dbdb5d57..814b8adbfda 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java @@ -77,8 +77,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Implementation of the multi-instance functionality as described in the BPMN 2.0 spec. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java index 00cab7faadf..daa98555cbe 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java @@ -37,7 +37,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Implementation of the BPMN 2.0 script task. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java index d31d912b475..3920a482144 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java @@ -45,7 +45,7 @@ import org.flowable.engine.impl.util.BpmnLoggingSessionUtil; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * {@link ActivityBehavior} used when 'delegateExpression' is used for a serviceTask. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java index ea599f1653b..f4650baceb1 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java @@ -30,7 +30,7 @@ import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * ActivityBehavior that evaluates an expression when executed. Optionally, it sets the result of the expression as a variable on the execution. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/TaskActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/TaskActivityBehavior.java index 7bb22e7cb5a..18aff080719 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/TaskActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/TaskActivityBehavior.java @@ -15,8 +15,8 @@ import java.util.ArrayList; import java.util.List; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Parent class for all BPMN 2.0 task types such as ServiceTask, ScriptTask, UserTask, etc. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java index f3547bfa46e..70a93f88325 100755 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java @@ -62,9 +62,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/FieldBaseStructureInstance.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/FieldBaseStructureInstance.java index 93196ea794e..4cad20b1557 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/FieldBaseStructureInstance.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/FieldBaseStructureInstance.java @@ -19,10 +19,10 @@ import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.databind.node.ValueNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ValueNode; /** * An instance of {@link FieldBaseStructureDefinition} diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/TransformationDataOutputAssociation.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/TransformationDataOutputAssociation.java index caa39fb7446..bc2b0da2c31 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/TransformationDataOutputAssociation.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/data/TransformationDataOutputAssociation.java @@ -20,11 +20,10 @@ import org.flowable.variable.api.types.VariableTypes; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.util.StdDateFormat; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * A transformation based data output association @@ -54,14 +53,10 @@ public void evaluate(DelegateExecution execution) { // Couldn't find a variable type that is able to serialize the output value // Perhaps the output value is a Java bean, we try to convert it as JSon try { - final ObjectMapper mapper = new ObjectMapper(); - - // By default, Jackson serializes only public fields, we force to use all fields of the Java Bean - mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); - - // By default, Jackson serializes java.util.Date as timestamp, we force ISO-8601 - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true)); + final ObjectMapper mapper = JsonMapper.builder() + // By default, Jackson serializes only public fields, we force to use all fields of the Java Bean + .changeDefaultVisibility(visibilityChecker -> visibilityChecker.withFieldVisibility(Visibility.ANY)) + .build(); value = mapper.convertValue(value, JsonNode.class); } catch (final IllegalArgumentException e1) { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/BpmnDeployer.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/BpmnDeployer.java index fc3d45a3cbc..f90d93993e0 100755 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/BpmnDeployer.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/BpmnDeployer.java @@ -49,8 +49,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/CachingAndArtifactsManager.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/CachingAndArtifactsManager.java index 987ad45a60f..b75d10d5e91 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/CachingAndArtifactsManager.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/deployer/CachingAndArtifactsManager.java @@ -28,8 +28,8 @@ import org.flowable.engine.impl.persistence.entity.ProcessDefinitionInfoEntityManager; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Updates caches and artifacts for a deployment, its process definitions, and its process definition infos. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ClassDelegate.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ClassDelegate.java index 36c93fb14e4..2524d446312 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ClassDelegate.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/ClassDelegate.java @@ -50,7 +50,7 @@ import org.flowable.task.service.delegate.DelegateTask; import org.flowable.task.service.delegate.TaskListener; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Helper class for bpmn constructs that allow class delegation. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/DynamicPropertyUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/DynamicPropertyUtil.java index 9bbd16444cf..d04ead6997e 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/DynamicPropertyUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/DynamicPropertyUtil.java @@ -12,8 +12,8 @@ */ package org.flowable.engine.impl.bpmn.helper; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; public class DynamicPropertyUtil { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/SkipExpressionUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/SkipExpressionUtil.java index 4113b0e8138..c26a3d837da 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/SkipExpressionUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/helper/SkipExpressionUtil.java @@ -22,8 +22,8 @@ import org.flowable.engine.impl.context.BpmnOverrideContext; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; public class SkipExpressionUtil { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/DefaultTaskLocalizationManager.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/DefaultTaskLocalizationManager.java index 4cbda53625a..583b8800e46 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/DefaultTaskLocalizationManager.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/DefaultTaskLocalizationManager.java @@ -21,8 +21,8 @@ import org.flowable.task.service.InternalTaskLocalizationManager; import org.flowable.task.service.impl.persistence.entity.HistoricTaskInstanceEntity; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectCmd.java index 0d4ff852e0f..b18b4b98fcc 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectCmd.java @@ -33,8 +33,8 @@ import org.flowable.engine.runtime.Execution; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; public class GetDataObjectCmd implements Command, Serializable { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectsCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectsCmd.java index 40cfe614150..f3a65e0e923 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectsCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetDataObjectsCmd.java @@ -37,8 +37,8 @@ import org.flowable.engine.runtime.Execution; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; public class GetDataObjectsCmd implements Command>, Serializable { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessDefinitionInfoCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessDefinitionInfoCmd.java index e3c71cde7fb..7c076f90103 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessDefinitionInfoCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessDefinitionInfoCmd.java @@ -24,7 +24,7 @@ import org.flowable.engine.impl.util.Flowable5Util; import org.flowable.engine.repository.ProcessDefinition; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessInstanceMigrationBatchResultCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessInstanceMigrationBatchResultCmd.java index a5c9ee42da7..a421ccddd6d 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessInstanceMigrationBatchResultCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetProcessInstanceMigrationBatchResultCmd.java @@ -13,7 +13,6 @@ package org.flowable.engine.impl.cmd; -import java.io.IOException; import java.util.List; import org.flowable.batch.api.Batch; @@ -27,8 +26,9 @@ import org.flowable.engine.migration.ProcessInstanceBatchMigrationPartResult; import org.flowable.engine.migration.ProcessInstanceBatchMigrationResult; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; public class GetProcessInstanceMigrationBatchResultCmd implements Command { @@ -104,7 +104,7 @@ protected ProcessInstanceBatchMigrationPartResult convertFromBatchPart(BatchPart partResult.setMigrationStacktrace(resultStacktrace); } - } catch (IOException e) { + } catch (JacksonException e) { throw new FlowableException("Error reading batch part " + batchPart.getId()); } } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectCmd.java index fc9d7a497ee..3ef9cc506a3 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectCmd.java @@ -34,8 +34,8 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; public class GetTaskDataObjectCmd implements Command, Serializable { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectsCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectsCmd.java index a5cb8538c38..4be0c501fbd 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectsCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/GetTaskDataObjectsCmd.java @@ -38,8 +38,8 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; public class GetTaskDataObjectsCmd implements Command>, Serializable { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java index 633ba1766d4..5001d49bbc8 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java @@ -22,8 +22,8 @@ import org.flowable.engine.impl.persistence.entity.ProcessDefinitionInfoEntityManager; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectWriter; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/context/BpmnOverrideContext.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/context/BpmnOverrideContext.java index 04b1d4e58cb..f6c3f368062 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/context/BpmnOverrideContext.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/context/BpmnOverrideContext.java @@ -24,7 +24,7 @@ import org.flowable.engine.impl.persistence.deploy.ProcessDefinitionInfoCacheObject; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class BpmnOverrideContext { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java index 1169344ce03..7e8a15a1df5 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java @@ -47,10 +47,10 @@ import org.flowable.variable.service.impl.types.StringType; import org.flowable.variable.service.impl.types.UUIDType; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/BatchDeleteProcessConfig.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/BatchDeleteProcessConfig.java index a5d0d9f8871..1c21ffefed2 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/BatchDeleteProcessConfig.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/BatchDeleteProcessConfig.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -26,7 +25,6 @@ import org.flowable.common.engine.api.FlowableException; import org.flowable.common.engine.api.FlowableIllegalArgumentException; import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; -import org.flowable.common.engine.impl.util.ExceptionUtil; import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.job.service.impl.history.async.AsyncHistoryDateUtil; @@ -34,9 +32,8 @@ import org.flowable.variable.api.types.VariableType; import org.flowable.variable.service.impl.QueryOperator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov @@ -432,13 +429,8 @@ protected static Set asStringSet(JsonNode node) { } protected static JsonNode getBatchConfiguration(Batch batch, ProcessEngineConfigurationImpl engineConfiguration) { - try { - return engineConfiguration.getObjectMapper() - .readTree(batch.getBatchDocumentJson(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG)); - } catch (JsonProcessingException e) { - ExceptionUtil.sneakyThrow(e); - return null; - } + return engineConfiguration.getObjectMapper() + .readTree(batch.getBatchDocumentJson(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG)); } protected static String prepareFailedResultAsJsonString(String errorMessage, ProcessEngineConfigurationImpl engineConfiguration) { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/ComputeDeleteHistoricProcessInstanceIdsJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/ComputeDeleteHistoricProcessInstanceIdsJobHandler.java index 48a3ab9d637..81a83f451e5 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/ComputeDeleteHistoricProcessInstanceIdsJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/ComputeDeleteHistoricProcessInstanceIdsJobHandler.java @@ -27,8 +27,8 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsJobHandler.java index 55b5bd80be9..df7fbc11a8a 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsJobHandler.java @@ -24,7 +24,6 @@ import org.flowable.common.engine.api.FlowableIllegalArgumentException; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; -import org.flowable.common.engine.impl.util.ExceptionUtil; import org.flowable.engine.HistoryService; import org.flowable.engine.ManagementService; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; @@ -34,10 +33,9 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov @@ -147,13 +145,7 @@ public void execute(JobEntity job, String configuration, VariableScope variableS } protected JsonNode getBatchPartResult(BatchPart batchPart, ProcessEngineConfigurationImpl engineConfiguration) { - try { - return engineConfiguration.getObjectMapper() - .readTree(batchPart.getResultDocumentJson(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG)); - - } catch (JsonProcessingException e) { - ExceptionUtil.sneakyThrow(e); - return null; - } + return engineConfiguration.getObjectMapper() + .readTree(batchPart.getResultDocumentJson(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG)); } } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsStatusJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsStatusJobHandler.java index 8a00d28e90c..e4e98ac7d93 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsStatusJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstanceIdsStatusJobHandler.java @@ -18,7 +18,6 @@ import org.flowable.batch.api.BatchPart; import org.flowable.batch.api.BatchPartQuery; import org.flowable.batch.service.impl.persistence.entity.BatchEntity; -import org.flowable.common.engine.api.FlowableException; import org.flowable.common.engine.api.FlowableIllegalArgumentException; import org.flowable.common.engine.api.scope.ScopeTypes; import org.flowable.common.engine.impl.interceptor.CommandContext; @@ -29,10 +28,9 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov @@ -121,10 +119,6 @@ protected JsonNode readJson(String json, ObjectMapper objectMapper) { if (json == null) { return null; } - try { - return objectMapper.readTree(json); - } catch (JsonProcessingException e) { - throw new FlowableException("Failed to read json", e); - } + return objectMapper.readTree(json); } } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesSequentialJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesSequentialJobHandler.java index fda1972cc36..9db195bb6de 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesSequentialJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesSequentialJobHandler.java @@ -32,8 +32,8 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesUsingBatchesCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesUsingBatchesCmd.java index 5be5e46ff2f..ce4971a4018 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesUsingBatchesCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/DeleteHistoricProcessInstancesUsingBatchesCmd.java @@ -37,8 +37,8 @@ import org.flowable.job.service.impl.persistence.entity.TimerJobEntity; import org.flowable.variable.service.impl.QueryVariableValue; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/EventLogger.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/EventLogger.java index d09eced4ea1..b17a18fdb5d 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/EventLogger.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/EventLogger.java @@ -45,7 +45,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java index 3cfdfb339a2..470554295c2 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java @@ -26,7 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/EventLoggerEventHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/EventLoggerEventHandler.java index ca046d2e38e..8802b53583a 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/EventLoggerEventHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/EventLoggerEventHandler.java @@ -18,7 +18,7 @@ import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.impl.persistence.entity.EventLogEntryEntity; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/VariableEventHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/VariableEventHandler.java index 8fa6c122c42..169f6c92c4a 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/VariableEventHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/logger/handler/VariableEventHandler.java @@ -32,8 +32,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -138,13 +139,13 @@ protected Map createData(FlowableVariableEvent variableEvent) { } else if (variableType instanceof SerializableType || (variableEvent.getVariableValue() != null && (variableEvent.getVariableValue() instanceof Object))) { // Last try: serialize it to json - ObjectMapper objectMapper = new ObjectMapper(); + ObjectMapper objectMapper = JsonMapper.shared(); try { String value = objectMapper.writeValueAsString(variableEvent.getVariableValue()); putInMapIfNotNull(data, Fields.VALUE_JSON, value); putInMapIfNotNull(data, Fields.VARIABLE_TYPE, TYPE_JSON); putInMapIfNotNull(data, Fields.VALUE, value); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { // Nothing to do about it LOGGER.debug("Could not serialize variable value {}", variableEvent.getVariableValue()); } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AbstractProcessInstanceMigrationJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AbstractProcessInstanceMigrationJobHandler.java index 90d98a5f032..ea9de96a301 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AbstractProcessInstanceMigrationJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AbstractProcessInstanceMigrationJobHandler.java @@ -12,14 +12,14 @@ */ package org.flowable.engine.impl.jobexecutor; -import java.io.IOException; - import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.job.service.JobHandler; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; public abstract class AbstractProcessInstanceMigrationJobHandler implements JobHandler { @@ -37,7 +37,7 @@ protected static String getBatchIdFromHandlerCfg(String handlerCfg) { return cfgAsJson.get(CFG_LABEL_BATCH_ID).asText(); } return null; - } catch (IOException e) { + } catch (JacksonException e) { return null; } } @@ -49,7 +49,7 @@ protected static String getBatchPartIdFromHandlerCfg(String handlerCfg) { return cfgAsJson.get(CFG_LABEL_BATCH_PART_ID).asText(); } return null; - } catch (IOException e) { + } catch (JacksonException e) { return null; } } @@ -70,7 +70,7 @@ protected static ObjectMapper getObjectMapper() { if (CommandContextUtil.getCommandContext() != null) { return CommandContextUtil.getProcessEngineConfiguration().getObjectMapper(); } else { - return new ObjectMapper(); + return JsonMapper.shared(); } } } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AsyncLeaveJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AsyncLeaveJobHandler.java index 49c8e63d60a..310b5c1584f 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AsyncLeaveJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/AsyncLeaveJobHandler.java @@ -32,10 +32,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @@ -82,7 +82,7 @@ public void execute(JobEntity job, String configuration, VariableScope variableS CommandContextUtil.getAgenda(commandContext).planTakeOutgoingSequenceFlowsSynchronousOperation(executionEntity, evaluateConditions); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { LOGGER.warn("Programmatic error: could not parse job configuration JSON", e); } } @@ -148,12 +148,7 @@ public static String createJobConfiguration(ProcessEngineConfiguration processEn ObjectMapper objectMapper = processEngineConfiguration.getObjectMapper(); ObjectNode objectNode = objectMapper.createObjectNode(); objectNode.put(FIELD_EVALUATE_CONDITIONS, evaluateConditions); - try { - return objectMapper.writeValueAsString(objectNode); - } catch (JsonProcessingException e) { - LOGGER.warn("Programmatic error: could not create job configuration JSON", e); - } - return null; + return objectMapper.writeValueAsString(objectNode); } public static String createJobConfiguration(ProcessEngineConfiguration processEngineConfiguration, SequenceFlow sequenceFlow) { @@ -179,12 +174,7 @@ public static String createJobConfiguration(ProcessEngineConfiguration processEn } - try { - return objectMapper.writeValueAsString(objectNode); - } catch (JsonProcessingException e) { - LOGGER.warn("Programmatic error: could not create job configuration JSON", e); - } - return null; + return objectMapper.writeValueAsString(objectNode); } } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/ProcessInstanceMigrationJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/ProcessInstanceMigrationJobHandler.java index d993e07e0fb..8c43e9bfc75 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/ProcessInstanceMigrationJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/ProcessInstanceMigrationJobHandler.java @@ -31,7 +31,7 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class ProcessInstanceMigrationJobHandler extends AbstractProcessInstanceMigrationJobHandler { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java index 94fd33763f7..690b5968612 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java @@ -20,7 +20,7 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java index 10271571f11..875be3c93a0 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java @@ -15,8 +15,8 @@ import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.job.service.JobHandler; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerEventHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerEventHandler.java index 20e2a051594..e7410947d61 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerEventHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerEventHandler.java @@ -12,13 +12,12 @@ */ package org.flowable.engine.impl.jobexecutor; -import java.io.IOException; - import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; public class TimerEventHandler { @@ -43,7 +42,7 @@ public static String setActivityIdToConfiguration(String jobHandlerConfiguration ObjectNode cfgJson = readJsonValueAsObjectNode(jobHandlerConfiguration); cfgJson.put(PROPERTYNAME_TIMER_ACTIVITY_ID, activityId); return cfgJson.toString(); - } catch (IOException ex) { + } catch (JacksonException ex) { return jobHandlerConfiguration; } } @@ -58,7 +57,7 @@ public static String getActivityIdFromConfiguration(String jobHandlerConfigurati return jobHandlerConfiguration; } - } catch (IOException ex) { + } catch (JacksonException ex) { return jobHandlerConfiguration; } } @@ -73,7 +72,7 @@ public static String getCalendarNameFromConfiguration(String jobHandlerConfigura return ""; } - } catch (IOException ex) { + } catch (JacksonException ex) { // calendar name is not specified return ""; } @@ -83,7 +82,7 @@ public static String setEndDateToConfiguration(String jobHandlerConfiguration, S ObjectNode cfgJson = null; try { cfgJson = readJsonValueAsObjectNode(jobHandlerConfiguration); - } catch (IOException ex) { + } catch (JacksonException ex) { // create the json config cfgJson = createObjectNode(); cfgJson.put(PROPERTYNAME_TIMER_ACTIVITY_ID, jobHandlerConfiguration); @@ -106,7 +105,7 @@ public static String getEndDateFromConfiguration(String jobHandlerConfiguration) return null; } - } catch (IOException ex) { + } catch (JacksonException ex) { return null; } } @@ -115,15 +114,15 @@ protected static ObjectNode createObjectNode() { return CommandContextUtil.getProcessEngineConfiguration().getObjectMapper().createObjectNode(); } - protected static ObjectNode readJsonValueAsObjectNode(String config) throws IOException { + protected static ObjectNode readJsonValueAsObjectNode(String config) throws JacksonException { return (ObjectNode) readJsonValue(config); } - protected static JsonNode readJsonValue(String config) throws IOException { + protected static JsonNode readJsonValue(String config) throws JacksonException { if (CommandContextUtil.getCommandContext() != null) { return CommandContextUtil.getProcessEngineConfiguration().getObjectMapper().readTree(config); } else { - return new ObjectMapper().readTree(config); + return JsonMapper.shared().readTree(config); } } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java index e01ab3116e1..129fdd644fb 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java @@ -20,7 +20,7 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.variable.api.delegate.VariableScope; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/migration/ProcessInstanceMigrationDocumentImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/migration/ProcessInstanceMigrationDocumentImpl.java index b4e16635ff1..093cc84833e 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/migration/ProcessInstanceMigrationDocumentImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/migration/ProcessInstanceMigrationDocumentImpl.java @@ -28,7 +28,7 @@ import org.flowable.engine.migration.ProcessInstanceMigrationDocumentConverter; import org.flowable.engine.migration.Script; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Dennis Federico diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java index 3920754b515..f00b4e677df 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java @@ -30,8 +30,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Default cache: keep everything in memory, unless a limit is set. diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java index d7461bbced5..918741b0b7c 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java @@ -14,7 +14,7 @@ import java.io.Serializable; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/ExecutionEntityImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/ExecutionEntityImpl.java index 7646ffae85c..c49b0bf1480 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/ExecutionEntityImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/ExecutionEntityImpl.java @@ -54,7 +54,7 @@ import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; import org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/SuspensionStateUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/SuspensionStateUtil.java index 585215dbb2f..66d06e8ea14 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/SuspensionStateUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/entity/SuspensionStateUtil.java @@ -27,7 +27,7 @@ import org.flowable.task.service.impl.BaseHistoricTaskLogEntryBuilderImpl; import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Helper class for suspension state diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/repository/DefaultProcessDefinitionLocalizationManager.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/repository/DefaultProcessDefinitionLocalizationManager.java index 1748e6d567f..80979011c73 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/repository/DefaultProcessDefinitionLocalizationManager.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/repository/DefaultProcessDefinitionLocalizationManager.java @@ -20,8 +20,8 @@ import org.flowable.engine.repository.InternalProcessDefinitionLocalizationManager; import org.flowable.engine.repository.ProcessDefinition; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author David Lamas diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/test/AbstractFlowableTestCase.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/test/AbstractFlowableTestCase.java index 2bbae9314b4..6a7b990e314 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/test/AbstractFlowableTestCase.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/test/AbstractFlowableTestCase.java @@ -19,7 +19,6 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -62,7 +61,7 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.junit.jupiter.api.BeforeEach; -import com.fasterxml.jackson.core.type.TypeReference; +import tools.jackson.core.type.TypeReference; /** * @author Tom Baeyens @@ -487,15 +486,11 @@ protected static Map> groupListContentBy(List source, Func } protected String getJobActivityId(Job job) { - try { - Map jobConfigurationMap = processEngineConfiguration.getObjectMapper() - .readValue(job.getJobHandlerConfiguration(), new TypeReference<>() { - - }); - return (String) jobConfigurationMap.get("activityId"); - } catch (IOException e) { - throw new RuntimeException(e); - } + Map jobConfigurationMap = processEngineConfiguration.getObjectMapper() + .readValue(job.getJobHandlerConfiguration(), new TypeReference<>() { + + }); + return (String) jobConfigurationMap.get("activityId"); } protected ProcessDefinition deployProcessDefinition(String name, String path) { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/BpmnLoggingSessionUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/BpmnLoggingSessionUtil.java index a15f86b9c3e..6e907e35097 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/BpmnLoggingSessionUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/BpmnLoggingSessionUtil.java @@ -44,9 +44,9 @@ import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; public class BpmnLoggingSessionUtil { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java index ac8214d2e1a..2d9831ce9d5 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java @@ -26,7 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IdentityLinkUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IdentityLinkUtil.java index 9bbae7c2295..df6b9ad508d 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IdentityLinkUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IdentityLinkUtil.java @@ -24,7 +24,7 @@ import org.flowable.task.service.impl.persistence.CountingTaskEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java index 9977f6ba90e..158dc1c592c 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/ProcessInstanceHelper.java @@ -65,7 +65,7 @@ import org.flowable.identitylink.api.IdentityLinkType; import org.flowable.job.service.impl.persistence.entity.TimerJobEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/TaskHelper.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/TaskHelper.java index 3429e810c08..a1f6dd5f078 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/TaskHelper.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/TaskHelper.java @@ -56,7 +56,7 @@ import org.flowable.variable.service.event.impl.FlowableVariableEventBuilder; import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/condition/ConditionUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/condition/ConditionUtil.java index 17cbb8a0bf4..e5c5040cdd4 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/condition/ConditionUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/condition/ConditionUtil.java @@ -23,8 +23,8 @@ import org.flowable.engine.impl.scripting.ScriptCondition; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/migration/ProcessInstanceMigrationDocumentConverter.java b/modules/flowable-engine/src/main/java/org/flowable/engine/migration/ProcessInstanceMigrationDocumentConverter.java index 8d03379c782..aa475fd8510 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/migration/ProcessInstanceMigrationDocumentConverter.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/migration/ProcessInstanceMigrationDocumentConverter.java @@ -12,7 +12,6 @@ */ package org.flowable.engine.migration; -import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,13 +21,14 @@ import org.flowable.common.engine.api.FlowableException; import org.flowable.engine.impl.migration.ProcessInstanceMigrationDocumentBuilderImpl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectWriter; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Dennis @@ -40,7 +40,7 @@ public class ProcessInstanceMigrationDocumentConverter { protected static Predicate isSingleTextValue = jsonNode -> isNotNullNode.test(jsonNode) && jsonNode.isTextual(); protected static Predicate isMultiValue = jsonNode -> isNotNullNode.test(jsonNode) && jsonNode.isArray(); - protected static ObjectMapper objectMapper = new ObjectMapper(); + protected static ObjectMapper objectMapper = JsonMapper.shared(); protected static Map, BaseActivityMigrationMappingConverter> activityMigrationMappingConverters = new HashMap<>(); @@ -125,7 +125,7 @@ public static String convertToJsonString(ProcessInstanceMigrationDocument proces ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter(); try { return objectWriter.writeValueAsString(jsonNode); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { return jsonNode.toString(); } } @@ -249,7 +249,7 @@ public static ProcessInstanceMigrationDocument convertFromJson(String jsonProces } return documentBuilder.build(); - } catch (IOException e) { + } catch (JacksonException e) { throw new FlowableException("Error parsing Process Instance Migration Document", e); } diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/event/DatabaseEventLoggerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/event/DatabaseEventLoggerTest.java index de292513b17..75ff92be283 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/event/DatabaseEventLoggerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/event/DatabaseEventLoggerTest.java @@ -15,7 +15,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; -import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,10 +32,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -45,7 +43,7 @@ public class DatabaseEventLoggerTest extends PluggableFlowableTestCase { protected EventLogger databaseEventLogger; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @BeforeEach protected void setUp() throws Exception { @@ -65,7 +63,7 @@ protected void tearDown() throws Exception { @Test @Deployment(resources = { "org/flowable/engine/test/api/event/DatabaseEventLoggerProcess.bpmn20.xml" }) - public void testDatabaseEvents() throws IOException { + public void testDatabaseEvents() { String testTenant = "testTenant"; @@ -481,7 +479,7 @@ public void testDatabaseEvents() throws IOException { } @Test - public void testDatabaseEventsNoTenant() throws IOException { + public void testDatabaseEventsNoTenant() { String deploymentId = repositoryService.createDeployment() .addClasspathResource("org/flowable/engine/test/api/event/DatabaseEventLoggerProcess.bpmn20.xml").deploy().getId(); @@ -592,7 +590,7 @@ public void testDatabaseEventsNoTenant() throws IOException { } @Test - public void testStandaloneTaskEvents() throws JsonParseException, JsonMappingException, IOException { + public void testStandaloneTaskEvents() { org.flowable.task.api.Task task = taskService.newTask(); task.setAssignee("kermit"); diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoricProcessInstanceQueryTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoricProcessInstanceQueryTest.java index 7a72f1d91c4..1c1132ae5a3 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoricProcessInstanceQueryTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoricProcessInstanceQueryTest.java @@ -32,7 +32,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class HistoricProcessInstanceQueryTest extends PluggableFlowableTestCase { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoryServiceTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoryServiceTest.java index 02bc80d6cc8..6e9dbf26f0c 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoryServiceTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/history/HistoryServiceTest.java @@ -49,7 +49,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Frederik Heremans diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/repository/ProcessDefinitionQueryTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/repository/ProcessDefinitionQueryTest.java index 97f15a413c8..b5dcb7dbe5c 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/repository/ProcessDefinitionQueryTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/repository/ProcessDefinitionQueryTest.java @@ -32,7 +32,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ExecutionQueryTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ExecutionQueryTest.java index 2fd8c76556f..2ba6718b93c 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ExecutionQueryTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ExecutionQueryTest.java @@ -44,7 +44,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ProcessInstanceQueryTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ProcessInstanceQueryTest.java index 70b74185354..a8ecd34c659 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ProcessInstanceQueryTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/ProcessInstanceQueryTest.java @@ -48,7 +48,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/AbstractProcessInstanceMigrationEventRegistryConsumerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/AbstractProcessInstanceMigrationEventRegistryConsumerTest.java index 22e6171122a..c25851ccbdb 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/AbstractProcessInstanceMigrationEventRegistryConsumerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/AbstractProcessInstanceMigrationEventRegistryConsumerTest.java @@ -25,9 +25,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Provides a test channel and test events. @@ -110,11 +109,7 @@ public void triggerTestEvent() { } public void triggerTestEvent(ObjectNode eventNode) { - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(eventNode)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(eventNode)); } protected ObjectNode createTestEventNode() { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ConvertProcessVariable.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ConvertProcessVariable.java index 3e086dce868..fb8e0e59bbf 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ConvertProcessVariable.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ConvertProcessVariable.java @@ -19,8 +19,8 @@ import org.flowable.engine.delegate.JavaDelegate; import org.flowable.engine.impl.context.Context; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; /** * @author martin.grofcik diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationMultiInstanceTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationMultiInstanceTest.java index cae6bf48eff..e73986e67d5 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationMultiInstanceTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationMultiInstanceTest.java @@ -41,8 +41,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Dennis Federico diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationTest.java index df63890419f..ee9a6445c6c 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/runtime/migration/ProcessInstanceMigrationTest.java @@ -68,9 +68,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; public class ProcessInstanceMigrationTest extends AbstractProcessInstanceMigrationTest { @@ -4512,8 +4512,8 @@ public void preUpgradeScriptMigration() { processMigrationService.createProcessInstanceMigrationBuilder().preUpgradeScript(new Script("groovy", """ - import com.fasterxml.jackson.databind.ObjectMapper - import com.fasterxml.jackson.databind.node.ArrayNode + import tools.jackson.databind.ObjectMapper + import tools.jackson.databind.node.ArrayNode import org.flowable.engine.impl.context.Context List list = execution.getVariable('listVariable') @@ -4621,8 +4621,8 @@ public void postUpgradeScriptMigration() { processMigrationService.createProcessInstanceMigrationBuilder().postUpgradeScript(new Script("groovy", """ - import com.fasterxml.jackson.databind.ObjectMapper - import com.fasterxml.jackson.databind.node.ArrayNode + import tools.jackson.databind.ObjectMapper + import tools.jackson.databind.node.ArrayNode import org.flowable.engine.impl.context.Context List list = execution.getVariable('listVariable') diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskIdentityLinksTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskIdentityLinksTest.java index 232ceffb9ef..a087157ed2a 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskIdentityLinksTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskIdentityLinksTest.java @@ -34,7 +34,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * @author Tom Baeyens diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskQueryTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskQueryTest.java index 18e9381f748..ba0ea516879 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskQueryTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/task/TaskQueryTest.java @@ -51,7 +51,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariableInstanceValueModifierBpmnTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariableInstanceValueModifierBpmnTest.java index f466f763a84..4fc0f95e7a2 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariableInstanceValueModifierBpmnTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariableInstanceValueModifierBpmnTest.java @@ -53,8 +53,8 @@ import org.junit.jupiter.api.Test; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; + +import tools.jackson.databind.ObjectMapper; /** * @author Arthur Hupka-Merle @@ -485,12 +485,7 @@ Pair determineValueAndMetaInfo(Object value) { if (value instanceof String) { VariableMeta variableMeta = new VariableMeta(); variableMeta.byteLength = String.valueOf(((String) value).getBytes().length); - String metaInfo; - try { - metaInfo = objectMapper.writeValueAsString(variableMeta); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + String metaInfo = objectMapper.writeValueAsString(variableMeta); return Pair.of(value + "Enhanced", metaInfo); } diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariablesTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariablesTest.java index 5f67357d1e8..63efb3790f4 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariablesTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/api/variables/VariablesTest.java @@ -62,7 +62,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Testing various constructs with variables. diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java index 91de2aa7c15..605c5138980 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java @@ -22,7 +22,7 @@ import org.flowable.engine.test.Deployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 7/12/2016. diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java index 08de1f04a94..f5bcd75c715 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java @@ -25,8 +25,8 @@ import org.flowable.engine.test.Deployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/gateway/InclusiveGatewayTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/gateway/InclusiveGatewayTest.java index 04f73120a5b..4cbb3328798 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/gateway/InclusiveGatewayTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/gateway/InclusiveGatewayTest.java @@ -56,7 +56,7 @@ import org.flowable.variable.api.history.HistoricVariableInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/mail/EmailServiceTaskTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/mail/EmailServiceTaskTest.java index 2da548af82e..2f772654336 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/mail/EmailServiceTaskTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/mail/EmailServiceTaskTest.java @@ -46,7 +46,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.subethamail.wiser.WiserMessage; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -87,7 +87,7 @@ private static Stream recipientsTest() { return Stream.of( Arguments.of("flowable@localhost, misspiggy@flowable.org"), Arguments.of(Arrays.asList("flowable@localhost", "misspiggy@flowable.org")), - Arguments.of(new ObjectMapper().createArrayNode().add("flowable@localhost").add("misspiggy@flowable.org")) + Arguments.of(JsonMapper.shared().createArrayNode().add("flowable@localhost").add("misspiggy@flowable.org")) ); } diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/DynamicMultiInstanceTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/DynamicMultiInstanceTest.java index 26f098d48b5..dc626251c57 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/DynamicMultiInstanceTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/DynamicMultiInstanceTest.java @@ -34,7 +34,7 @@ import org.flowable.task.api.TaskQuery; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/JSONCollectionHandler.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/JSONCollectionHandler.java index f2bf2664a2d..aa4878f63af 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/JSONCollectionHandler.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/JSONCollectionHandler.java @@ -20,8 +20,8 @@ import org.flowable.engine.impl.delegate.FlowableCollectionHandler; import org.flowable.engine.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** * @author Lori Small diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceNoWaitStatesTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceNoWaitStatesTest.java index fdf86d89468..689d55eb42f 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceNoWaitStatesTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceNoWaitStatesTest.java @@ -34,9 +34,9 @@ import org.flowable.variable.api.persistence.entity.VariableInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationTest.java index e3c9b837d1c..adf0bbc7fed 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationTest.java @@ -53,10 +53,10 @@ import org.flowable.variable.service.impl.types.JsonType; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/ParallelMultiInstanceAsyncTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/ParallelMultiInstanceAsyncTest.java index fe64c6b42b4..b0f7dd628fa 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/ParallelMultiInstanceAsyncTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/ParallelMultiInstanceAsyncTest.java @@ -14,9 +14,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; public class ParallelMultiInstanceAsyncTest extends PluggableFlowableTestCase { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/TestJsonDelegate.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/TestJsonDelegate.java index f1ff52ba071..2e88cc15091 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/TestJsonDelegate.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/TestJsonDelegate.java @@ -15,7 +15,7 @@ import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.JavaDelegate; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class TestJsonDelegate implements JavaDelegate { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java index 8b31840f8e6..2ee3c977b78 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java @@ -26,7 +26,7 @@ import org.flowable.engine.test.Deployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java index 4f66168d6f7..6be63874693 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java @@ -26,7 +26,7 @@ import org.flowable.variable.api.history.HistoricVariableInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/subprocess/CallActivityInOutMappingTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/subprocess/CallActivityInOutMappingTest.java index 7f8bc1b17b3..0263cc5dd66 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/subprocess/CallActivityInOutMappingTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/subprocess/CallActivityInOutMappingTest.java @@ -17,10 +17,10 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; public class CallActivityInOutMappingTest extends PluggableFlowableTestCase { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java index b56f6265769..32405dffe53 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java @@ -23,7 +23,7 @@ import org.flowable.engine.test.Deployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DynamicUserTaskTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DynamicUserTaskTest.java index 76f361324f3..ddd35419bae 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DynamicUserTaskTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/DynamicUserTaskTest.java @@ -26,7 +26,7 @@ import org.flowable.identitylink.api.IdentityLinkType; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/TaskAssignmentExtensionsTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/TaskAssignmentExtensionsTest.java index 424c94d9632..5de9b29ed00 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/TaskAssignmentExtensionsTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/usertask/TaskAssignmentExtensionsTest.java @@ -31,7 +31,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ArrayNode; /** * Testcase for the non-spec extensions to the task candidate use case. diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java index 72016568ad4..e917c08e6f0 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java @@ -32,8 +32,8 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Frederik Heremans diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/JsonVariableContainerExpressionTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/JsonVariableContainerExpressionTest.java index 547abd90faa..cee0f95de8b 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/JsonVariableContainerExpressionTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/JsonVariableContainerExpressionTest.java @@ -23,8 +23,7 @@ import org.flowable.engine.impl.test.PluggableFlowableTestCase; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class JsonVariableContainerExpressionTest extends PluggableFlowableTestCase { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/AbstractBpmnEventRegistryConsumerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/AbstractBpmnEventRegistryConsumerTest.java index da79deb16a2..2305b6382ee 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/AbstractBpmnEventRegistryConsumerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/AbstractBpmnEventRegistryConsumerTest.java @@ -25,9 +25,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Provides a test channel and test events. @@ -116,11 +115,7 @@ public void triggerTestEvent(String customerId, String orderId) { } public void triggerTestEvent(ObjectNode eventNode) { - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(eventNode)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(eventNode)); } protected ObjectNode createTestEventNode(String customerId, String orderId) { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnEventRegistryConsumerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnEventRegistryConsumerTest.java index 8b895a5adbb..872d0f50884 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnEventRegistryConsumerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnEventRegistryConsumerTest.java @@ -32,7 +32,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class BpmnEventRegistryConsumerTest extends AbstractBpmnEventRegistryConsumerTest { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnHeaderEventRegistryConsumerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnHeaderEventRegistryConsumerTest.java index fe4ce7280d4..8a2c1f48365 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnHeaderEventRegistryConsumerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/BpmnHeaderEventRegistryConsumerTest.java @@ -37,9 +37,8 @@ import org.junit.jupiter.api.Test; import org.springframework.util.LinkedCaseInsensitiveMap; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class BpmnHeaderEventRegistryConsumerTest extends FlowableEventRegistryBpmnTestCase { @@ -194,12 +193,8 @@ public void triggerTestEventWithHeaders(String customerId, String headerValue1, if (headerValue2 != null) { headers.put("headerProperty2", headerValue2); } - try { - String event = objectMapper.writeValueAsString(eventNode); - eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + String event = objectMapper.writeValueAsString(eventNode); + eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); } public void triggerTestEventWithCaseInsensitiveHeaders(String customerId, String headerValue1, Integer headerValue2) { @@ -207,12 +202,8 @@ public void triggerTestEventWithCaseInsensitiveHeaders(String customerId, String Map headers = new LinkedCaseInsensitiveMap<>(); headers.put("HeaderProperty1", headerValue1); headers.put("HeaderProperty2", headerValue2); - try { - String event = objectMapper.writeValueAsString(eventNode); - eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + String event = objectMapper.writeValueAsString(eventNode); + eventRegistry.eventReceived(inboundChannelModel, new DefaultInboundEvent(event, headers)); } protected ObjectNode createTestEventNode(String customerId, String orderId) { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventPayloadTypesConversionTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventPayloadTypesConversionTest.java index 9022d9aa9c4..5d70e4fbcd0 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventPayloadTypesConversionTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventPayloadTypesConversionTest.java @@ -34,10 +34,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez @@ -314,11 +313,7 @@ public void testTriggerEvent() { json.put("booleanPayload", true); json.set("jsonPayload", objectMapper.createObjectNode().put("hello", "world")); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } } diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventRegistryEventSubprocessTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventRegistryEventSubprocessTest.java index 0519d6d90f0..0b589d036b7 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventRegistryEventSubprocessTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/EventRegistryEventSubprocessTest.java @@ -41,9 +41,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers @@ -427,11 +426,7 @@ public void triggerTestEvent(String customerId, String orderId) { } json.put("payload1", "Hello World"); json.put("payload2", new Random().nextInt()); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } } diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantBpmnEventRegistryConsumerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantBpmnEventRegistryConsumerTest.java index 5566c8ca63f..9ec286c307f 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantBpmnEventRegistryConsumerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantBpmnEventRegistryConsumerTest.java @@ -39,9 +39,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez @@ -441,11 +440,7 @@ public void triggerEventWithoutTenantId(String customerId) { json.put("payload", "Hello World"); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } public void triggerEventForTenantId(String customerId, String tenantId) { @@ -463,11 +458,7 @@ public void triggerEventForTenantId(String customerId, String tenantId) { json.put("payload", "Hello World"); json.put("tenantId", tenantId); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } } diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantSendEventTaskTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantSendEventTaskTest.java index 7c0364a900b..66269a4a199 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantSendEventTaskTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/MultiTenantSendEventTaskTest.java @@ -40,10 +40,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class MultiTenantSendEventTaskTest extends FlowableEventRegistryBpmnTestCase { @@ -168,7 +167,7 @@ public void testSendEvent() throws Exception { validateEventSent(instanceB, "tenantBProperty"); } - private void validateEventSent(ProcessInstance processInstance, String property) throws JsonProcessingException { + private void validateEventSent(ProcessInstance processInstance, String property) { assertThat(outboundEventChannelAdapter.receivedEvents).isEmpty(); Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); taskService.complete(task.getId()); diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/SendEventTaskTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/SendEventTaskTest.java index 996a29fd896..f70fd656bdd 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/SendEventTaskTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/eventregistry/SendEventTaskTest.java @@ -43,9 +43,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class SendEventTaskTest extends FlowableEventRegistryBpmnTestCase { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java index 8aa7cf0483c..2990b94743f 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java @@ -43,10 +43,11 @@ import org.flowable.variable.service.impl.types.JsonType; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers @@ -58,7 +59,7 @@ public class JsonTest extends PluggableFlowableTestCase { public static final String MY_JSON_OBJ = "myJsonObj"; public static final String BIG_JSON_OBJ = "bigJsonObj"; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @Test @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testUpdateJsonValueDuringExecution.bpmn20.xml") diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/FlowableLoggingListener.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/FlowableLoggingListener.java index 68d28f9794f..895fd116a9c 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/FlowableLoggingListener.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/FlowableLoggingListener.java @@ -17,7 +17,7 @@ import org.flowable.common.engine.impl.logging.LoggingListener; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class FlowableLoggingListener implements LoggingListener { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/ServiceTaskLoggingTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/ServiceTaskLoggingTest.java index 272b8c595c0..dbf1bd751cf 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/ServiceTaskLoggingTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/ServiceTaskLoggingTest.java @@ -42,8 +42,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; public class ServiceTaskLoggingTest extends ResourceFlowableTestCase { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/TimerLoggingTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/TimerLoggingTest.java index a4041cef225..306bb4649be 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/TimerLoggingTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/logging/TimerLoggingTest.java @@ -25,7 +25,7 @@ import org.flowable.engine.test.Deployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class TimerLoggingTest extends ResourceFlowableTestCase { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/variable/MaxAllowedVariableLengthTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/variable/MaxAllowedVariableLengthTest.java index b823ee809a5..b0057f420df 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/variable/MaxAllowedVariableLengthTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/variable/MaxAllowedVariableLengthTest.java @@ -30,7 +30,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/callactivity/CallActivityTest.java b/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/callactivity/CallActivityTest.java index 702c4928ffe..f1c9a733630 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/callactivity/CallActivityTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/callactivity/CallActivityTest.java @@ -25,7 +25,7 @@ import org.flowable.task.api.TaskQuery; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/scripttask/ScriptTaskTest.java b/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/scripttask/ScriptTaskTest.java index a3e22bd5cdc..fec023bd4f1 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/scripttask/ScriptTaskTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/examples/bpmn/scripttask/ScriptTaskTest.java @@ -30,7 +30,7 @@ import org.flowable.engine.test.Deployment; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; import groovy.lang.MissingPropertyException; diff --git a/modules/flowable-engine/src/test/java/org/flowable/examples/variables/VariablesTest.java b/modules/flowable-engine/src/test/java/org/flowable/examples/variables/VariablesTest.java index 974d326146b..f86d6e8b535 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/examples/variables/VariablesTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/examples/variables/VariablesTest.java @@ -46,7 +46,7 @@ import org.flowable.variable.api.types.VariableType; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable-entitylink-service/src/main/java/org/flowable/entitylink/service/EntityLinkServiceConfiguration.java b/modules/flowable-entitylink-service/src/main/java/org/flowable/entitylink/service/EntityLinkServiceConfiguration.java index aed512241cb..a95abd11494 100755 --- a/modules/flowable-entitylink-service/src/main/java/org/flowable/entitylink/service/EntityLinkServiceConfiguration.java +++ b/modules/flowable-entitylink-service/src/main/java/org/flowable/entitylink/service/EntityLinkServiceConfiguration.java @@ -26,7 +26,7 @@ import org.flowable.entitylink.service.impl.persistence.entity.data.impl.MybatisEntityLinkDataManager; import org.flowable.entitylink.service.impl.persistence.entity.data.impl.MybatisHistoricEntityLinkDataManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tijs Rademakers diff --git a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/BpmnWithEventRegistryTestConfiguration.java b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/BpmnWithEventRegistryTestConfiguration.java index 8a5dde7009b..fcf2b4f03f9 100644 --- a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/BpmnWithEventRegistryTestConfiguration.java +++ b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/BpmnWithEventRegistryTestConfiguration.java @@ -33,9 +33,11 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; import com.zaxxer.hikari.HikariDataSource; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; + @Configuration(proxyBeanMethods = false) public class BpmnWithEventRegistryTestConfiguration { @@ -62,7 +64,7 @@ public PlatformTransactionManager transactionManager(DataSource dataSource) { @Bean public ObjectMapper objectMapper() { - return new ObjectMapper(); + return JsonMapper.shared(); } @Bean diff --git a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CaseWithEventRegistryTest.java b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CaseWithEventRegistryTest.java index b6544206bc4..0103ad6855f 100644 --- a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CaseWithEventRegistryTest.java +++ b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CaseWithEventRegistryTest.java @@ -42,8 +42,8 @@ import org.springframework.jms.core.JmsTemplate; import org.springframework.test.context.TestPropertySource; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; import jakarta.jms.Message; import jakarta.jms.TextMessage; diff --git a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CmmnWithEventRegistryTestConfiguration.java b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CmmnWithEventRegistryTestConfiguration.java index 6e9c1395828..096cd5fa8c9 100644 --- a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CmmnWithEventRegistryTestConfiguration.java +++ b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/CmmnWithEventRegistryTestConfiguration.java @@ -32,9 +32,11 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; import com.zaxxer.hikari.HikariDataSource; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; + /** * @author Filip Hrisafov */ @@ -65,7 +67,7 @@ public PlatformTransactionManager transactionManager(DataSource dataSource) { @Bean public ObjectMapper objectMapper() { - return new ObjectMapper(); + return JsonMapper.shared(); } @Bean diff --git a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/JmsConfiguration.java b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/JmsConfiguration.java index b591fadd8c0..073fc569c97 100644 --- a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/JmsConfiguration.java +++ b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/JmsConfiguration.java @@ -39,7 +39,7 @@ import org.springframework.jms.core.JmsOperations; import org.springframework.jms.core.JmsTemplate; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; @Configuration @EnableJms diff --git a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java index 6d5d207c9fa..84aa1265fed 100644 --- a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java +++ b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java @@ -48,9 +48,8 @@ import org.springframework.jms.core.JmsTemplate; import org.springframework.test.context.TestPropertySource; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; @BpmnJmsEventTest @TestPropertySource(properties = { diff --git a/modules/flowable-event-registry-json-converter/pom.xml b/modules/flowable-event-registry-json-converter/pom.xml index d499db70367..b8815595468 100644 --- a/modules/flowable-event-registry-json-converter/pom.xml +++ b/modules/flowable-event-registry-json-converter/pom.xml @@ -26,12 +26,8 @@ org.apache.commons commons-lang3 - - com.fasterxml.jackson.core - jackson-core - - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/ChannelJsonConverter.java b/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/ChannelJsonConverter.java index 125d909261d..e766a3474d1 100644 --- a/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/ChannelJsonConverter.java +++ b/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/ChannelJsonConverter.java @@ -33,8 +33,9 @@ import org.flowable.eventregistry.model.RabbitInboundChannelModel; import org.flowable.eventregistry.model.RabbitOutboundChannelModel; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Tijs Rademakers @@ -47,11 +48,7 @@ public class ChannelJsonConverter { protected Map> channelModelClasses = new HashMap<>(); public ChannelJsonConverter() { - ObjectMapper objectMapper = new ObjectMapper(); - this.objectMapperSupplier = () -> objectMapper; - addValidator(new OutboundChannelModelValidator()); - addValidator(new InboundChannelModelValidator()); - addDefaultChannelModelClasses(); + this(JsonMapper::shared); } public ChannelJsonConverter(Supplier objectMapperSupplier) { @@ -62,10 +59,7 @@ public ChannelJsonConverter(Supplier objectMapperSupplier) { } public ChannelJsonConverter(Collection validators) { - this.validators = new ArrayList<>(validators); - ObjectMapper objectMapper = new ObjectMapper(); - this.objectMapperSupplier = () -> objectMapper; - addDefaultChannelModelClasses(); + this(validators, JsonMapper::shared); } public ChannelJsonConverter(Collection validators, Supplier objectMapperSupplier) { diff --git a/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/EventJsonConverter.java b/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/EventJsonConverter.java index b0dc0bb4660..ce5236d5682 100644 --- a/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/EventJsonConverter.java +++ b/modules/flowable-event-registry-json-converter/src/main/java/org/flowable/eventregistry/json/converter/EventJsonConverter.java @@ -18,10 +18,11 @@ import org.flowable.eventregistry.model.EventModel; import org.flowable.eventregistry.model.EventPayload; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers @@ -32,8 +33,7 @@ public class EventJsonConverter { protected Supplier objectMapperSupplier; public EventJsonConverter() { - ObjectMapper objectMapper = new ObjectMapper(); - this.objectMapperSupplier = () -> objectMapper; + this(JsonMapper::shared); } public EventJsonConverter(Supplier objectMapperSupplier) { diff --git a/modules/flowable-event-registry-json-converter/src/test/java/org/flowable/eventregistry/converter/EventJsonConverterTest.java b/modules/flowable-event-registry-json-converter/src/test/java/org/flowable/eventregistry/converter/EventJsonConverterTest.java index e06c01dd449..2a000c1c9fd 100644 --- a/modules/flowable-event-registry-json-converter/src/test/java/org/flowable/eventregistry/converter/EventJsonConverterTest.java +++ b/modules/flowable-event-registry-json-converter/src/test/java/org/flowable/eventregistry/converter/EventJsonConverterTest.java @@ -26,8 +26,6 @@ import org.flowable.eventregistry.model.EventPayload; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; - /** * @author Tijs Rademakers */ diff --git a/modules/flowable-event-registry-model/pom.xml b/modules/flowable-event-registry-model/pom.xml index 8cb5de96f6d..55c007df0fd 100644 --- a/modules/flowable-event-registry-model/pom.xml +++ b/modules/flowable-event-registry-model/pom.xml @@ -23,10 +23,10 @@ com.fasterxml.jackson.core - jackson-core + jackson-annotations - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelEventTenantIdDetection.java b/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelEventTenantIdDetection.java index c2ec5776c6d..ee5dcf68237 100644 --- a/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelEventTenantIdDetection.java +++ b/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelEventTenantIdDetection.java @@ -14,6 +14,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; /** * @author Joram Barrez @@ -23,6 +24,7 @@ public class ChannelEventTenantIdDetection { protected String fixedValue; protected String jsonPointerExpression; + @JsonProperty("xPathExpression") protected String xPathExpression; protected String delegateExpression; diff --git a/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelModel.java b/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelModel.java index d286e102bc7..53bf6decb82 100644 --- a/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelModel.java +++ b/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/ChannelModel.java @@ -12,7 +12,7 @@ */ package org.flowable.eventregistry.model; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; public class ChannelModel { diff --git a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/EventRegistryRestResponseFactory.java b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/EventRegistryRestResponseFactory.java index 8a6a678d609..9446251e708 100644 --- a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/EventRegistryRestResponseFactory.java +++ b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/EventRegistryRestResponseFactory.java @@ -28,7 +28,7 @@ import org.flowable.eventregistry.rest.service.api.repository.EventDefinitionResponse; import org.flowable.eventregistry.rest.service.api.repository.EventDeploymentResponse; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Default implementation of a {@link EventRegistryRestResponseFactory}. diff --git a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResponse.java b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResponse.java index 6efef125c8e..c67e271bbd2 100644 --- a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResponse.java +++ b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/EventDeploymentResponse.java b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/EventDeploymentResponse.java index 58abf49fed7..87b65b2560b 100644 --- a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/EventDeploymentResponse.java +++ b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/repository/EventDeploymentResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; import org.flowable.eventregistry.api.EventDeployment; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCreateRequest.java b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCreateRequest.java index 387ba49df38..e6b3f76b902 100644 --- a/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCreateRequest.java +++ b/modules/flowable-event-registry-rest/src/main/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCreateRequest.java @@ -16,7 +16,8 @@ import org.apache.commons.lang3.StringUtils; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.databind.node.ObjectNode; + +import tools.jackson.databind.node.ObjectNode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/DispatcherServletConfiguration.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/DispatcherServletConfiguration.java index a8c24368bb8..2f696a562fe 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/DispatcherServletConfiguration.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/DispatcherServletConfiguration.java @@ -17,19 +17,19 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; @Configuration(proxyBeanMethods = false) @ComponentScan({ "org.flowable.eventregistry.rest.service.api" }) public class DispatcherServletConfiguration extends WebMvcConfigurationSupport { @Autowired - private ObjectMapper objectMapper; + private JsonMapper jsonMapper; @Bean public MultipartResolver multipartResolver() { @@ -38,7 +38,7 @@ public MultipartResolver multipartResolver() { @Override protected void configureMessageConverters(HttpMessageConverters.ServerBuilder builder) { - builder.withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)); + builder.withJsonConverter(new JacksonJsonHttpMessageConverter(jsonMapper)); } } diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/TestInboundEventChannelAdapter.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/TestInboundEventChannelAdapter.java index 2c34d4a1d22..d42edb8d3c8 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/TestInboundEventChannelAdapter.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/TestInboundEventChannelAdapter.java @@ -18,9 +18,8 @@ import org.flowable.eventregistry.api.InboundEventChannelAdapter; import org.flowable.eventregistry.model.InboundChannelModel; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class TestInboundEventChannelAdapter implements InboundEventChannelAdapter { @@ -67,11 +66,7 @@ public void triggerTestEvent(String customerId, String orderId) { } json.put("payload1", "Hello World"); json.put("payload2", new Random().nextInt()); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } } diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/JacksonConfiguration.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/JacksonConfiguration.java index 229461de56a..ef98780e821 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/JacksonConfiguration.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/JacksonConfiguration.java @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -24,10 +24,9 @@ public class JacksonConfiguration { @Bean() - public ObjectMapper objectMapper() { + public JsonMapper jsonMapper() { // To avoid instantiating and configuring the mapper everywhere - ObjectMapper mapper = new ObjectMapper(); - return mapper; + return JsonMapper.shared(); } } diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/RestConfiguration.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/RestConfiguration.java index 322f3180e84..9004abeca42 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/RestConfiguration.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/common/RestConfiguration.java @@ -19,7 +19,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/engine/EngineConfiguration.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/engine/EngineConfiguration.java index 6e7f418dcf7..69537718d47 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/engine/EngineConfiguration.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/conf/engine/EngineConfiguration.java @@ -41,9 +41,10 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; import com.zaxxer.hikari.HikariDataSource; +import tools.jackson.databind.ObjectMapper; + @Configuration(proxyBeanMethods = false) public class EngineConfiguration { diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/BaseSpringRestTestCase.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/BaseSpringRestTestCase.java index fc9c7134ba2..28351ffc36b 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/BaseSpringRestTestCase.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/BaseSpringRestTestCase.java @@ -70,9 +70,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; @SpringJUnitWebConfig(ApplicationConfiguration.class) @ExtendWith(FlowableEventSpringExtension.class) diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionCollectionResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionCollectionResourceTest.java index 270b27b30d7..b5280447379 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionCollectionResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionCollectionResourceTest.java @@ -23,7 +23,7 @@ import org.flowable.eventregistry.test.EventDeploymentAnnotation; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResourceTest.java index a6387fd8b04..e9403c24b96 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/ChannelDefinitionResourceTest.java @@ -27,7 +27,7 @@ import org.flowable.eventregistry.test.ChannelDeploymentAnnotation; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentCollectionResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentCollectionResourceTest.java index 2d287605340..1ff5f198020 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentCollectionResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.eventregistry.rest.service.api.EventRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceResourceTest.java index da53531ad71..240f026b212 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceResourceTest.java @@ -30,7 +30,7 @@ import org.flowable.eventregistry.rest.service.api.EventRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceTest.java index 7ba3429e369..4ca25224af5 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourceTest.java @@ -30,7 +30,7 @@ import org.flowable.eventregistry.test.EventDeploymentAnnotation; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourcesResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourcesResourceTest.java index 2ad1b339b04..086337d4eab 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourcesResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/DeploymentResourcesResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.eventregistry.rest.service.api.EventRestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/EventDefinitionResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/EventDefinitionResourceTest.java index fbeda30584c..659d3dc7052 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/EventDefinitionResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/repository/EventDefinitionResourceTest.java @@ -27,7 +27,7 @@ import org.flowable.eventregistry.test.EventDeploymentAnnotation; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCollectionResourceTest.java b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCollectionResourceTest.java index 47c3e236693..cc28d34d499 100644 --- a/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCollectionResourceTest.java +++ b/modules/flowable-event-registry-rest/src/test/java/org/flowable/eventregistry/rest/service/api/runtime/EventInstanceCollectionResourceTest.java @@ -31,7 +31,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class EventInstanceCollectionResourceTest extends BaseSpringRestTestCase { diff --git a/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/jms/JmsChannelModelProcessor.java b/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/jms/JmsChannelModelProcessor.java index 14c63c07614..e4c1f575f0e 100644 --- a/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/jms/JmsChannelModelProcessor.java +++ b/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/jms/JmsChannelModelProcessor.java @@ -48,7 +48,7 @@ import org.springframework.util.StringUtils; import org.springframework.util.StringValueResolver; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov diff --git a/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/kafka/KafkaChannelDefinitionProcessor.java b/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/kafka/KafkaChannelDefinitionProcessor.java index fa7dd38e5e3..fd6f7a42985 100644 --- a/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/kafka/KafkaChannelDefinitionProcessor.java +++ b/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/kafka/KafkaChannelDefinitionProcessor.java @@ -107,7 +107,7 @@ import org.springframework.util.backoff.BackOff; import org.springframework.util.backoff.FixedBackOff; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * A {@link ChannelModelProcessor} which is responsible for configuring Kafka Event registry integration. diff --git a/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/rabbit/RabbitChannelDefinitionProcessor.java b/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/rabbit/RabbitChannelDefinitionProcessor.java index 7a3904e8444..85d79557253 100644 --- a/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/rabbit/RabbitChannelDefinitionProcessor.java +++ b/modules/flowable-event-registry-spring/src/main/java/org/flowable/eventregistry/spring/rabbit/RabbitChannelDefinitionProcessor.java @@ -60,7 +60,7 @@ import org.springframework.util.StringUtils; import org.springframework.util.StringValueResolver; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov diff --git a/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/jms/EventRegistryJmsConfiguration.java b/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/jms/EventRegistryJmsConfiguration.java index f56139e8723..5901c90ffca 100644 --- a/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/jms/EventRegistryJmsConfiguration.java +++ b/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/jms/EventRegistryJmsConfiguration.java @@ -43,7 +43,8 @@ import org.springframework.jms.core.JmsOperations; import org.springframework.jms.core.JmsTemplate; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Filip Hrisafov @@ -73,7 +74,7 @@ public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(Connection @Bean public ObjectMapper objectMapper() { - return new ObjectMapper(); + return JsonMapper.shared(); } @Bean diff --git a/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/kafka/EventRegistryKafkaConfiguration.java b/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/kafka/EventRegistryKafkaConfiguration.java index c1b7df1cde1..6583c3abc91 100644 --- a/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/kafka/EventRegistryKafkaConfiguration.java +++ b/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/kafka/EventRegistryKafkaConfiguration.java @@ -45,7 +45,8 @@ import org.testcontainers.kafka.KafkaContainer; import org.testcontainers.utility.DockerImageName; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Filip Hrisafov @@ -67,7 +68,7 @@ public class EventRegistryKafkaConfiguration { @Bean public ObjectMapper objectMapper() { - return new ObjectMapper(); + return JsonMapper.shared(); } @Bean diff --git a/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/rabbit/EventRegistryRabbitConfiguration.java b/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/rabbit/EventRegistryRabbitConfiguration.java index 634243d3939..aed64baacc1 100644 --- a/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/rabbit/EventRegistryRabbitConfiguration.java +++ b/modules/flowable-event-registry-spring/src/test/java/org/flowable/eventregistry/spring/test/rabbit/EventRegistryRabbitConfiguration.java @@ -28,7 +28,8 @@ import org.springframework.context.annotation.Import; import org.testcontainers.containers.RabbitMQContainer; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Filip Hrisafov @@ -48,7 +49,7 @@ public SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory @Bean public ObjectMapper objectMapper() { - return new ObjectMapper(); + return JsonMapper.shared(); } @Bean diff --git a/modules/flowable-event-registry/pom.xml b/modules/flowable-event-registry/pom.xml index 9654872450c..7f883acfd7e 100644 --- a/modules/flowable-event-registry/pom.xml +++ b/modules/flowable-event-registry/pom.xml @@ -34,10 +34,6 @@ org.flowable flowable-eventsubscription-service-api - - com.fasterxml.jackson.core - jackson-databind - commons-io commons-io @@ -127,6 +123,7 @@ org.apache.xerces*;resolution:=optional, org.springframework*;resolution:=optional, com.fasterxml*;resolution:=optional, + tools.jackson*;resolution:=optional, jakarta.transaction;resolution:=optional, jakarta.enterprise.concurrent;resolution:=optional, diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonFieldBasedInboundEventKeyDetector.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonFieldBasedInboundEventKeyDetector.java index 246658c8ef5..70140b02191 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonFieldBasedInboundEventKeyDetector.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonFieldBasedInboundEventKeyDetector.java @@ -14,7 +14,7 @@ import org.flowable.eventregistry.api.InboundEventKeyDetector; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonPointerBasedInboundEventKeyDetector.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonPointerBasedInboundEventKeyDetector.java index 88e02e47bd2..327d7ea4047 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonPointerBasedInboundEventKeyDetector.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/keydetector/JsonPointerBasedInboundEventKeyDetector.java @@ -16,9 +16,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonPointer; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JsonPointer; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/model/InboundChannelDefinitionBuilderImpl.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/model/InboundChannelDefinitionBuilderImpl.java index 6007d31001a..1ed0532fbb0 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/model/InboundChannelDefinitionBuilderImpl.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/model/InboundChannelDefinitionBuilderImpl.java @@ -29,7 +29,7 @@ import org.flowable.eventregistry.model.RabbitInboundChannelModel; import org.w3c.dom.Document; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/payload/JsonFieldToMapPayloadExtractor.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/payload/JsonFieldToMapPayloadExtractor.java index 105172782ee..bd8b6c77156 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/payload/JsonFieldToMapPayloadExtractor.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/payload/JsonFieldToMapPayloadExtractor.java @@ -23,7 +23,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionInboundChannelModelProcessor.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionInboundChannelModelProcessor.java index ffdc0f3c760..4c4fd12bda5 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionInboundChannelModelProcessor.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionInboundChannelModelProcessor.java @@ -25,7 +25,7 @@ import org.flowable.eventregistry.model.ChannelModel; import org.flowable.eventregistry.model.DelegateExpressionInboundChannelModel; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionOutboundChannelModelProcessor.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionOutboundChannelModelProcessor.java index 200b67cf7ac..980250b0f6e 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionOutboundChannelModelProcessor.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/DelegateExpressionOutboundChannelModelProcessor.java @@ -25,7 +25,7 @@ import org.flowable.eventregistry.model.ChannelModel; import org.flowable.eventregistry.model.DelegateExpressionOutboundChannelModel; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/InboundChannelModelProcessor.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/InboundChannelModelProcessor.java index 72a927f54de..7223518b8fc 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/InboundChannelModelProcessor.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/InboundChannelModelProcessor.java @@ -51,8 +51,8 @@ import org.flowable.eventregistry.model.InboundChannelModel; import org.w3c.dom.Document; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/OutboundChannelModelProcessor.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/OutboundChannelModelProcessor.java index cd7f8c706d1..0cf94490450 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/OutboundChannelModelProcessor.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/pipeline/OutboundChannelModelProcessor.java @@ -28,7 +28,7 @@ import org.flowable.eventregistry.model.ChannelModel; import org.flowable.eventregistry.model.OutboundChannelModel; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java index 72b725545b5..f3e637ee20e 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java @@ -17,15 +17,16 @@ import org.flowable.common.engine.api.FlowableException; import org.flowable.common.engine.api.FlowableIllegalArgumentException; +import org.flowable.common.engine.impl.util.JsonUtil; import org.flowable.eventregistry.api.OutboundEventSerializer; import org.flowable.eventregistry.api.model.EventPayloadTypes; import org.flowable.eventregistry.api.runtime.EventInstance; import org.flowable.eventregistry.api.runtime.EventPayloadInstance; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Simple {@link EventInstance} serialization that maps all {@link org.flowable.eventregistry.api.runtime.EventPayloadInstance}'s @@ -114,7 +115,7 @@ public String serialize(EventInstance eventInstance) { JsonNode jsonNode; try { jsonNode = objectMapper.readTree((String) jsonValue); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new FlowableIllegalArgumentException("Could not read json event payload", e); } objectNode.set(payloadInstance.getDefinitionName(), jsonNode); @@ -133,7 +134,7 @@ public String serialize(EventInstance eventInstance) { try { return objectMapper.writeValueAsString(objectNode); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new FlowableException("Could not serialize event to json string for " + eventInstance, e); } } diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/StringToJsonDeserializer.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/StringToJsonDeserializer.java index f11c8ba1945..d941aef17d0 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/StringToJsonDeserializer.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/StringToJsonDeserializer.java @@ -12,13 +12,12 @@ */ package org.flowable.eventregistry.impl.serialization; -import java.io.IOException; - import org.flowable.common.engine.api.FlowableException; import org.flowable.eventregistry.api.InboundEventDeserializer; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez @@ -36,7 +35,7 @@ public StringToJsonDeserializer(ObjectMapper objectMapper) { public JsonNode deserialize(Object rawEvent) { try { return objectMapper.readTree(rawEvent.toString()); - } catch (IOException e) { + } catch (JacksonException e) { throw new FlowableException("Could not deserialize event to json", e); } } diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/tenantdetector/JsonPointerBasedInboundEventTenantDetector.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/tenantdetector/JsonPointerBasedInboundEventTenantDetector.java index 71b3aa74926..6d63d907aba 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/tenantdetector/JsonPointerBasedInboundEventTenantDetector.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/tenantdetector/JsonPointerBasedInboundEventTenantDetector.java @@ -16,8 +16,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonPointer; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.core.JsonPointer; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/DefaultEventRegistryTest.java b/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/DefaultEventRegistryTest.java index 393bec352a3..ed6a8024f2e 100644 --- a/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/DefaultEventRegistryTest.java +++ b/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/DefaultEventRegistryTest.java @@ -16,8 +16,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; -import java.io.IOException; -import java.io.UncheckedIOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -49,9 +47,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; @@ -353,11 +350,7 @@ protected TestInboundEventChannelAdapter setupTestChannelWithCustomDeserializer( @Override public Customer deserialize(Object rawEvent) { - try { - return eventEngineConfiguration.getObjectMapper().readValue(rawEvent.toString(), Customer.class); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + return eventEngineConfiguration.getObjectMapper().readValue(rawEvent.toString(), Customer.class); } }); @@ -444,11 +437,7 @@ public void triggerTestEvent() { json.put("customerId", "test"); json.put("payload1", "Hello World"); json.put("payload2", 123); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } } diff --git a/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/deployment/DeploymentTest.java b/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/deployment/DeploymentTest.java index cf567ec70d3..c914c087774 100644 --- a/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/deployment/DeploymentTest.java +++ b/modules/flowable-event-registry/src/test/java/org/flowable/eventregistry/test/deployment/DeploymentTest.java @@ -44,7 +44,7 @@ import org.flowable.eventregistry.test.EventDeploymentAnnotation; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public class DeploymentTest extends AbstractFlowableEventTest { diff --git a/modules/flowable-eventsubscription-service/src/main/java/org/flowable/eventsubscription/service/EventSubscriptionServiceConfiguration.java b/modules/flowable-eventsubscription-service/src/main/java/org/flowable/eventsubscription/service/EventSubscriptionServiceConfiguration.java index 847e2ece0bd..446dbb52082 100755 --- a/modules/flowable-eventsubscription-service/src/main/java/org/flowable/eventsubscription/service/EventSubscriptionServiceConfiguration.java +++ b/modules/flowable-eventsubscription-service/src/main/java/org/flowable/eventsubscription/service/EventSubscriptionServiceConfiguration.java @@ -22,7 +22,7 @@ import org.flowable.eventsubscription.service.impl.persistence.entity.data.EventSubscriptionDataManager; import org.flowable.eventsubscription.service.impl.persistence.entity.data.impl.MybatisEventSubscriptionDataManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tijs Rademakers diff --git a/modules/flowable-external-job-rest/pom.xml b/modules/flowable-external-job-rest/pom.xml index 1c9990da29c..ae4d95e7bb1 100644 --- a/modules/flowable-external-job-rest/pom.xml +++ b/modules/flowable-external-job-rest/pom.xml @@ -77,12 +77,6 @@ ${spring.boot.version} test - - org.springframework.boot - spring-boot-jackson2 - ${spring.boot.version} - test - org.flowable @@ -101,10 +95,6 @@ h2 test - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - diff --git a/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/ExternalJobRestResponseFactory.java b/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/ExternalJobRestResponseFactory.java index ca6d3618e85..61eb3e35015 100644 --- a/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/ExternalJobRestResponseFactory.java +++ b/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/ExternalJobRestResponseFactory.java @@ -40,7 +40,7 @@ import org.flowable.job.api.AcquiredExternalWorkerJob; import org.flowable.job.api.ExternalWorkerJob; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov diff --git a/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/query/ExternalWorkerJobResponse.java b/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/query/ExternalWorkerJobResponse.java index 16635dd4579..a3ae5b46fb3 100644 --- a/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/query/ExternalWorkerJobResponse.java +++ b/modules/flowable-external-job-rest/src/main/java/org/flowable/external/job/rest/service/api/query/ExternalWorkerJobResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/conf/CmmnEngineTestConfiguration.java b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/conf/CmmnEngineTestConfiguration.java index cbd0b560e95..4ece931002b 100644 --- a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/conf/CmmnEngineTestConfiguration.java +++ b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/conf/CmmnEngineTestConfiguration.java @@ -12,8 +12,6 @@ */ package org.flowable.external.job.rest.conf; -import java.util.stream.StreamSupport; - import javax.sql.DataSource; import org.flowable.cmmn.api.CmmnHistoryService; @@ -26,15 +24,10 @@ import org.flowable.cmmn.spring.SpringCmmnEngineConfiguration; import org.flowable.common.engine.impl.history.HistoryLevel; import org.flowable.engine.ProcessEngineConfiguration; -import org.springframework.boot.restclient.RestTemplateCustomizer; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; -import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; - /** * @author Filip Hrisafov */ @@ -79,15 +72,5 @@ public CmmnManagementService cmmnManagementService(CmmnEngine cmmnEngine) { return cmmnEngine.getCmmnManagementService(); } - @Bean - public RestTemplateCustomizer jackson2RestTemplate(ObjectMapper objectMapper) { - return restTemplate -> { - HttpMessageConverters httpMessageConverters = HttpMessageConverters.forClient().registerDefaults() - .withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)) - .build(); - restTemplate.setMessageConverters(StreamSupport.stream(httpMessageConverters.spliterator(), false) - .toList()); - }; - } } diff --git a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/DispatcherServletConfiguration.java b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/DispatcherServletConfiguration.java index 3e0c60d7531..a2b6242b353 100644 --- a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/DispatcherServletConfiguration.java +++ b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/DispatcherServletConfiguration.java @@ -20,12 +20,13 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; @Configuration(proxyBeanMethods = false) @ComponentScan(basePackages = { @@ -35,7 +36,7 @@ public class DispatcherServletConfiguration extends WebMvcConfigurationSupport { @Autowired - private ObjectMapper objectMapper; + private JsonMapper jsonMapper; @Bean public ExternalJobRestResponseFactory externalJobRestResponseFactory(ObjectMapper objectMapper) { @@ -49,7 +50,7 @@ public MultipartResolver multipartResolver() { @Override protected void configureMessageConverters(HttpMessageConverters.ServerBuilder builder) { - builder.withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)); + builder.withJsonConverter(new JacksonJsonHttpMessageConverter(jsonMapper)); } } diff --git a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerAcquireJobResourceTest.java b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerAcquireJobResourceTest.java index d4385474e49..b025bc7315d 100644 --- a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerAcquireJobResourceTest.java +++ b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerAcquireJobResourceTest.java @@ -47,10 +47,10 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerUnacquireJobResourceTest.java b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerUnacquireJobResourceTest.java index 1908a5f3734..b0c8e4513e6 100644 --- a/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerUnacquireJobResourceTest.java +++ b/modules/flowable-external-job-rest/src/test/java/org/flowable/external/job/rest/service/api/acquire/ExternalWorkerUnacquireJobResourceTest.java @@ -34,8 +34,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; @ExternalJobRestSpringBootTest class ExternalWorkerUnacquireJobResourceTest { diff --git a/modules/flowable-form-api/pom.xml b/modules/flowable-form-api/pom.xml index 353232fbdf9..713865b7216 100644 --- a/modules/flowable-form-api/pom.xml +++ b/modules/flowable-form-api/pom.xml @@ -27,11 +27,7 @@ com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-databind + jackson-annotations diff --git a/modules/flowable-form-model/pom.xml b/modules/flowable-form-model/pom.xml index 08ff7a41e77..5924b8c403a 100644 --- a/modules/flowable-form-model/pom.xml +++ b/modules/flowable-form-model/pom.xml @@ -25,14 +25,6 @@ org.flowable flowable-form-api - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-databind - \ No newline at end of file diff --git a/modules/flowable-http-common/pom.xml b/modules/flowable-http-common/pom.xml index 2e3364f88c6..282d7226369 100644 --- a/modules/flowable-http-common/pom.xml +++ b/modules/flowable-http-common/pom.xml @@ -57,7 +57,7 @@ flowable-engine-common-api - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/modules/flowable-http-common/src/main/java/org/flowable/http/common/impl/BaseHttpActivityDelegate.java b/modules/flowable-http-common/src/main/java/org/flowable/http/common/impl/BaseHttpActivityDelegate.java index 6263fa1be3a..12dad239970 100644 --- a/modules/flowable-http-common/src/main/java/org/flowable/http/common/impl/BaseHttpActivityDelegate.java +++ b/modules/flowable-http-common/src/main/java/org/flowable/http/common/impl/BaseHttpActivityDelegate.java @@ -12,7 +12,6 @@ */ package org.flowable.http.common.impl; -import java.io.IOException; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -29,8 +28,8 @@ import org.flowable.http.common.api.client.ExecutableHttpRequest; import org.flowable.http.common.api.client.FlowableHttpClient; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.MissingNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.MissingNode; /** * @author Filip Hrisafov @@ -146,8 +145,7 @@ protected RequestData createRequest(VariableContainer variableContainer, String return requestData; } - protected void saveResponseFields(VariableContainer variableContainer, RequestData request, HttpResponse response, ObjectMapper objectMapper) - throws IOException { + protected void saveResponseFields(VariableContainer variableContainer, RequestData request, HttpResponse response, ObjectMapper objectMapper) { // Save response fields if (response != null) { // Save response body only by default diff --git a/modules/flowable-http/pom.xml b/modules/flowable-http/pom.xml index 9b401e6fdfe..8a1fa2619ef 100644 --- a/modules/flowable-http/pom.xml +++ b/modules/flowable-http/pom.xml @@ -75,14 +75,6 @@ org.flowable flowable-cmmn-engine test - - - com.fasterxml.jackson.core - jackson-core - - - com.fasterxml.jackson.core - jackson-databind org.eclipse.jetty diff --git a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTest.java b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTest.java index 571ee14180e..1cb3d7cb5f6 100644 --- a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTest.java +++ b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTest.java @@ -49,8 +49,8 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTestServer.java b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTestServer.java index e47410c7e6c..ded65d7e88d 100644 --- a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTestServer.java +++ b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTestServer.java @@ -40,9 +40,10 @@ import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; import jakarta.servlet.MultipartConfigElement; import jakarta.servlet.ServletException; @@ -98,7 +99,7 @@ public class HttpServiceTaskTestServer { ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); contextHandler.setContextPath("/"); MultipartConfigElement multipartConfig = new MultipartConfigElement((String) null); - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = JsonMapper.shared(); ServletHolder httpServiceTaskServletHolder = new ServletHolder(new HttpServiceTaskTestServlet(mapper)); httpServiceTaskServletHolder.getRegistration().setMultipartConfig(multipartConfig); contextHandler.addServlet(httpServiceTaskServletHolder, "/api/*"); diff --git a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/ParametrizedHttpResponseHandler.java b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/ParametrizedHttpResponseHandler.java index 118fee13d4f..4800e647ddd 100644 --- a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/ParametrizedHttpResponseHandler.java +++ b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/ParametrizedHttpResponseHandler.java @@ -22,14 +22,15 @@ import org.flowable.http.common.api.HttpResponse; import org.flowable.http.common.api.delegate.HttpResponseHandler; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; public class ParametrizedHttpResponseHandler implements HttpResponseHandler { protected Expression variableName; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @Override public void handleHttpResponse(VariableContainer execution, HttpResponse httpResponse) { diff --git a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/SimpleHttpResponseHandler.java b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/SimpleHttpResponseHandler.java index c82ecefe202..ce01c03c4bb 100644 --- a/modules/flowable-http/src/test/java/org/flowable/http/bpmn/SimpleHttpResponseHandler.java +++ b/modules/flowable-http/src/test/java/org/flowable/http/bpmn/SimpleHttpResponseHandler.java @@ -16,12 +16,13 @@ import org.flowable.http.common.api.HttpResponse; import org.flowable.http.common.api.delegate.HttpResponseHandler; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; public class SimpleHttpResponseHandler implements HttpResponseHandler { - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @Override public void handleHttpResponse(VariableContainer execution, HttpResponse httpResponse) { diff --git a/modules/flowable-identitylink-service/src/main/java/org/flowable/identitylink/service/IdentityLinkServiceConfiguration.java b/modules/flowable-identitylink-service/src/main/java/org/flowable/identitylink/service/IdentityLinkServiceConfiguration.java index 8f67a6b7692..3f592a5ea13 100755 --- a/modules/flowable-identitylink-service/src/main/java/org/flowable/identitylink/service/IdentityLinkServiceConfiguration.java +++ b/modules/flowable-identitylink-service/src/main/java/org/flowable/identitylink/service/IdentityLinkServiceConfiguration.java @@ -24,7 +24,7 @@ import org.flowable.identitylink.service.impl.persistence.entity.data.impl.MybatisHistoricIdentityLinkDataManager; import org.flowable.identitylink.service.impl.persistence.entity.data.impl.MybatisIdentityLinkDataManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tijs Rademakers diff --git a/modules/flowable-job-service/src/main/java/org/flowable/job/service/JobServiceConfiguration.java b/modules/flowable-job-service/src/main/java/org/flowable/job/service/JobServiceConfiguration.java index de1057df2db..81df0fe9187 100755 --- a/modules/flowable-job-service/src/main/java/org/flowable/job/service/JobServiceConfiguration.java +++ b/modules/flowable-job-service/src/main/java/org/flowable/job/service/JobServiceConfiguration.java @@ -57,7 +57,7 @@ import org.flowable.job.service.impl.persistence.entity.data.impl.MybatisSuspendedJobDataManager; import org.flowable.job.service.impl.persistence.entity.data.impl.MybatisTimerJobDataManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * This service configuration contains all settings and instances around job execution and management. Note that a {@link JobServiceConfiguration} is diff --git a/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/asyncexecutor/DefaultJobManager.java b/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/asyncexecutor/DefaultJobManager.java index f1ba4cea853..c5a8249ab64 100644 --- a/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/asyncexecutor/DefaultJobManager.java +++ b/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/asyncexecutor/DefaultJobManager.java @@ -59,7 +59,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; public class DefaultJobManager implements JobManager { diff --git a/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/history/async/util/AsyncHistoryJsonUtil.java b/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/history/async/util/AsyncHistoryJsonUtil.java index 756c5344db4..8721fb12d12 100644 --- a/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/history/async/util/AsyncHistoryJsonUtil.java +++ b/modules/flowable-job-service/src/main/java/org/flowable/job/service/impl/history/async/util/AsyncHistoryJsonUtil.java @@ -22,8 +22,8 @@ import org.flowable.job.service.impl.history.async.AsyncHistoryDateUtil; import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-mail/pom.xml b/modules/flowable-mail/pom.xml index b8dbce4255f..ff876984ec2 100644 --- a/modules/flowable-mail/pom.xml +++ b/modules/flowable-mail/pom.xml @@ -53,7 +53,7 @@ flowable-content-api - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/modules/flowable-mail/src/main/java/org/flowable/mail/common/impl/BaseMailActivityDelegate.java b/modules/flowable-mail/src/main/java/org/flowable/mail/common/impl/BaseMailActivityDelegate.java index 7e85092f85b..782461a552a 100644 --- a/modules/flowable-mail/src/main/java/org/flowable/mail/common/impl/BaseMailActivityDelegate.java +++ b/modules/flowable-mail/src/main/java/org/flowable/mail/common/impl/BaseMailActivityDelegate.java @@ -40,8 +40,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; /** * @param The type of the variable container diff --git a/modules/flowable-osgi/src/test/java/org/flowable/osgi/blueprint/BlueprintBasicTest.java b/modules/flowable-osgi/src/test/java/org/flowable/osgi/blueprint/BlueprintBasicTest.java index f6024c83016..cb2fb4243e3 100755 --- a/modules/flowable-osgi/src/test/java/org/flowable/osgi/blueprint/BlueprintBasicTest.java +++ b/modules/flowable-osgi/src/test/java/org/flowable/osgi/blueprint/BlueprintBasicTest.java @@ -120,8 +120,8 @@ public Option[] createConfiguration() { mavenBundle().groupId("org.apache.commons").artifactId("commons-lang3").versionAsInProject(), mavenBundle().groupId("commons-io").artifactId("commons-io").versionAsInProject(), mavenBundle().groupId("com.fasterxml.uuid").artifactId("java-uuid-generator").versionAsInProject(), - mavenBundle().groupId("com.fasterxml.jackson.core").artifactId("jackson-core").versionAsInProject(), - mavenBundle().groupId("com.fasterxml.jackson.core").artifactId("jackson-databind").versionAsInProject(), + mavenBundle().groupId("tools.jackson.core").artifactId("jackson-core").versionAsInProject(), + mavenBundle().groupId("tools.jackson.core").artifactId("jackson-databind").versionAsInProject(), mavenBundle().groupId("com.fasterxml.jackson.core").artifactId("jackson-annotations").versionAsInProject(), mavenBundle().groupId("jakarta.activation").artifactId("jakarta.activation-api").versionAsInProject(), mavenBundle().groupId("jakarta.mail").artifactId("jakarta.mail-api").versionAsInProject(), diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java index e2c1b140195..5b10cf2a099 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/RestResponseFactory.java @@ -115,7 +115,7 @@ import org.flowable.variable.api.history.HistoricVariableInstance; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Default implementation of a {@link RestResponseFactory}. diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/AttachmentResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/AttachmentResponse.java index 67a0f9d2a98..bb015f893df 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/AttachmentResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/AttachmentResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/CommentResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/CommentResponse.java index c3f2808a6b9..e260150bc86 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/CommentResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/CommentResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Frederik Heremans diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/EventResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/EventResponse.java index 1f997e4b3e5..1b78f84f225 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/EventResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/engine/EventResponse.java @@ -19,7 +19,8 @@ import org.flowable.common.rest.util.DateToStringSerializer; import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Frederik Heremans diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricActivityInstanceResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricActivityInstanceResponse.java index 399d9302723..a7d691af6e9 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricActivityInstanceResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricActivityInstanceResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricDetailResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricDetailResponse.java index 232dafe59cd..b68c634e6cd 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricDetailResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricDetailResponse.java @@ -18,7 +18,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; import org.flowable.rest.service.api.engine.variable.RestVariable; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResponse.java index c07b5c63576..c758f67023c 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; import org.flowable.rest.service.api.engine.variable.RestVariable; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResponse.java index d24666884dc..35d932d9ff1 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; import org.flowable.rest.service.api.engine.variable.RestVariable; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Tijs Rademakers diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskLogEntryResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskLogEntryResponse.java index a8d6d0868c2..b49cb98f621 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskLogEntryResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/history/HistoricTaskLogEntryResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Luis Belloch diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchPartResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchPartResponse.java index be048c45024..94227f46d98 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchPartResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchPartResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchResponse.java index 5feeb61a1bc..baafecc7f0b 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/BatchResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobResponse.java index b344bca4bb2..c4de9d6bbf5 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/HistoryJobResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java index c8ef45827df..68a25cc9667 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/management/JobResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/DeploymentResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/DeploymentResponse.java index ad40661032b..fc4309b7be5 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/DeploymentResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/DeploymentResponse.java @@ -5,7 +5,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; import org.flowable.engine.repository.Deployment; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/ModelResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/ModelResponse.java index 0a472d1bc85..e23e9b577b9 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/ModelResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/ModelResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ActivityInstanceResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ActivityInstanceResponse.java index d04eed0b7b1..e05d8a3a549 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ActivityInstanceResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ActivityInstanceResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/BaseVariableCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/BaseVariableCollectionResource.java index c857bb83084..1407ae9bbb2 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/BaseVariableCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/BaseVariableCollectionResource.java @@ -28,7 +28,7 @@ import org.springframework.http.HttpStatus; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/EventSubscriptionResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/EventSubscriptionResponse.java index f2c73552df3..36f1904ebc3 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/EventSubscriptionResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/EventSubscriptionResponse.java @@ -17,7 +17,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; /** * @author Tijs Rademakers diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionVariableResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionVariableResource.java index 14029a25a8c..f733473888b 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionVariableResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ExecutionVariableResource.java @@ -34,7 +34,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceResponse.java index 112a354b630..995c981c103 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceResponse.java @@ -20,7 +20,7 @@ import org.flowable.common.rest.util.DateToStringSerializer; import org.flowable.rest.service.api.engine.variable.RestVariable; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceVariableResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceVariableResource.java index 35b65d7cb3a..30b6243bfc6 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceVariableResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/process/ProcessInstanceVariableResource.java @@ -34,7 +34,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskAttachmentCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskAttachmentCollectionResource.java index 0fdebc1c826..67506a34a41 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskAttachmentCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskAttachmentCollectionResource.java @@ -36,7 +36,7 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskResponse.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskResponse.java index 06cb9d40773..d613be7bd59 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskResponse.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskResponse.java @@ -22,7 +22,7 @@ import org.flowable.task.api.DelegationState; import org.flowable.task.api.Task; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.annotation.JsonSerialize; import io.swagger.annotations.ApiModelProperty; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableCollectionResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableCollectionResource.java index 9d1a393fe28..7a4efb4992c 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableCollectionResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableCollectionResource.java @@ -38,7 +38,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableResource.java b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableResource.java index c52f4a08855..7bc54e2e48d 100644 --- a/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableResource.java +++ b/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/runtime/task/TaskVariableResource.java @@ -35,7 +35,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/DispatcherServletConfiguration.java b/modules/flowable-rest/src/test/java/org/flowable/rest/DispatcherServletConfiguration.java index 7974677d76f..c6c9490f8e2 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/DispatcherServletConfiguration.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/DispatcherServletConfiguration.java @@ -12,33 +12,21 @@ */ package org.flowable.rest; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import com.fasterxml.jackson.databind.ObjectMapper; - @Configuration(proxyBeanMethods = false) @ComponentScan({ "org.flowable.rest.exception", "org.flowable.rest.service.api" }) public class DispatcherServletConfiguration extends WebMvcConfigurationSupport { - @Autowired - private ObjectMapper objectMapper; - @Bean public MultipartResolver multipartResolver() { return new StandardServletMultipartResolver(); } - @Override - protected void configureMessageConverters(HttpMessageConverters.ServerBuilder builder) { - builder.withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)); - } } diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/api/engine/variable/QueryVariableTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/api/engine/variable/QueryVariableTest.java index 14141085534..480152cc414 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/api/engine/variable/QueryVariableTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/api/engine/variable/QueryVariableTest.java @@ -19,7 +19,7 @@ import org.flowable.rest.service.api.engine.variable.QueryVariable; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; public class QueryVariableTest extends BaseSpringRestTestCase { diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/api/history/HistoricDetailCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/api/history/HistoricDetailCollectionResourceTest.java index d27f0cf0cbf..dc35e10152f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/api/history/HistoricDetailCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/api/history/HistoricDetailCollectionResourceTest.java @@ -30,8 +30,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * Test for REST-operation related to the historic detail query resource. @@ -92,7 +91,7 @@ public void testQueryDetail() throws Exception { assertThat(byteVarFound).isTrue(); } - protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String variableName, Object variableValue) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String variableName, Object variableValue) throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/api/jpa/JpaRestTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/api/jpa/JpaRestTest.java index d7d72019e7c..266ffa64c07 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/api/jpa/JpaRestTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/api/jpa/JpaRestTest.java @@ -30,7 +30,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/api/runtime/TaskSubTaskCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/api/runtime/TaskSubTaskCollectionResourceTest.java index 8e449d3cf31..4b5544640bf 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/api/runtime/TaskSubTaskCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/api/runtime/TaskSubTaskCollectionResourceTest.java @@ -24,7 +24,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/MockFormHandlerRestApiInterceptor.java b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/MockFormHandlerRestApiInterceptor.java index 6ec9b34a627..40540e34c3f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/MockFormHandlerRestApiInterceptor.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/MockFormHandlerRestApiInterceptor.java @@ -18,8 +18,8 @@ import org.flowable.task.api.Task; import org.flowable.task.api.history.HistoricTaskInstance; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Filip Hrisafov diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/JacksonConfiguration.java b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/JacksonConfiguration.java index b5e16b08605..32617a51ceb 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/JacksonConfiguration.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/JacksonConfiguration.java @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -24,10 +24,9 @@ public class JacksonConfiguration { @Bean() - public ObjectMapper objectMapper() { + public JsonMapper jsonMapper() { // To avoid instantiating and configuring the mapper everywhere - ObjectMapper mapper = new ObjectMapper(); - return mapper; + return JsonMapper.shared(); } } diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/RestConfiguration.java b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/RestConfiguration.java index a2d95d3d6d0..227644036f1 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/RestConfiguration.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/common/RestConfiguration.java @@ -19,7 +19,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/engine/EngineConfiguration.java b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/engine/EngineConfiguration.java index d12e6a69929..1000be0ee1a 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/conf/engine/EngineConfiguration.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/conf/engine/EngineConfiguration.java @@ -41,9 +41,10 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; import com.zaxxer.hikari.HikariDataSource; +import tools.jackson.databind.ObjectMapper; + @Configuration(proxyBeanMethods = false) public class EngineConfiguration { diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/BaseSpringRestTestCase.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/BaseSpringRestTestCase.java index 2711e142821..292672d5e02 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/BaseSpringRestTestCase.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/BaseSpringRestTestCase.java @@ -20,9 +20,7 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.Instant; -import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; -import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; @@ -76,10 +74,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; @SpringJUnitWebConfig(ApplicationConfiguration.class) @ExtendWith(InternalFlowableSpringExtension.class) @@ -94,7 +92,7 @@ public class BaseSpringRestTestCase { protected String SERVER_URL_PREFIX = ""; protected RestUrlBuilder URL_BUILDER; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); protected String deploymentId; protected Throwable exception; @@ -360,7 +358,7 @@ public void run() { /** * Checks if the returned "data" array (child-node of root-json node returned by invoking a GET on the given url) contains entries with the given ID's. */ - protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = expectedResourceIds.length; // Do the actual call @@ -398,7 +396,7 @@ protected void assertResultsExactlyPresentInDataResponse(String url, String... e } - protected void assertEmptyResultsPresentInDataResponse(String url) throws JsonProcessingException, IOException { + protected void assertEmptyResultsPresentInDataResponse(String url) throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); @@ -411,11 +409,11 @@ protected void assertEmptyResultsPresentInDataResponse(String url) throws JsonPr /** * Checks if the returned "data" array (child-node of root-json node returned by invoking a POST on the given url) contains entries with the given ID's. */ - protected void assertResultsPresentInPostDataResponse(String url, ObjectNode body, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInPostDataResponse(String url, ObjectNode body, String... expectedResourceIds) throws IOException { assertResultsPresentInPostDataResponseWithStatusCheck(url, body, HttpStatus.SC_OK, expectedResourceIds); } - protected void assertResultsPresentInPostDataResponseWithStatusCheck(String url, ObjectNode body, int expectedStatusCode, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInPostDataResponseWithStatusCheck(String url, ObjectNode body, int expectedStatusCode, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = 0; if (expectedResourceIds != null) { numberOfResultsExpected = expectedResourceIds.length; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/form/FormDataResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/form/FormDataResourceTest.java index f426e90a520..1c65316b806 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/form/FormDataResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/form/FormDataResourceTest.java @@ -33,9 +33,9 @@ import org.flowable.variable.api.history.HistoricVariableInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceCollectionResourceTest.java index d8ce7a1a20e..243b827c17e 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceCollectionResourceTest.java @@ -36,8 +36,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * Test for REST-operation related to the historic activity instance query resource. @@ -128,7 +127,7 @@ public void testQueryByCalledProcessInstanceIds() throws IOException { } protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String... expectedActivityIds) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); JsonNode dataNode = objectMapper.readTree(response.getEntity().getContent()).get("data"); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceQueryResourceTest.java index d3989fb01ea..c0e4a8ab112 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricActivityInstanceQueryResourceTest.java @@ -33,9 +33,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the historic activity instance query resource. @@ -139,7 +138,7 @@ public void testQueryActivityInstances() throws Exception { assertResultsPresentInDataResponse(url, requestNode, 0); } - protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String... expectedActivityIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String... expectedActivityIds) throws IOException { // Do the actual call HttpPost post = new HttpPost(SERVER_URL_PREFIX + url); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricDetailQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricDetailQueryResourceTest.java index b1dac09a002..6c2b6a10f02 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricDetailQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricDetailQueryResourceTest.java @@ -32,9 +32,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the historic detail query resource. @@ -117,7 +116,7 @@ public void testQueryDetail() throws Exception { assertThat(byteVarFound).isTrue(); } - protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) throws IOException { // Do the actual call HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + url); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCollectionResourceTest.java index 58eb26e654a..bac8a15b22b 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCollectionResourceTest.java @@ -40,9 +40,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; @@ -306,7 +305,7 @@ public void testGetProcessInstancesByCallbackId() throws Exception { } @Override - protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, String... expectedResourceIds) throws IOException { int numberOfResultsExpected = expectedResourceIds.length; // Do the actual call diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCommentResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCommentResourceTest.java index 72c9f18f562..d35651d3d87 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCommentResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceCommentResourceTest.java @@ -31,8 +31,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceIdentityLinkCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceIdentityLinkCollectionResourceTest.java index aa54b185885..3e790b84d26 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceIdentityLinkCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceIdentityLinkCollectionResourceTest.java @@ -27,7 +27,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceQueryResourceTest.java index e6b788ea304..d4b8df4aeb3 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceQueryResourceTest.java @@ -31,9 +31,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResourceTest.java index fb019859496..d32c5dab5ad 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricProcessInstanceResourceTest.java @@ -27,7 +27,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java index 54e1056acdf..8d9cdc26d92 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java @@ -38,10 +38,10 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.util.ISO8601DateFormat; +import tools.jackson.databind.JsonNode; + import net.javacrumbs.jsonunit.core.Option; /** @@ -265,8 +265,7 @@ public void testQueryByParentScopeId() throws IOException { } - - protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String... expectedTaskIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String... expectedTaskIds) throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java index 37b92a06580..ca1a040608f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceIdentityLinkCollectionResourceTest.java @@ -27,7 +27,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java index f7cce60bf65..7f44d661a32 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceQueryResourceTest.java @@ -35,11 +35,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.databind.util.ISO8601DateFormat; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the historic task instance query resource. @@ -285,7 +283,7 @@ public void testQueryTaskInstancesWithCandidateGroup() throws Exception { assertResultsPresentInPostDataResponse(url, requestNode, task.getId()); } - protected void assertResultsPresentInPostDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String... expectedTaskIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInPostDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String... expectedTaskIds) throws IOException { // Do the actual call HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + url); httpPost.setEntity(new StringEntity(body.toString())); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResourceTest.java index 9c21489befe..8f6be0d443e 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceResourceTest.java @@ -46,7 +46,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskLogCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskLogCollectionResourceTest.java index 025843e94be..c86736e8b7f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskLogCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskLogCollectionResourceTest.java @@ -32,7 +32,7 @@ import org.junit.jupiter.api.Test; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Luis Belloch @@ -132,9 +132,9 @@ protected JsonNode queryTaskLogEntries(String queryString) throws IOException { protected void expectSequence(JsonNode list, List ids, List types) { assertThat(list).hasSameSizeAs(ids); - List resultingIds = list.findValuesAsText("taskId"); + List resultingIds = list.findValuesAsString("taskId"); assertThat(resultingIds).isEqualTo(ids); - List resultingTypes = list.findValuesAsText("type"); + List resultingTypes = list.findValuesAsString("type"); assertThat(resultingTypes).isEqualTo(types); } } diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java index f5c7d314fb8..3d728ef9c93 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceCollectionResourceTest.java @@ -33,8 +33,7 @@ import org.flowable.variable.api.persistence.entity.VariableInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; @@ -246,7 +245,7 @@ public void testVariableInstanceScopeIsPresent() throws Exception { } - protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String variableName, Object variableValue) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String variableName, Object variableValue) throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java index 2c1ee1cae8c..efb255991e9 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricVariableInstanceQueryResourceTest.java @@ -30,10 +30,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the historic variable instance query resource. @@ -130,7 +129,7 @@ public void testQueryVariableInstances() throws Exception { assertErrorResult(url, requestNode, HttpStatus.SC_BAD_REQUEST); } - protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) throws IOException { // Do the actual call HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + url); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupCollectionResourceTest.java index f14209f3514..bcbf7779164 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupCollectionResourceTest.java @@ -29,8 +29,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupMembershipResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupMembershipResourceTest.java index 449d76c962b..4df0123187f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupMembershipResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupMembershipResourceTest.java @@ -27,8 +27,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupResourceTest.java index c6d57a8bd61..ad2926fc00b 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/GroupResourceTest.java @@ -27,8 +27,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserCollectionResourceTest.java index 5ec63d04c2e..9bb30da8cec 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserCollectionResourceTest.java @@ -29,8 +29,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserInfoResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserInfoResourceTest.java index 6e852c4764a..798e00893e6 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserInfoResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserInfoResourceTest.java @@ -28,8 +28,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Frederik Heremans diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserResourceTest.java index ff1dbb2e964..ab6290382a2 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/identity/UserResourceTest.java @@ -27,8 +27,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchCollectionResourceTest.java index af27a69f9d5..ce98b53f00a 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchCollectionResourceTest.java @@ -19,7 +19,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to the Batch collection and a single batch resource. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchPartCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchPartCollectionResourceTest.java index 77487f39cb8..1a4862bb6f8 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchPartCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/BatchPartCollectionResourceTest.java @@ -23,8 +23,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Test getting a BatchPart with the BatchPartCollectionResource. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/EnginePropertiesResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/EnginePropertiesResourceTest.java index 2f5d60e5f3f..cfd42002250 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/EnginePropertiesResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/EnginePropertiesResourceTest.java @@ -32,8 +32,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java index 4622b3284a3..6c2e94c2ab0 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobCollectionResourceTest.java @@ -32,9 +32,9 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to the Job collection and a single job resource. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java index effeaae9bf9..4b3e3e40b12 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/JobResourceTest.java @@ -39,8 +39,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/PropertiesCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/PropertiesCollectionResourceTest.java index 9f334a57114..3deb9b0c8f2 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/PropertiesCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/PropertiesCollectionResourceTest.java @@ -23,7 +23,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * Test for all REST-operations related to Properties diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableColumnsResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableColumnsResourceTest.java index 3ecf83d948f..52fac873b69 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableColumnsResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableColumnsResourceTest.java @@ -22,8 +22,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; /** * Test for all REST-operations related to the Table columns. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableDataResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableDataResourceTest.java index a9bcf179863..56a51b961e1 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableDataResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableDataResourceTest.java @@ -27,7 +27,7 @@ import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableResourceTest.java index 6685eba312c..aff0315d9e1 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/management/TableResourceTest.java @@ -24,8 +24,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to the Table collection and a single table resource. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentCollectionResourceTest.java index 030e71860ef..221737502a1 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceResourceTest.java index fab69aee6ba..af216350475 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceResourceTest.java @@ -30,7 +30,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceTest.java index 9cb13770f03..2a10d49b5f2 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourceTest.java @@ -36,7 +36,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourcesResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourcesResourceTest.java index 65143acd8c2..3c05fca0ad7 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourcesResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/DeploymentResourcesResourceTest.java @@ -26,7 +26,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelCollectionResourceTest.java index 420f676c519..718e76149c5 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelCollectionResourceTest.java @@ -28,8 +28,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelResourceTest.java index 0c6e19ce0ef..f62fc128e3b 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ModelResourceTest.java @@ -30,8 +30,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionCollectionResourceTest.java index 55dfdba37c3..3f84110fd62 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * Test for all REST-operations related to the Deployment collection. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionIdentityLinksResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionIdentityLinksResourceTest.java index fe7bc89ebfb..c7a425adf5c 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionIdentityLinksResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionIdentityLinksResourceTest.java @@ -31,8 +31,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionResourceTest.java index f3cab214bc3..51021a71a66 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/repository/ProcessDefinitionResourceTest.java @@ -32,8 +32,8 @@ import org.joda.time.format.ISODateTimeFormat; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceCollectionResourceTest.java index ef1dff10926..e7932cd0a7f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceCollectionResourceTest.java @@ -33,8 +33,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * Test for REST-operation related to the activity instance query resource. @@ -109,7 +108,7 @@ public void testQueryActivityInstances() throws Exception { assertResultsPresentInDataResponse(url + "?tenantIdLike=anotherTenant"); } - protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String... expectedActivityIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String... expectedActivityIds) throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); JsonNode dataNode = objectMapper.readTree(response.getEntity().getContent()).get("data"); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceQueryResourceTest.java index 2412b9c63b6..53ea7e6c43d 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ActivityInstanceQueryResourceTest.java @@ -33,9 +33,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the activity instance query resource. @@ -138,7 +137,7 @@ public void testQueryActivityInstances() throws Exception { assertResultsPresentInDataResponse(url, requestNode, 0); } - protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String... expectedActivityIds) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String... expectedActivityIds) throws IOException { // Do the actual call HttpPost post = new HttpPost(SERVER_URL_PREFIX + url); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionActiveActivitiesCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionActiveActivitiesCollectionResourceTest.java index c879adc9500..55066c8c1a5 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionActiveActivitiesCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionActiveActivitiesCollectionResourceTest.java @@ -25,7 +25,7 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionCollectionResourceTest.java index 5da2f604394..53e23f0077f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionCollectionResourceTest.java @@ -29,8 +29,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to the execution collection. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionQueryResourceTest.java index 7eef2e65f95..c3ab50b6ff1 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionQueryResourceTest.java @@ -24,8 +24,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to the process instance query resource. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionResourceTest.java index 2e3a736e050..dad6cfcaebc 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionResourceTest.java @@ -30,9 +30,9 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionVariableResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionVariableResourceTest.java index 00383aac190..3ad12419444 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionVariableResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ExecutionVariableResourceTest.java @@ -40,8 +40,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceChangeActivityStateResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceChangeActivityStateResourceTest.java index 1b0029275ea..d01ddaae32d 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceChangeActivityStateResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceChangeActivityStateResourceTest.java @@ -29,8 +29,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; public class ProcessInstanceChangeActivityStateResourceTest extends BaseSpringRestTestCase { diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceCollectionResourceTest.java index c046166b07c..61f0f7542ef 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceCollectionResourceTest.java @@ -56,9 +56,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceIdentityLinkResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceIdentityLinkResourceTest.java index 4ec380bb719..8d6a0698452 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceIdentityLinkResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceIdentityLinkResourceTest.java @@ -28,8 +28,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceQueryResourceTest.java index cbcd860d01e..08fa68c95a1 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceQueryResourceTest.java @@ -29,9 +29,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceResourceTest.java index b8de2bc2ac1..15c919c35ce 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceResourceTest.java @@ -32,8 +32,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariableResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariableResourceTest.java index 81c76960013..44126572dd4 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariableResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariableResourceTest.java @@ -46,8 +46,8 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariablesCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariablesCollectionResourceTest.java index c51aff0f16b..2c890030b79 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariablesCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/ProcessInstanceVariablesCollectionResourceTest.java @@ -40,9 +40,9 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for all REST-operations related to Process instance variables. diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/SignalsResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/SignalsResourceTest.java index 00034b8a821..068298d180a 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/SignalsResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/SignalsResourceTest.java @@ -32,9 +32,9 @@ import org.flowable.rest.service.api.RestUrls; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskAttachmentResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskAttachmentResourceTest.java index 02e4c263e04..cc97b431a8f 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskAttachmentResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskAttachmentResourceTest.java @@ -36,8 +36,8 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCollectionResourceTest.java index 2b3cf250576..aab7b412618 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCollectionResourceTest.java @@ -41,8 +41,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCommentResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCommentResourceTest.java index 539d30d93cb..60534cd5593 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCommentResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskCommentResourceTest.java @@ -33,8 +33,8 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskEventResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskEventResourceTest.java index 699c0d04f4c..35792f2da24 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskEventResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskEventResourceTest.java @@ -29,7 +29,7 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskIdentityLinkResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskIdentityLinkResourceTest.java index db377bbac97..de4e74fc2b7 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskIdentityLinkResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskIdentityLinkResourceTest.java @@ -31,8 +31,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskQueryResourceTest.java index d2ab483e921..e8d9268de87 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskQueryResourceTest.java @@ -37,9 +37,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskResourceTest.java index de85950cdbc..b93824ae29a 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskResourceTest.java @@ -55,9 +55,9 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariableResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariableResourceTest.java index 2c9da32d3ef..55e5b4b3bc5 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariableResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariableResourceTest.java @@ -40,8 +40,8 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java index a9ecb154b74..1fc6bc676ea 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/TaskVariablesCollectionResourceTest.java @@ -43,9 +43,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; import net.javacrumbs.jsonunit.core.Option; diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java index 355acc91d30..b14d277c640 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceCollectionResourceTest.java @@ -33,8 +33,7 @@ import org.flowable.variable.api.persistence.entity.VariableInstance; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; @@ -243,7 +242,7 @@ public void testVariableInstanceScopeIsPresent() throws Exception { } protected void assertResultsPresentInDataResponse(String url, int numberOfResultsExpected, String variableName, Object variableValue) - throws JsonProcessingException, IOException { + throws IOException { // Do the actual call CloseableHttpResponse response = executeRequest(new HttpGet(SERVER_URL_PREFIX + url), HttpStatus.SC_OK); diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceQueryResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceQueryResourceTest.java index 0e21cb2f342..c5a0982c2dd 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceQueryResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/runtime/VariableInstanceQueryResourceTest.java @@ -30,10 +30,9 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Test for REST-operation related to the variable instance query resource. @@ -130,7 +129,7 @@ public void testQueryVariableInstances() throws Exception { assertErrorResult(url, requestNode, HttpStatus.SC_BAD_REQUEST); } - protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) throws JsonProcessingException, IOException { + protected void assertResultsPresentInDataResponse(String url, ObjectNode body, int numberOfResultsExpected, String variableName, Object variableValue) throws IOException { // Do the actual call HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX + url); diff --git a/modules/flowable-spring-boot/flowable-spring-boot-samples/flowable-spring-boot-sample-rest-api/src/test/java/org/flowable/test/spring/boot/RestApiApplicationTest.java b/modules/flowable-spring-boot/flowable-spring-boot-samples/flowable-spring-boot-sample-rest-api/src/test/java/org/flowable/test/spring/boot/RestApiApplicationTest.java index 08d5be03665..260f6fd355a 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-samples/flowable-spring-boot-sample-rest-api/src/test/java/org/flowable/test/spring/boot/RestApiApplicationTest.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-samples/flowable-spring-boot-sample-rest-api/src/test/java/org/flowable/test/spring/boot/RestApiApplicationTest.java @@ -32,7 +32,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import flowable.Application; diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml index 799809148e6..820bf926be7 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml @@ -161,6 +161,11 @@ spring-boot-jdbc true + + org.springframework.boot + spring-boot-jackson + true + @@ -262,11 +267,6 @@ test - - org.springframework.boot - spring-boot-jackson2 - test - diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/DispatcherServletConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/DispatcherServletConfiguration.java index f759082d98f..2f57975642a 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/DispatcherServletConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/DispatcherServletConfiguration.java @@ -18,11 +18,11 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverters; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * Base dispatcher configuration that can be used to configure context for the REST API. @@ -34,10 +34,10 @@ public class DispatcherServletConfiguration extends WebMvcConfigurationSupport { @Autowired - protected ObjectMapper objectMapper; + protected JsonMapper jsonMapper; @Override protected void configureMessageConverters(HttpMessageConverters.ServerBuilder builder) { - builder.withJsonConverter(new MappingJackson2HttpMessageConverter(objectMapper)); + builder.withJsonConverter(new JacksonJsonHttpMessageConverter(jsonMapper)); } } diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java index ba6840cf3f0..b2fca32df61 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java @@ -64,7 +64,7 @@ import org.springframework.core.io.Resource; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Provides sane definitions for the various beans required to be productive with Flowable in Spring. diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java index ad0c528cc05..71dd2d8bd69 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java @@ -39,7 +39,7 @@ import org.springframework.core.io.Resource; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Provides sane definitions for the various beans required to be productive with Flowable in Spring. diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java index e2129163997..1cd5479c3b0 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java @@ -67,7 +67,7 @@ import org.springframework.core.io.Resource; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration} for the CMMN engine diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java index 7e16198bbcb..9acdeaca711 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java @@ -19,7 +19,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Component scan for the CMMN Rest API Configuration. diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/dmn/DmnEngineAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/dmn/DmnEngineAutoConfiguration.java index 40701fb668b..4692f96a7b2 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/dmn/DmnEngineAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/dmn/DmnEngineAutoConfiguration.java @@ -50,7 +50,7 @@ import org.springframework.core.io.Resource; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration} for the Dmn engine diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryAutoConfiguration.java index 7779f174a5b..44c688024f3 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryAutoConfiguration.java @@ -67,7 +67,7 @@ import org.springframework.scheduling.TaskScheduler; import org.springframework.transaction.PlatformTransactionManager; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Auto configuration for the event registry. diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryRestConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryRestConfiguration.java index 4596fbde7fc..55118be3814 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryRestConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/eventregistry/EventRegistryRestConfiguration.java @@ -19,7 +19,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Component scan for the Form Rest API Configuration. diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java index 9952b96996b..8320d31c1ce 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java @@ -24,7 +24,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Component scan for the External Job REST API Configuration. diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java index fdd5366d717..63f6a170a95 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java @@ -20,7 +20,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * Component scan for the Process engine REST API Configuration. diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/cmmn/CmmnEngineAutoConfigurationTest.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/cmmn/CmmnEngineAutoConfigurationTest.java index c5d20fcfd4c..d427e7cef58 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/cmmn/CmmnEngineAutoConfigurationTest.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/cmmn/CmmnEngineAutoConfigurationTest.java @@ -66,11 +66,11 @@ import org.flowable.test.spring.boot.util.CustomUserEngineConfigurerConfiguration; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.hibernate.autoconfigure.HibernateJpaAutoConfiguration; -import org.springframework.boot.jackson2.autoconfigure.Jackson2AutoConfiguration; +import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; @@ -78,7 +78,7 @@ import org.springframework.core.io.Resource; import org.springframework.core.task.TaskExecutor; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov @@ -222,7 +222,7 @@ public void standaloneCmmnEngineWithBasicDataSource() { @Test public void standaloneCmmnEngineWithJackson() { contextRunner - .withConfiguration(AutoConfigurations.of(Jackson2AutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class)) .run(context -> { assertThat(context).as("Cmmn engine") .hasSingleBean(CmmnEngine.class) @@ -398,7 +398,7 @@ public void cmmnEngineWithProcessEngineAndJackson() { .withConfiguration(AutoConfigurations.of( ProcessEngineServicesAutoConfiguration.class, ProcessEngineAutoConfiguration.class, - Jackson2AutoConfiguration.class + JacksonAutoConfiguration.class )) .run(context -> { assertThat(context) diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/dmn/DmnEngineAutoConfigurationTest.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/dmn/DmnEngineAutoConfigurationTest.java index e75bdeeafa9..fe99f43f3e7 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/dmn/DmnEngineAutoConfigurationTest.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/dmn/DmnEngineAutoConfigurationTest.java @@ -54,7 +54,7 @@ import org.flowable.test.spring.boot.util.CustomUserEngineConfigurerConfiguration; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.jackson2.autoconfigure.Jackson2AutoConfiguration; +import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; @@ -65,7 +65,7 @@ import org.springframework.core.annotation.Order; import org.springframework.core.io.Resource; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public class DmnEngineAutoConfigurationTest { @@ -136,7 +136,7 @@ public void standaloneDmnEngineWithBasicDataSource() { @Test public void standaloneDmnEngineWithJackson() { contextRunner - .withConfiguration(AutoConfigurations.of(Jackson2AutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class)) .run(context -> { assertThat(context) .doesNotHaveBean(AppEngine.class) @@ -310,7 +310,7 @@ public void dmnEngineWithProcessEngineAndJackson() { .withConfiguration(AutoConfigurations.of( ProcessEngineServicesAutoConfiguration.class, ProcessEngineAutoConfiguration.class, - Jackson2AutoConfiguration.class + JacksonAutoConfiguration.class )) .run(context -> { assertThat(context) diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/eventregistry/EventRegistryAutoConfigurationTest.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/eventregistry/EventRegistryAutoConfigurationTest.java index 4933a7ae4a9..cbaaef681cb 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/eventregistry/EventRegistryAutoConfigurationTest.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/eventregistry/EventRegistryAutoConfigurationTest.java @@ -57,7 +57,7 @@ import org.springframework.boot.amqp.autoconfigure.RabbitAutoConfiguration; import org.springframework.boot.artemis.autoconfigure.ArtemisAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.jackson2.autoconfigure.Jackson2AutoConfiguration; +import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.jms.autoconfigure.JmsAutoConfiguration; @@ -78,7 +78,7 @@ public class EventRegistryAutoConfigurationTest { DataSourceTransactionManagerAutoConfiguration.class, EventRegistryServicesAutoConfiguration.class, EventRegistryAutoConfiguration.class, - Jackson2AutoConfiguration.class + JacksonAutoConfiguration.class )) .withUserConfiguration(CustomUserEngineConfigurerConfiguration.class); diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/process/ProcessEngineAutoConfigurationTest.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/process/ProcessEngineAutoConfigurationTest.java index ab567eda006..8ae9daef378 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/process/ProcessEngineAutoConfigurationTest.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/test/java/org/flowable/test/spring/boot/process/ProcessEngineAutoConfigurationTest.java @@ -71,7 +71,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; -import org.springframework.boot.jackson2.autoconfigure.Jackson2AutoConfiguration; +import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceTransactionManagerAutoConfiguration; import org.springframework.boot.test.context.FilteredClassLoader; @@ -84,7 +84,7 @@ import org.springframework.core.io.Resource; import org.springframework.core.task.TaskExecutor; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Filip Hrisafov @@ -231,7 +231,7 @@ public void standaloneProcessEngineWithBasicDatasource() { @Test public void standaloneProcessEngineWithJackson() { contextRunner - .withConfiguration(AutoConfigurations.of(Jackson2AutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(JacksonAutoConfiguration.class)) .run(context -> { assertThat(context).as("Process engine") .hasSingleBean(ProcessEngine.class) @@ -412,7 +412,7 @@ public void processEngineWithBasicDataSourceAndAppEngineWithJackson() { IdmEngineAutoConfiguration.class, IdmEngineServicesAutoConfiguration.class, - Jackson2AutoConfiguration.class + JacksonAutoConfiguration.class )) .run(context -> { assertThat(context).as("Process engine") diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-app-rest/pom.xml b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-app-rest/pom.xml index e551483586f..6319453b0d4 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-app-rest/pom.xml +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-app-rest/pom.xml @@ -32,10 +32,6 @@ - - org.springframework.boot - spring-boot-jackson2 - diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-cmmn-rest/pom.xml b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-cmmn-rest/pom.xml index 0921318b174..f97d241fb3a 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-cmmn-rest/pom.xml +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-cmmn-rest/pom.xml @@ -42,10 +42,6 @@ - - org.springframework.boot - spring-boot-jackson2 - diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-dmn-rest/pom.xml b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-dmn-rest/pom.xml index 98c21529f5f..df5c58bce75 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-dmn-rest/pom.xml +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-dmn-rest/pom.xml @@ -32,10 +32,6 @@ - - org.springframework.boot - spring-boot-jackson2 - diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-process-rest/pom.xml b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-process-rest/pom.xml index 54ea91747fa..8eac3df52c7 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-process-rest/pom.xml +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-starter-process-rest/pom.xml @@ -46,10 +46,6 @@ org.flowable flowable-external-job-rest - - org.springframework.boot - spring-boot-jackson2 - diff --git a/modules/flowable-spring/src/test/java/org/flowable/spring/test/eventregistry/TestInboundEventChannelAdapter.java b/modules/flowable-spring/src/test/java/org/flowable/spring/test/eventregistry/TestInboundEventChannelAdapter.java index fea54f95f32..85dc7d02bdd 100644 --- a/modules/flowable-spring/src/test/java/org/flowable/spring/test/eventregistry/TestInboundEventChannelAdapter.java +++ b/modules/flowable-spring/src/test/java/org/flowable/spring/test/eventregistry/TestInboundEventChannelAdapter.java @@ -18,15 +18,15 @@ import org.flowable.eventregistry.api.InboundEventChannelAdapter; import org.flowable.eventregistry.model.InboundChannelModel; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; public class TestInboundEventChannelAdapter implements InboundEventChannelAdapter { public InboundChannelModel inboundChannelModel; public EventRegistry eventRegistry; - protected final ObjectMapper objectMapper = new ObjectMapper(); + protected final ObjectMapper objectMapper = JsonMapper.shared(); @Override public void setInboundChannelModel(InboundChannelModel inboundChannelModel) { @@ -62,11 +62,7 @@ public void triggerTestEvent(String customerId, String orderId) { } json.put("payload1", "Hello World"); json.put("payload2", new Random().nextInt()); - try { - eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + eventRegistry.eventReceived(inboundChannelModel, objectMapper.writeValueAsString(json)); } } diff --git a/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityImpl.java b/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityImpl.java index ecdbf4b4818..89e4b1f9790 100644 --- a/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityImpl.java +++ b/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityImpl.java @@ -49,7 +49,7 @@ import org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl; import org.flowable.variable.service.impl.util.CommandContextUtil; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityManagerImpl.java b/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityManagerImpl.java index 2a78e93fa52..6c99b119da9 100644 --- a/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityManagerImpl.java +++ b/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/persistence/entity/TaskEntityManagerImpl.java @@ -32,7 +32,7 @@ import org.flowable.task.service.impl.persistence.CountingTaskEntity; import org.flowable.task.service.impl.persistence.entity.data.TaskDataManager; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/persistence/entity/VariableScopeImpl.java b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/persistence/entity/VariableScopeImpl.java index 7e3963dc2cd..1a9af71de24 100644 --- a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/persistence/entity/VariableScopeImpl.java +++ b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/persistence/entity/VariableScopeImpl.java @@ -37,7 +37,7 @@ import org.flowable.variable.service.impl.VariableInstanceValueModifier; import org.flowable.variable.service.impl.util.VariableLoggingSessionUtil; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/types/JsonType.java b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/types/JsonType.java index 70fcd5dea9d..2f90fc5ebe8 100644 --- a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/types/JsonType.java +++ b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/types/JsonType.java @@ -33,8 +33,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; /** * @author Tijs Rademakers diff --git a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java index 73e8138eee4..b247aded193 100644 --- a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java +++ b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java @@ -37,9 +37,9 @@ import org.joda.time.DateTime; import org.joda.time.LocalDate; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; public class VariableLoggingSessionUtil { diff --git a/modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultFlowable5CompatibilityHandler.java b/modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultFlowable5CompatibilityHandler.java index 26dfd580687..09502dba70d 100644 --- a/modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultFlowable5CompatibilityHandler.java +++ b/modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultFlowable5CompatibilityHandler.java @@ -81,7 +81,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntityImpl; import org.flowable.variable.api.persistence.entity.VariableInstance; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/pom.xml b/modules/flowable5-engine/pom.xml index a325b3d0a37..4353d2fe55a 100644 --- a/modules/flowable5-engine/pom.xml +++ b/modules/flowable5-engine/pom.xml @@ -165,6 +165,7 @@ org.drools*;resolution:=optional, org.kie*;resolution:=optional, com.fasterxml*;resolution:=optional, + tools.jackson*;resolution:=optional, jakarta.transaction;resolution:=optional, jakarta.enterprise.concurrent;resolution:=optional, diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/DynamicBpmnService.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/DynamicBpmnService.java index f43c2417851..e9b04bd5ea3 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/DynamicBpmnService.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/DynamicBpmnService.java @@ -18,7 +18,7 @@ import org.flowable.engine.DynamicBpmnConstants; import org.flowable.engine.dynamic.DynamicProcessDefinitionSummary; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Service providing access to the repository of process definitions and deployments. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/BasePropertiesParser.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/BasePropertiesParser.java index 84bf50fb52a..66313ec2aab 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/BasePropertiesParser.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/BasePropertiesParser.java @@ -18,10 +18,10 @@ import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.DynamicBpmnConstants; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/DefaultPropertiesParser.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/DefaultPropertiesParser.java index fb24a301d81..49c1c818df0 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/DefaultPropertiesParser.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/DefaultPropertiesParser.java @@ -14,8 +14,8 @@ import org.flowable.bpmn.model.FlowElement; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Used for {@link FlowElement} currently not supported by the {@link org.activiti.engine.DynamicBpmnService} and elements who are not parsed. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/PropertiesParser.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/PropertiesParser.java index cae25ced282..01db45ecf5f 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/PropertiesParser.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/PropertiesParser.java @@ -14,8 +14,8 @@ import org.flowable.bpmn.model.FlowElement; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/ScriptTaskPropertiesParser.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/ScriptTaskPropertiesParser.java index 93e30263fda..ae1297670da 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/ScriptTaskPropertiesParser.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/ScriptTaskPropertiesParser.java @@ -15,8 +15,8 @@ import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.ScriptTask; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/UserTaskPropertiesParser.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/UserTaskPropertiesParser.java index facc664fd45..67934dc9da2 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/UserTaskPropertiesParser.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/dynamic/UserTaskPropertiesParser.java @@ -15,8 +15,8 @@ import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.UserTask; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 5/12/2016. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/DynamicBpmnServiceImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/DynamicBpmnServiceImpl.java index 92d46d2457b..a49a160b4ac 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/DynamicBpmnServiceImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/DynamicBpmnServiceImpl.java @@ -25,10 +25,10 @@ import org.flowable.engine.DynamicBpmnConstants; import org.flowable.engine.dynamic.DynamicProcessDefinitionSummary; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java index e5681451783..f7035b461ae 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ExecutionQueryImpl.java @@ -27,8 +27,8 @@ import org.flowable.engine.DynamicBpmnConstants; import org.flowable.engine.repository.ProcessDefinition; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricProcessInstanceQueryImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricProcessInstanceQueryImpl.java index 6a51dcd8d40..c1cd2ac363d 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricProcessInstanceQueryImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricProcessInstanceQueryImpl.java @@ -28,8 +28,8 @@ import org.flowable.engine.DynamicBpmnConstants; import org.flowable.engine.repository.ProcessDefinition; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricTaskInstanceQueryImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricTaskInstanceQueryImpl.java index c8efcad0b6b..d6cce20fcaa 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricTaskInstanceQueryImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/HistoricTaskInstanceQueryImpl.java @@ -29,8 +29,8 @@ import org.flowable.idm.api.Group; import org.flowable.variable.api.types.VariableTypes; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java index de4b232925e..7149dd3221e 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/ProcessInstanceQueryImpl.java @@ -29,8 +29,8 @@ import org.activiti.engine.runtime.ProcessInstanceQuery; import org.flowable.engine.DynamicBpmnConstants; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java index e4a0c743d8c..39ef003fcee 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java @@ -30,8 +30,8 @@ import org.flowable.task.api.DelegationState; import org.flowable.variable.api.types.VariableTypes; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java index d24e06052b0..4427600da29 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ScriptTaskActivityBehavior.java @@ -25,7 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Activity implementation of the BPMN 2.0 script task. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java index 11d561ac9c6..6b5c9c954e0 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskDelegateExpressionActivityBehavior.java @@ -34,7 +34,7 @@ import org.flowable.engine.delegate.JavaDelegate; import org.flowable.engine.impl.delegate.ActivityBehavior; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * {@link ActivityBehavior} used when 'delegateExpression' is used for a serviceTask. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java index c05af9cdeb6..77b8147b69f 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ServiceTaskExpressionActivityBehavior.java @@ -28,7 +28,7 @@ import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.impl.delegate.ActivityBehavior; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * {@link ActivityBehavior} that evaluates an expression when executed. Optionally, it sets the result of the expression as a variable on the execution. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java index f556929a8a8..e45f3e19bdc 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java @@ -41,8 +41,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * Activity implementation for the user task. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java index 3e9c5755eec..bd41f12aa50 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/deployer/BpmnDeployer.java @@ -75,9 +75,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java index 49ea147ec0b..16292e1bb89 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/helper/ClassDelegate.java @@ -42,7 +42,7 @@ import org.flowable.engine.impl.delegate.ActivityBehavior; import org.flowable.task.service.delegate.DelegateTask; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Helper class for bpmn constructs that allow class delegation. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java index ddc3ad96d19..96664519334 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java @@ -241,7 +241,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Tom Baeyens diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/GetProcessDefinitionInfoCmd.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/GetProcessDefinitionInfoCmd.java index 8151b9321ab..f342f6b507a 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/GetProcessDefinitionInfoCmd.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/GetProcessDefinitionInfoCmd.java @@ -20,7 +20,7 @@ import org.activiti.engine.impl.persistence.deploy.DeploymentManager; import org.activiti.engine.impl.persistence.deploy.ProcessDefinitionInfoCacheObject; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java index 390bd0499de..d3642b35cd4 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cmd/SaveProcessDefinitionInfoCmd.java @@ -21,8 +21,8 @@ import org.activiti.engine.impl.persistence.entity.ProcessDefinitionInfoEntity; import org.activiti.engine.impl.persistence.entity.ProcessDefinitionInfoEntityManager; -import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectWriter; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/context/Context.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/context/Context.java index e5ddc5bce08..014605be2ef 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/context/Context.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/context/Context.java @@ -28,7 +28,7 @@ import org.activiti.engine.impl.persistence.deploy.ProcessDefinitionInfoCacheObject; import org.activiti.engine.impl.pvm.runtime.InterpretableExecution; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/el/UelExpressionCondition.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/el/UelExpressionCondition.java index 4cc3b2b167c..dc93ebb3b7c 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/el/UelExpressionCondition.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/el/UelExpressionCondition.java @@ -20,8 +20,8 @@ import org.flowable.engine.DynamicBpmnConstants; import org.flowable.engine.delegate.DelegateExecution; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * {@link Condition} that resolves an UEL expression at runtime. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/EventLogger.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/EventLogger.java index a0e6a6ab507..d3d8dd3792e 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/EventLogger.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/EventLogger.java @@ -45,7 +45,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java index 2bdb361655c..9dd762960ac 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/AbstractDatabaseEventLoggerEventHandler.java @@ -27,7 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/EventLoggerEventHandler.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/EventLoggerEventHandler.java index 29b337a7f1c..88fd2f222c1 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/EventLoggerEventHandler.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/EventLoggerEventHandler.java @@ -18,7 +18,7 @@ import org.activiti.engine.impl.persistence.entity.EventLogEntryEntity; import org.flowable.common.engine.api.delegate.event.FlowableEvent; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/VariableEventHandler.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/VariableEventHandler.java index 5196adac3b5..7bdc6e10c14 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/VariableEventHandler.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/logger/handler/VariableEventHandler.java @@ -32,8 +32,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -140,13 +141,13 @@ protected Map createData(FlowableVariableEvent variableEvent) { (variableEvent.getVariableValue() != null && (variableEvent.getVariableValue() instanceof Object))) { // Last try: serialize it to json - ObjectMapper objectMapper = new ObjectMapper(); + ObjectMapper objectMapper = JsonMapper.shared(); try { String value = objectMapper.writeValueAsString(variableEvent.getVariableValue()); putInMapIfNotNull(data, Fields.VALUE_JSON, value); putInMapIfNotNull(data, Fields.VARIABLE_TYPE, TYPE_JSON); putInMapIfNotNull(data, Fields.VALUE, value); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { // Nothing to do about it LOGGER.debug("Could not serialize variable value {}", variableEvent.getVariableValue()); } diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java index 7ed7f77f5a9..147a6de1a63 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerActivateProcessDefinitionHandler.java @@ -19,7 +19,7 @@ import org.flowable.common.engine.api.FlowableException; import org.flowable.job.api.Job; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java index 8e5ebcd980c..c5a38de45cb 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerChangeProcessDefinitionSuspensionStateJobHandler.java @@ -14,8 +14,8 @@ import org.activiti.engine.impl.context.Context; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerEventHandler.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerEventHandler.java index 00de5690531..0b267ddf5eb 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerEventHandler.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerEventHandler.java @@ -17,9 +17,9 @@ import org.activiti.engine.impl.context.Context; import org.flowable.common.engine.api.delegate.Expression; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ObjectNode; public class TimerEventHandler { @@ -171,7 +171,7 @@ protected static JsonNode readJsonValue(String config) throws IOException { if (Context.getCommandContext() != null) { return Context.getProcessEngineConfiguration().getObjectMapper().readTree(config); } else { - return new ObjectMapper().readTree(config); + return JsonMapper.shared().readTree(config); } } } diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java index 21e98c1940c..e16584c51ad 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/jobexecutor/TimerSuspendProcessDefinitionHandler.java @@ -19,7 +19,7 @@ import org.flowable.common.engine.api.FlowableException; import org.flowable.job.api.Job; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; /** * @author Joram Barrez diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java index d92c55a25db..e300bd24710 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCache.java @@ -26,8 +26,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ObjectNode; /** * Default cache: keep everything in memory, unless a limit is set. diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java index 1e210b7de95..bb508b4da18 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/persistence/deploy/ProcessDefinitionInfoCacheObject.java @@ -12,7 +12,7 @@ */ package org.activiti.engine.impl.persistence.deploy; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/scripting/ScriptCondition.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/scripting/ScriptCondition.java index 615eb12ded7..8fbda39d63c 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/scripting/ScriptCondition.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/scripting/ScriptCondition.java @@ -18,8 +18,8 @@ import org.flowable.engine.DynamicBpmnConstants; import org.flowable.engine.delegate.DelegateExecution; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tom Baeyens diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/DatabaseEventLoggerTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/DatabaseEventLoggerTest.java index b854f436492..14bc09f9232 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/DatabaseEventLoggerTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/DatabaseEventLoggerTest.java @@ -28,8 +28,9 @@ import org.flowable.engine.repository.DeploymentProperties; import org.flowable.engine.runtime.ProcessInstance; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -38,7 +39,7 @@ public class DatabaseEventLoggerTest extends PluggableFlowableTestCase { protected EventLogger databaseEventLogger; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @Override protected void setUp() throws Exception { diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/StandaloneDatabaseEventLoggerTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/StandaloneDatabaseEventLoggerTest.java index 117062cdcb6..f4430fb29e0 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/StandaloneDatabaseEventLoggerTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/event/StandaloneDatabaseEventLoggerTest.java @@ -21,8 +21,9 @@ import org.flowable.engine.impl.event.logger.EventLogger; import org.flowable.engine.impl.event.logger.handler.Fields; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Joram Barrez @@ -31,7 +32,7 @@ public class StandaloneDatabaseEventLoggerTest extends PluggableFlowableTestCase protected EventLogger databaseEventLogger; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @Override protected void setUp() throws Exception { diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoricProcessInstanceQueryTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoricProcessInstanceQueryTest.java index a1f3b9f2627..5ccde4fd2de 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoricProcessInstanceQueryTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoricProcessInstanceQueryTest.java @@ -20,7 +20,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; public class HistoricProcessInstanceQueryTest extends PluggableFlowableTestCase { diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoryServiceTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoryServiceTest.java index eb4d61f15f3..c71b570e623 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoryServiceTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/history/HistoryServiceTest.java @@ -35,7 +35,7 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Frederik Heremans diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java index 5e2d7520bfa..96d4efae33d 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ExecutionQueryTest.java @@ -47,7 +47,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ProcessInstanceQueryTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ProcessInstanceQueryTest.java index f639d62de1b..b30c759e69a 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ProcessInstanceQueryTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/runtime/ProcessInstanceQueryTest.java @@ -35,7 +35,7 @@ import org.flowable.engine.runtime.ProcessInstanceQuery; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java index 95d9f5d83b1..7085254392a 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java @@ -33,7 +33,7 @@ import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java index 7708659cf9f..46586cf1286 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicCandidateGroupsTest.java @@ -22,7 +22,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 7/12/2016. diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java index c7e62d141f2..17bb8de383e 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/dynamic/DynamicProcessDefinitionSummaryTest.java @@ -27,9 +27,9 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * Created by Pardo David on 1/12/2016. diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java index df221691cd6..fcb7d0eef6a 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/sequenceflow/ConditionalSequenceFlowTest.java @@ -21,7 +21,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Joram Barrez diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java index 9faab091e8a..86f61f2c3bd 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/servicetask/DynamicServiceTaskTest.java @@ -22,7 +22,7 @@ import org.flowable.engine.test.Deployment; import org.flowable.variable.api.history.HistoricVariableInstance; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java index fd3831be0a7..738bee6a226 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DisabledDefinitionInfoCacheTest.java @@ -23,7 +23,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DynamicUserTaskTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DynamicUserTaskTest.java index 175ffd9829d..da7e9bc9a86 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DynamicUserTaskTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/bpmn/usertask/DynamicUserTaskTest.java @@ -23,7 +23,7 @@ import org.flowable.identitylink.api.IdentityLink; import org.flowable.identitylink.api.IdentityLinkType; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers diff --git a/modules/flowable5-test/src/test/java/org/activiti/engine/test/json/JsonTest.java b/modules/flowable5-test/src/test/java/org/activiti/engine/test/json/JsonTest.java index a54391dbbbb..9fa67b970e0 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/engine/test/json/JsonTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/engine/test/json/JsonTest.java @@ -23,9 +23,10 @@ import org.flowable.engine.test.Deployment; import org.flowable.variable.api.history.HistoricVariableInstance; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; /** * @author Tijs Rademakers @@ -33,7 +34,7 @@ */ public class JsonTest extends PluggableFlowableTestCase { - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper = JsonMapper.shared(); @Override protected void setUp() throws Exception { diff --git a/modules/flowable5-test/src/test/java/org/activiti/examples/bpmn/scripttask/ScriptTaskTest.java b/modules/flowable5-test/src/test/java/org/activiti/examples/bpmn/scripttask/ScriptTaskTest.java index f713342f68b..8f3af27a019 100644 --- a/modules/flowable5-test/src/test/java/org/activiti/examples/bpmn/scripttask/ScriptTaskTest.java +++ b/modules/flowable5-test/src/test/java/org/activiti/examples/bpmn/scripttask/ScriptTaskTest.java @@ -22,7 +22,7 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.test.Deployment; -import com.fasterxml.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.ObjectNode; import groovy.lang.MissingPropertyException; From 7ac466017fe75a72e66359b4b4ba4fc5278a5f70 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Tue, 18 Nov 2025 16:12:39 +0100 Subject: [PATCH 2/6] Fix failing tests on Jackson 3 * Jackson 3 textValue() fails if node is not string or null * Treat RecordKey JsonCreator as delegating (this is also applicable to Jackson 2) * Fix incorrect expected JSON --- .../itemcontrol/RepetitionVariableAggregationTest.java | 8 ++++---- .../engine/dynamic/ScriptTaskPropertiesParser.java | 2 +- .../eventregistry/model/KafkaOutboundChannelModel.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java index eb465fce0aa..9a2ee6cb904 100644 --- a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.java @@ -148,7 +148,7 @@ public void testSequentialRepeatingUserTask() { + "{ userId: 'userOne', approved : false, description : 'description task 0' }," + "{ userId: 'userTwo', approved : true, description : 'description task 1' }," + "{ userId: 'userThree', approved : false, description : 'description task 2' }" - + "]]"); + + "]"); assertNoAggregatedVariables(); VariableInstance reviewsVarInstance = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); @@ -630,7 +630,7 @@ public void testParallelRepeatingUserTask() { + "{ userId: 'userOne', approved : true, description : 'description task 1' }," + "{ userId: 'userTwo', approved : false, description : 'description task 2' }," + "{ userId: 'userThree', approved : true, description : 'description task 3' }" - + "]]"); + + "]"); assertNoAggregatedVariables(); VariableInstance reviewsVarInstance = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); @@ -969,7 +969,7 @@ public void testSequentialRepeatingStage() { + "{ score: 100, approved : true, description : 'description task 0' }," + "{ score: 101, approved : false, description : 'description task 1' }," + "{ score: 102, approved : true, description : 'description task 2' }" - + "]]"); + + "]"); assertNoAggregatedVariables(); VariableInstance reviewsVarInstance = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); @@ -1099,7 +1099,7 @@ public void testParallelRepeatingStage() { + "{ score: 11, approved : false, description : 'description task 1' }," + "{ score: 12, approved : true, description : 'description task 2' }," + "{ score: 13, approved : false, description : 'description task 3' }" - + "]]"); + + "]"); assertNoAggregatedVariables(); VariableInstance reviewsVarInstance = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java index fafb73af897..660e929081d 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/dynamic/ScriptTaskPropertiesParser.java @@ -29,7 +29,7 @@ protected ObjectNode createPropertiesNode(FlowElement flowElement, ObjectNode fl ObjectNode scriptTextNode = objectMapper.createObjectNode(); putPropertyValue(BPMN_MODEL_VALUE, scriptTask.getScript(), scriptTextNode); - putPropertyValue(DYNAMIC_VALUE, flowElementNode.path(SCRIPT_TASK_SCRIPT).textValue(), scriptTextNode); + putPropertyValue(DYNAMIC_VALUE, flowElementNode.path(SCRIPT_TASK_SCRIPT).asText(null), scriptTextNode); ObjectNode propertiesNode = objectMapper.createObjectNode(); propertiesNode.set(SCRIPT_TASK_SCRIPT, scriptTextNode); diff --git a/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/KafkaOutboundChannelModel.java b/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/KafkaOutboundChannelModel.java index f8af1eac665..035e64897da 100644 --- a/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/KafkaOutboundChannelModel.java +++ b/modules/flowable-event-registry-model/src/main/java/org/flowable/eventregistry/model/KafkaOutboundChannelModel.java @@ -122,7 +122,7 @@ public void setDelegateExpression(String delegateExpression) { } // backward compatibility - @JsonCreator + @JsonCreator(mode = JsonCreator.Mode.DELEGATING) public static RecordKey fromFixedValue(String fixedValue) { RecordKey recordKey = new RecordKey(); recordKey.setFixedValue(fixedValue); From 7eae816212365ca0b77a839d40b30b56f16be2f8 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Tue, 18 Nov 2025 16:13:28 +0100 Subject: [PATCH 3/6] Do not use deprecated ISO8601DateFormat in tests --- ...ricTaskInstanceCollectionResourceTest.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java index 8d9cdc26d92..56cedc83526 100644 --- a/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java +++ b/modules/flowable-rest/src/test/java/org/flowable/rest/service/api/history/HistoricTaskInstanceCollectionResourceTest.java @@ -17,6 +17,9 @@ import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; +import java.time.LocalDate; +import java.time.Month; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -38,8 +41,6 @@ import org.flowable.task.api.Task; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.util.ISO8601DateFormat; - import tools.jackson.databind.JsonNode; import net.javacrumbs.jsonunit.core.Option; @@ -51,8 +52,6 @@ */ public class HistoricTaskInstanceCollectionResourceTest extends BaseSpringRestTestCase { - protected ISO8601DateFormat dateFormat = new ISO8601DateFormat(); - /** * Test querying historic task instance. GET history/historic-task-instances */ @@ -130,21 +129,22 @@ public void testQueryTaskInstances() throws Exception { assertResultsPresentInDataResponse(url + "?taskDefinitionKeys=processTask,processTask2", 3, task.getId(), task1.getId(), task2.getId()); - assertResultsPresentInDataResponse(url + "?dueDateAfter=" + dateFormat.format(new GregorianCalendar(2010, 0, 1).getTime()), 1, task.getId()); + assertResultsPresentInDataResponse(url + "?dueDateAfter=" + LocalDate.of(2010, Month.JANUARY, 1).atStartOfDay(ZoneId.systemDefault()).toInstant().toString(), 1, task.getId()); - assertResultsPresentInDataResponse(url + "?dueDateAfter=" + dateFormat.format(new GregorianCalendar(2013, 4, 1).getTime()), 0); + assertResultsPresentInDataResponse(url + "?dueDateAfter=" + LocalDate.of(2013, Month.MAY, 1).atStartOfDay(ZoneId.systemDefault()).toInstant().toString(), 0); - assertResultsPresentInDataResponse(url + "?dueDateBefore=" + dateFormat.format(new GregorianCalendar(2010, 0, 1).getTime()), 0); + assertResultsPresentInDataResponse(url + "?dueDateBefore=" + LocalDate.of(2010, Month.JANUARY, 1).atStartOfDay(ZoneId.systemDefault()).toInstant().toString(), + 0); - assertResultsPresentInDataResponse(url + "?dueDateBefore=" + dateFormat.format(new GregorianCalendar(2013, 4, 1).getTime()), 1, task.getId()); + assertResultsPresentInDataResponse(url + "?dueDateBefore=" + LocalDate.of(2013, Month.MAY, 1).atStartOfDay(ZoneId.systemDefault()).toInstant().toString(), 1, task.getId()); - assertResultsPresentInDataResponse(url + "?taskCreatedOn=" + dateFormat.format(created.getTime()), 1, task1.getId()); + assertResultsPresentInDataResponse(url + "?taskCreatedOn=" + created.toInstant().toString(), 1, task1.getId()); created.set(Calendar.YEAR, 2002); - assertResultsPresentInDataResponse(url + "?taskCreatedBefore=" + dateFormat.format(created.getTime()), 1, task1.getId()); + assertResultsPresentInDataResponse(url + "?taskCreatedBefore=" + created.toInstant().toString(), 1, task1.getId()); created.set(Calendar.YEAR, 2000); - assertResultsPresentInDataResponse(url + "?taskCreatedAfter=" + dateFormat.format(created.getTime()), 3, task1.getId(), task2.getId()); + assertResultsPresentInDataResponse(url + "?taskCreatedAfter=" + created.toInstant().toString(), 3, task1.getId(), task2.getId()); // Without tenant id assertResultsPresentInDataResponse(url + "?withoutTenantId=true", 2, task.getId(), task1.getId()); From 967f6929833d0c535f3a17ebba83586f61a34992 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Tue, 18 Nov 2025 16:19:06 +0100 Subject: [PATCH 4/6] Move BaseMailActivityDelegate to engine common and CandidateUtil#extractCandidates for parsing recipients --- .../impl/mail/CmmnMailActivityDelegate.java | 2 +- .../impl/mail}/BaseMailActivityDelegate.java | 29 +++---------------- .../bpmn/mail/BpmnMailActivityDelegate.java | 2 +- .../bpmn/mail/BpmnMailActivityDelegate.java | 2 +- 4 files changed, 7 insertions(+), 28 deletions(-) rename modules/{flowable-mail/src/main/java/org/flowable/mail/common/impl => flowable-engine-common/src/main/java/org/flowable/common/engine/impl/mail}/BaseMailActivityDelegate.java (92%) diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/mail/CmmnMailActivityDelegate.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/mail/CmmnMailActivityDelegate.java index ee0be8edef1..5e648fed27c 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/mail/CmmnMailActivityDelegate.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/mail/CmmnMailActivityDelegate.java @@ -18,9 +18,9 @@ import org.flowable.cmmn.engine.CmmnEngineConfiguration; import org.flowable.cmmn.engine.impl.util.CommandContextUtil; import org.flowable.common.engine.api.delegate.Expression; +import org.flowable.common.engine.impl.mail.BaseMailActivityDelegate; import org.flowable.content.api.ContentService; import org.flowable.mail.common.api.client.FlowableMailClient; -import org.flowable.mail.common.impl.BaseMailActivityDelegate; /** * @author Filip Hrisafov diff --git a/modules/flowable-mail/src/main/java/org/flowable/mail/common/impl/BaseMailActivityDelegate.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/mail/BaseMailActivityDelegate.java similarity index 92% rename from modules/flowable-mail/src/main/java/org/flowable/mail/common/impl/BaseMailActivityDelegate.java rename to modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/mail/BaseMailActivityDelegate.java index 782461a552a..7b6a59b8e0f 100644 --- a/modules/flowable-mail/src/main/java/org/flowable/mail/common/impl/BaseMailActivityDelegate.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/mail/BaseMailActivityDelegate.java @@ -10,26 +10,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.flowable.mail.common.impl; +package org.flowable.common.engine.impl.mail; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import jakarta.activation.DataSource; import jakarta.activation.FileDataSource; -import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.api.FlowableException; import org.flowable.common.engine.api.FlowableIllegalArgumentException; import org.flowable.common.engine.api.delegate.Expression; import org.flowable.common.engine.api.variable.VariableContainer; +import org.flowable.common.engine.impl.assignment.CandidateUtil; import org.flowable.content.api.ContentItem; import org.flowable.content.api.ContentService; import org.flowable.mail.common.api.MailMessage; @@ -37,12 +35,10 @@ import org.flowable.mail.common.api.SendMailRequest; import org.flowable.mail.common.api.client.ExecutableSendMailRequest; import org.flowable.mail.common.api.client.FlowableMailClient; +import org.flowable.mail.common.impl.FlowableMailException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.node.ArrayNode; - /** * @param The type of the variable container * @author Filip Hrisafov @@ -230,24 +226,7 @@ protected Collection parseRecipients(Expression expression, V variableCo return Collections.emptyList(); } Object value = expression.getValue(variableContainer); - if (value == null) { - return Collections.emptyList(); - } - if (value instanceof Collection) { - return (Collection) value; - } else if (value instanceof ArrayNode arrayNode) { - Collection recipients = new ArrayList<>(arrayNode.size()); - for (JsonNode node : arrayNode) { - recipients.add(node.asText()); - } - return recipients; - } else { - String str = value.toString(); - if (StringUtils.isNotEmpty(str)) { - return Arrays.asList(value.toString().split("[\\s]*,[\\s]*")); - } - } - return Collections.emptyList(); + return CandidateUtil.extractCandidates(value); } protected boolean fileExists(File file) { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java index d5469e45abc..ba8e767d288 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java @@ -14,13 +14,13 @@ import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.api.delegate.Expression; +import org.flowable.common.engine.impl.mail.BaseMailActivityDelegate; import org.flowable.content.api.ContentService; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.JavaDelegate; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.mail.common.api.client.FlowableMailClient; -import org.flowable.mail.common.impl.BaseMailActivityDelegate; /** * @author Filip Hrisafov diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java index d59ef168253..33a7618691b 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/mail/BpmnMailActivityDelegate.java @@ -20,7 +20,7 @@ import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.JavaDelegate; import org.flowable.mail.common.api.client.FlowableMailClient; -import org.flowable.mail.common.impl.BaseMailActivityDelegate; +import org.flowable.common.engine.impl.mail.BaseMailActivityDelegate; public class BpmnMailActivityDelegate extends BaseMailActivityDelegate implements JavaDelegate { From cc95fc9835aa4b8f61be0565ffa571ab3224fb43 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Wed, 19 Nov 2025 08:51:03 +0100 Subject: [PATCH 5/6] Support both Jackson 2 and Jackson 3 The Flowable REST Application contains both Jackson 2 and Jackson 3. However, the flowable engines have an optional dependency on Jackson 2. If Jackson 2 is needed it should be manually configured. All previous places that were using Jackson 2 for variable values. e.g. Task Candidates etc. are now supporting both Jackson 2 and Jackson 3 values. Storing Jackson 3 and Jackson 2 ObjectNode / ArrayNode variables is supported regardless of the preferred variable json mapper --- distro/src/readme.html | 47 + .../app/engine/AppEngineConfiguration.java | 27 +- modules/flowable-app-rest/pom.xml | 5 + .../RestJackson2JsonVariableTest.java | 153 +++ .../app/variable/RestJsonVariableTest.java | 150 +++ modules/flowable-cmmn-engine/pom.xml | 5 + .../cmmn/engine/CmmnEngineConfiguration.java | 28 +- .../JsonPlanItemVariableAggregator.java | 28 +- .../engine/impl/util/IOParameterUtil.java | 7 +- ...titionVariableAggregationJackson2Test.java | 581 +++++++++ modules/flowable-common-rest/pom.xml | 5 + ...ckson2JsonObjectRestVariableConverter.java | 64 + .../engine/impl/el/util/CollectionUtil.java | 13 +- .../dmn/engine/impl/el/util/DMNParseUtil.java | 48 +- modules/flowable-engine-common/pom.xml | 10 + .../impl/AbstractEngineConfigurator.java | 1 + .../common/engine/impl/HasVariableTypes.java | 5 + .../engine/impl/assignment/CandidateUtil.java | 13 +- .../engine/impl/el/JsonNodeELResolver.java | 190 ++- ...VariableContainsAnyExpressionFunction.java | 9 +- .../VariableContainsExpressionFunction.java | 19 +- .../VariableIsEmptyExpressionFunction.java | 9 +- .../engine/impl/json/FlowableArrayNode.java | 66 + .../engine/impl/json/FlowableJsonNode.java | 83 ++ .../engine/impl/json/FlowableObjectNode.java | 50 + .../engine/impl/json/VariableJsonMapper.java | 33 + .../jackson2/FlowableJackson2ArrayNode.java | 165 +++ .../jackson2/FlowableJackson2JsonNode.java | 226 ++++ .../jackson2/FlowableJackson2ObjectNode.java | 103 ++ .../jackson2/Jackson2VariableJsonMapper.java | 80 ++ .../jackson3/FlowableJackson3ArrayNode.java | 165 +++ .../jackson3/FlowableJackson3JsonNode.java | 240 ++++ .../jackson3/FlowableJackson3ObjectNode.java | 102 ++ .../jackson3/Jackson3VariableJsonMapper.java | 67 + .../common/engine/impl/util/JsonUtil.java | 182 +++ .../common/engine/impl/util/ReflectUtil.java | 9 + .../impl/json/FlowableArrayNodeTests.java | 593 +++++++++ .../impl/json/FlowableJackson2Test.java | 141 ++ .../impl/json/FlowableJackson3Test.java | 138 ++ .../impl/json/FlowableJsonNodeTests.java | 397 ++++++ .../impl/json/FlowableObjectNodeTests.java | 714 ++++++++++ .../engine/impl/json/TestJsonProvider.java | 53 + .../impl/json/VariableJsonMapperTests.java | 354 +++++ modules/flowable-engine/pom.xml | 5 + .../behavior/UserTaskActivityBehavior.java | 24 +- .../cfg/ProcessEngineConfigurationImpl.java | 28 +- .../impl/delegate/JsonVariableAggregator.java | 28 +- .../engine/impl/util/IOParameterUtil.java | 7 +- ...stanceVariableAggregationJackson2Test.java | 403 ++++++ .../el/ExpressionManagerJackson2Test.java | 191 +++ .../engine/test/el/ExpressionManagerTest.java | 7 + .../engine/test/json/JsonJackson2Test.java | 1154 +++++++++++++++++ .../flowable/engine/test/json/JsonTest.java | 22 + .../EventPayloadToJsonStringSerializer.java | 10 +- .../pom.xml | 6 + .../spring/boot/FlowableProperties.java | 15 + .../boot/ProcessEngineAutoConfiguration.java | 8 +- .../boot/app/AppEngineAutoConfiguration.java | 8 + .../cmmn/CmmnEngineAutoConfiguration.java | 7 +- .../cmmn/CmmnEngineRestConfiguration.java | 21 +- .../job/ExternalJobRestConfiguration.java | 12 +- ...riableJackson2JsonMapperConfiguration.java | 41 + ...ackson2JsonRestConverterConfiguration.java | 39 + .../ProcessEngineRestConfiguration.java | 21 +- ...itional-spring-configuration-metadata.json | 11 + .../service/VariableServiceConfiguration.java | 11 + .../DefaultVariableInstanceValueModifier.java | 5 + .../persistence/entity/VariableScopeImpl.java | 3 +- .../variable/service/impl/types/JsonType.java | 50 +- .../impl/util/VariableLoggingSessionUtil.java | 9 +- .../cfg/ProcessEngineConfigurationImpl.java | 30 +- 71 files changed, 7280 insertions(+), 274 deletions(-) create mode 100644 modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJackson2JsonVariableTest.java create mode 100644 modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJsonVariableTest.java create mode 100644 modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationJackson2Test.java create mode 100644 modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/Jackson2JsonObjectRestVariableConverter.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableArrayNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableJsonNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableObjectNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/VariableJsonMapper.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ArrayNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2JsonNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ObjectNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/Jackson2VariableJsonMapper.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ArrayNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3JsonNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ObjectNode.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/Jackson3VariableJsonMapper.java create mode 100644 modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/JsonUtil.java create mode 100644 modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableArrayNodeTests.java create mode 100644 modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson2Test.java create mode 100644 modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson3Test.java create mode 100644 modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJsonNodeTests.java create mode 100644 modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableObjectNodeTests.java create mode 100644 modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/TestJsonProvider.java create mode 100644 modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/VariableJsonMapperTests.java create mode 100644 modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationJackson2Test.java create mode 100644 modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerJackson2Test.java create mode 100644 modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonJackson2Test.java create mode 100644 modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/FlowableVariableJackson2JsonMapperConfiguration.java create mode 100644 modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/Jackson2JsonRestConverterConfiguration.java diff --git a/distro/src/readme.html b/distro/src/readme.html index 3738f6284ee..f277730e580 100644 --- a/distro/src/readme.html +++ b/distro/src/readme.html @@ -40,6 +40,53 @@

Release Notes - Flowable - 8.0.0

Date properties e.g., Process Instance start time will be returned as an ISO 8601 in the UTC timezone. E.g., if the start time was returned as 2025-09-24T09:58:12.609+02:00 now it is returned as 2025-09-24T07:58:12.609Z. +
  • + Jackson 3 is used for Flowable internal json manipulation. + There is still support for Jackson 2 variables. + With Spring Boot this can be enabled by setting flowable.variable-json-mapper to jackson2. + By default, Jackson 3 is being used for variables. + When configuring Flowable without Spring Boot then the variableJsonMapper on the process, cmmn and app engine configurations + should be set to be org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper + and the org.flowable.common.rest.variable.Jackson2JsonObjectRestVariableConverter should be added to the appropriate rest response factories. +
  • +
  • + Notable changes when using JSON in expressions / scripts: +
      +
    • Packages have changed from com.fasterxml.jackson.databind and com.fasterxml.jackson.core to tools.jackson.databind and tools.jackson.core
    • +
    • elements() no longer returns Iterator<JsonNode> and instead returns Collection<JsonNode>
    • +
    • values() no longer returns Iterator<JsonNode> and instead returns Collection<JsonNode>
    • +
    • Iterator<String> fieldNames() replaced by Collection<String> propertyNames()
    • +
    • Iterator<Map.Entry<String, JsonNode>> fields() replaced by Set<Map.Entry<String, JsonNode>> properties()
    • +
    • JsonNode with(String) replaced by ObjectNode withObject(String), and if not using a pointer then it is better to use ObjectNode withProperty(String)
    • +
    • TextNode textNode(String) replaced by StringNode stringNode(String)
    • +
    • List<String> findValuesAsText(String) replaced by List<String> findValuesAsString(String)
    • +
    • List<String> findValuesAsText(String, List<String>) replaced by List<String> findValuesAsString(String, List<String>)
    • +
    • boolean isContainerNode() replaced by boolean isContainer()
    • +
    • boolean isEmpty(SerializerProvider) replaced by boolean isEmpty(SerializationContext)
    • +
    • JsonNode put(String, JsonNode) replaced by JsonNode replace(String, JsonNode)
    • +
    • JsonNode putAll(Map<String, ? extends JsonNode>) replaced by JsonNode setAll(Map<String, ? extends JsonNode>)
    • +
    • JsonNode putAll(ObjectNode) replaced by JsonNode setAll(ObjectNode)>
    • +
    • JsonParser traverse() removed without replacement
    • +
    • JsonParser traverse(ObjectCodec) replaced by JsonParser traverse(ObjectReadContext)
    • +
    • void serialize(JsonGenerator, SerializerProvider) replaced by void serialize(JsonGenerator, SerializationContext)
    • +
    • void serializeWithType(JsonGenerator, SerializerProvider, TypeSerializer) replaced by void serializeWithType(JsonGenerator, SerializationContext, TypeSerializer)
    • +
    + Methods deprecated in Jackson 3: +
      +
    • String asText() replaced by String asString()
    • +
    • String asText(String) replaced by String asString(String)
    • +
    • boolean isTextual() replaced by boolean isString()
    • +
    • String textValue() replaced by String stringValue()
    • +
    + There is also a behaviour change in the different xxxValue and asXXX methods. + In Jackson 3 those methods would fail if the node is not of the appropriate type and / or if it cannot coerce the value to the requested type. + e.g. +
      +
    • When using stringValue on a non StringNode or NullNode it would fail, in Jackson 2 it would return null.
    • +
    • When using asString on a ObjectNode or ArrayNode it would fail, in Jackson 2 it would return an empty string.
    • +
    + +
  • Release Notes - Flowable - 7.2.0

    diff --git a/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/AppEngineConfiguration.java b/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/AppEngineConfiguration.java index aaf89694731..d3dd7605b27 100644 --- a/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/AppEngineConfiguration.java +++ b/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/AppEngineConfiguration.java @@ -69,6 +69,8 @@ import org.flowable.common.engine.impl.el.ExpressionManager; import org.flowable.common.engine.impl.interceptor.CommandInterceptor; import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; +import org.flowable.common.engine.impl.json.VariableJsonMapper; +import org.flowable.common.engine.impl.json.jackson3.Jackson3VariableJsonMapper; import org.flowable.common.engine.impl.persistence.deploy.DefaultDeploymentCache; import org.flowable.common.engine.impl.persistence.deploy.DeploymentCache; import org.flowable.common.engine.impl.persistence.entity.TableDataManager; @@ -156,6 +158,7 @@ public class AppEngineConfiguration extends AbstractBuildableEngineConfiguration */ protected boolean jsonVariableTypeTrackObjects = true; + protected VariableJsonMapper variableJsonMapper; protected BusinessCalendarManager businessCalendarManager; @@ -257,6 +260,14 @@ public void initMybatisTypeHandlers(Configuration configuration) { configuration.getTypeHandlerRegistry().register(VariableType.class, JdbcType.VARCHAR, new IbatisVariableTypeHandler(variableTypes)); } + @Override + public void initObjectMapper() { + super.initObjectMapper(); + if (variableJsonMapper == null) { + variableJsonMapper = new Jackson3VariableJsonMapper(objectMapper); + } + } + public void initExpressionManager() { if (expressionManager == null) { expressionManager = new DefaultExpressionManager(beans); @@ -408,9 +419,9 @@ public void initVariableTypes() { variableTypes.addType(new BigDecimalType()); variableTypes.addType(new BigIntegerType()); variableTypes.addType(new UUIDType()); - variableTypes.addType(new JsonType(getMaxLengthString(), variableLengthVerifier, objectMapper, jsonVariableTypeTrackObjects)); + variableTypes.addType(new JsonType(getMaxLengthString(), variableLengthVerifier, variableJsonMapper, jsonVariableTypeTrackObjects)); // longJsonType only needed for reading purposes - variableTypes.addType(JsonType.longJsonType(getMaxLengthString(), variableLengthVerifier, objectMapper, jsonVariableTypeTrackObjects)); + variableTypes.addType(JsonType.longJsonType(getMaxLengthString(), variableLengthVerifier, variableJsonMapper, jsonVariableTypeTrackObjects)); variableTypes.addType(new ByteArrayType(variableLengthVerifier)); variableTypes.addType(new EmptyCollectionType()); variableTypes.addType(new SerializableType(serializableVariableTypeTrackDeserializedObjects, variableLengthVerifier)); @@ -432,6 +443,7 @@ public void configureVariableServiceConfiguration() { this.variableServiceConfiguration.setMaxLengthString(this.getMaxLengthString()); this.variableServiceConfiguration.setSerializableVariableTypeTrackDeserializedObjects(this.isSerializableVariableTypeTrackDeserializedObjects()); + this.variableServiceConfiguration.setVariableJsonMapper(this.variableJsonMapper); } public void initVariableServiceConfiguration() { @@ -740,6 +752,17 @@ public AppEngineConfiguration setJsonVariableTypeTrackObjects(boolean jsonVariab return this; } + @Override + public VariableJsonMapper getVariableJsonMapper() { + return variableJsonMapper; + } + + @Override + public AppEngineConfiguration setVariableJsonMapper(VariableJsonMapper variableJsonMapper) { + this.variableJsonMapper = variableJsonMapper; + return this; + } + public boolean isDisableIdmEngine() { return disableIdmEngine; } diff --git a/modules/flowable-app-rest/pom.xml b/modules/flowable-app-rest/pom.xml index fd313961389..0d95f46a99f 100644 --- a/modules/flowable-app-rest/pom.xml +++ b/modules/flowable-app-rest/pom.xml @@ -756,6 +756,11 @@ spring-boot-kafka + + org.springframework.boot + spring-boot-jackson2 + + com.h2database h2 diff --git a/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJackson2JsonVariableTest.java b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJackson2JsonVariableTest.java new file mode 100644 index 00000000000..0f5bfa423f2 --- /dev/null +++ b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJackson2JsonVariableTest.java @@ -0,0 +1,153 @@ +/* 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 org.flowable.rest.app.variable; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +import org.flowable.cmmn.api.CmmnRuntimeService; +import org.flowable.cmmn.api.runtime.CaseInstance; +import org.flowable.cmmn.engine.test.CmmnDeployment; +import org.flowable.cmmn.spring.impl.test.FlowableCmmnSpringExtension; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.test.Deployment; +import org.flowable.spring.impl.test.FlowableSpringExtension; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.TestRestTemplate; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; + +import net.javacrumbs.jsonunit.core.Option; + +/** + * @author Filip Hrisafov + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + properties = { + "flowable.variable-json-mapper=jackson2" + }) +@ExtendWith({ + FlowableCmmnSpringExtension.class, + FlowableSpringExtension.class, +}) +@AutoConfigureTestRestTemplate +public class RestJackson2JsonVariableTest { + + @Autowired + protected RuntimeService runtimeService; + + @Autowired + protected CmmnRuntimeService cmmnRuntimeService; + + @Autowired + protected TestRestTemplate restTemplate; + + @Autowired + protected ObjectMapper objectMapper; + + @Test + @Deployment(resources = "oneTaskProcess.bpmn20.xml") + void createProcessWithJsonVariable() { + ObjectNode request = objectMapper.createObjectNode() + .put("processDefinitionKey", "oneTaskProcess") + .put("returnVariables", true); + ArrayNode variables = request.putArray("variables"); + variables.addObject() + .put("name", "customer") + .put("type", "json") + .putObject("value") + .put("name", "Kermit"); + ResponseEntity response = restTemplate.withBasicAuth("rest-admin", "test") + .postForEntity("/service/runtime/process-instances", request, JsonNode.class); + + assertThat(response.getStatusCode()).as(response.toString()).isEqualTo(HttpStatus.CREATED); + + assertThatJson(response.getBody()) + .when(Option.IGNORING_ARRAY_ORDER) + .inPath("variables") + .isEqualTo(""" + [ + { + name: 'customer', + type: 'json', + value: { + 'name': 'Kermit' + }, + scope: 'local' + } + ] + """); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("oneTaskProcess") + .includeProcessVariables() + .singleResult(); + + assertThat(processInstance.getProcessVariables()) + .extractingByKey("customer") + .isInstanceOf(com.fasterxml.jackson.databind.node.ObjectNode.class); + } + + @Test + @CmmnDeployment(resources = "oneHumanTaskCase.cmmn") + void createCaseWithJsonVariable() { + ObjectNode request = objectMapper.createObjectNode() + .put("caseDefinitionKey", "oneHumanTaskCase") + .put("returnVariables", true); + ArrayNode variables = request.putArray("variables"); + variables.addObject() + .put("name", "customer") + .put("type", "json") + .putObject("value") + .put("name", "Kermit"); + ResponseEntity response = restTemplate.withBasicAuth("rest-admin", "test") + .postForEntity("/cmmn-api/cmmn-runtime/case-instances", request, JsonNode.class); + + assertThat(response.getStatusCode()).as(response.toString()).isEqualTo(HttpStatus.CREATED); + + assertThatJson(response.getBody()) + .when(Option.IGNORING_ARRAY_ORDER) + .inPath("variables") + .isEqualTo(""" + [ + { + name: 'customer', + type: 'json', + value: { + 'name': 'Kermit' + }, + scope: 'local' + } + ] + """); + + CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceQuery() + .caseDefinitionKey("oneHumanTaskCase") + .includeCaseVariables() + .singleResult(); + + assertThat(caseInstance.getCaseVariables()) + .extractingByKey("customer") + .isInstanceOf(com.fasterxml.jackson.databind.node.ObjectNode.class); + } + +} diff --git a/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJsonVariableTest.java b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJsonVariableTest.java new file mode 100644 index 00000000000..c963403318c --- /dev/null +++ b/modules/flowable-app-rest/src/test/java/org/flowable/rest/app/variable/RestJsonVariableTest.java @@ -0,0 +1,150 @@ +/* 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 org.flowable.rest.app.variable; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +import org.flowable.cmmn.api.CmmnRuntimeService; +import org.flowable.cmmn.api.runtime.CaseInstance; +import org.flowable.cmmn.engine.test.CmmnDeployment; +import org.flowable.cmmn.spring.impl.test.FlowableCmmnSpringExtension; +import org.flowable.engine.RuntimeService; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.test.Deployment; +import org.flowable.spring.impl.test.FlowableSpringExtension; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.resttestclient.TestRestTemplate; +import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; + +import net.javacrumbs.jsonunit.core.Option; + +/** + * @author Filip Hrisafov + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ExtendWith({ + FlowableCmmnSpringExtension.class, + FlowableSpringExtension.class, +}) +@AutoConfigureTestRestTemplate +public class RestJsonVariableTest { + + @Autowired + protected RuntimeService runtimeService; + + @Autowired + protected CmmnRuntimeService cmmnRuntimeService; + + @Autowired + protected TestRestTemplate restTemplate; + + @Autowired + protected ObjectMapper objectMapper; + + @Test + @Deployment(resources = "oneTaskProcess.bpmn20.xml") + void createProcessWithJsonVariable() { + ObjectNode request = objectMapper.createObjectNode() + .put("processDefinitionKey", "oneTaskProcess") + .put("returnVariables", true); + ArrayNode variables = request.putArray("variables"); + variables.addObject() + .put("name", "customer") + .put("type", "json") + .putObject("value") + .put("name", "Kermit"); + ResponseEntity response = restTemplate.withBasicAuth("rest-admin", "test") + .postForEntity("/service/runtime/process-instances", request, JsonNode.class); + + assertThat(response.getStatusCode()).as(response.toString()).isEqualTo(HttpStatus.CREATED); + + assertThatJson(response.getBody()) + .when(Option.IGNORING_ARRAY_ORDER) + .inPath("variables") + .isEqualTo(""" + [ + { + name: 'customer', + type: 'json', + value: { + 'name': 'Kermit' + }, + scope: 'local' + } + ] + """); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processDefinitionKey("oneTaskProcess") + .includeProcessVariables() + .singleResult(); + + assertThat(processInstance.getProcessVariables()) + .extractingByKey("customer") + .isInstanceOf(ObjectNode.class); + } + + @Test + @CmmnDeployment(resources = "oneHumanTaskCase.cmmn") + void createCaseWithJsonVariable() { + ObjectNode request = objectMapper.createObjectNode() + .put("caseDefinitionKey", "oneHumanTaskCase") + .put("returnVariables", true); + ArrayNode variables = request.putArray("variables"); + variables.addObject() + .put("name", "customer") + .put("type", "json") + .putObject("value") + .put("name", "Kermit"); + ResponseEntity response = restTemplate.withBasicAuth("rest-admin", "test") + .postForEntity("/cmmn-api/cmmn-runtime/case-instances", request, JsonNode.class); + + assertThat(response.getStatusCode()).as(response.toString()).isEqualTo(HttpStatus.CREATED); + + assertThatJson(response.getBody()) + .when(Option.IGNORING_ARRAY_ORDER) + .inPath("variables") + .isEqualTo(""" + [ + { + name: 'customer', + type: 'json', + value: { + 'name': 'Kermit' + }, + scope: 'local' + } + ] + """); + + CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceQuery() + .caseDefinitionKey("oneHumanTaskCase") + .includeCaseVariables() + .singleResult(); + + assertThat(caseInstance.getCaseVariables()) + .extractingByKey("customer") + .isInstanceOf(ObjectNode.class); + } + +} diff --git a/modules/flowable-cmmn-engine/pom.xml b/modules/flowable-cmmn-engine/pom.xml index 8a3a9233ab2..93b426aa4ae 100644 --- a/modules/flowable-cmmn-engine/pom.xml +++ b/modules/flowable-cmmn-engine/pom.xml @@ -190,6 +190,11 @@ nashorn-core test + + com.fasterxml.jackson.core + jackson-databind + test + diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/CmmnEngineConfiguration.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/CmmnEngineConfiguration.java index 54790997bea..c95f68a580f 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/CmmnEngineConfiguration.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/CmmnEngineConfiguration.java @@ -255,6 +255,8 @@ import org.flowable.common.engine.impl.interceptor.CommandInterceptor; import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; import org.flowable.common.engine.impl.javax.el.ELResolver; +import org.flowable.common.engine.impl.json.VariableJsonMapper; +import org.flowable.common.engine.impl.json.jackson3.Jackson3VariableJsonMapper; import org.flowable.common.engine.impl.persistence.deploy.DefaultDeploymentCache; import org.flowable.common.engine.impl.persistence.deploy.DeploymentCache; import org.flowable.common.engine.impl.persistence.entity.TableDataManager; @@ -514,6 +516,8 @@ public class CmmnEngineConfiguration extends AbstractBuildableEngineConfiguratio */ protected boolean jsonVariableTypeTrackObjects = true; + protected VariableJsonMapper variableJsonMapper; + protected List caseInstanceMigrationCallbacks; // Set Http Client config defaults @@ -824,6 +828,14 @@ public void initMybatisTypeHandlers(Configuration configuration) { configuration.getTypeHandlerRegistry().register(VariableType.class, JdbcType.VARCHAR, new IbatisVariableTypeHandler(variableTypes)); } + @Override + public void initObjectMapper() { + super.initObjectMapper(); + if (variableJsonMapper == null) { + variableJsonMapper = new Jackson3VariableJsonMapper(objectMapper); + } + } + public void initFunctionDelegates() { if (flowableFunctionDelegates == null) { flowableFunctionDelegates = new ArrayList<>(); @@ -1414,9 +1426,9 @@ public void initVariableTypes() { variableTypes.addType(new BigDecimalType()); variableTypes.addType(new BigIntegerType()); variableTypes.addType(new UUIDType()); - variableTypes.addType(new JsonType(getMaxLengthString(), variableLengthVerifier, objectMapper, jsonVariableTypeTrackObjects)); + variableTypes.addType(new JsonType(getMaxLengthString(), variableLengthVerifier, variableJsonMapper, jsonVariableTypeTrackObjects)); // longJsonType only needed for reading purposes - variableTypes.addType(JsonType.longJsonType(getMaxLengthString(), variableLengthVerifier, objectMapper, jsonVariableTypeTrackObjects)); + variableTypes.addType(JsonType.longJsonType(getMaxLengthString(), variableLengthVerifier, variableJsonMapper, jsonVariableTypeTrackObjects)); variableTypes.addType(new CmmnAggregatedVariableType(this)); variableTypes.addType(new ByteArrayType(variableLengthVerifier)); variableTypes.addType(new EmptyCollectionType()); @@ -1466,6 +1478,7 @@ public void configureVariableServiceConfiguration() { this.variableServiceConfiguration.setMaxLengthString(this.getMaxLengthString()); this.variableServiceConfiguration.setSerializableVariableTypeTrackDeserializedObjects(this.isSerializableVariableTypeTrackDeserializedObjects()); + this.variableServiceConfiguration.setVariableJsonMapper(this.variableJsonMapper); this.variableServiceConfiguration.setLoggingSessionEnabled(isLoggingSessionEnabled()); this.variableServiceConfiguration.setConfigurators(variableServiceConfigurators); } @@ -2967,6 +2980,17 @@ public CmmnEngineConfiguration setJsonVariableTypeTrackObjects(boolean jsonVaria return this; } + @Override + public VariableJsonMapper getVariableJsonMapper() { + return variableJsonMapper; + } + + @Override + public CmmnEngineConfiguration setVariableJsonMapper(VariableJsonMapper variableJsonMapper) { + this.variableJsonMapper = variableJsonMapper; + return this; + } + public CaseDiagramGenerator getCaseDiagramGenerator() { return caseDiagramGenerator; } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java index 70793c524de..a1664fbd5ca 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/delegate/JsonPlanItemVariableAggregator.java @@ -24,6 +24,10 @@ import org.flowable.cmmn.engine.CmmnEngineConfiguration; import org.flowable.cmmn.model.VariableAggregationDefinition; import org.flowable.common.engine.api.FlowableException; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; +import org.flowable.common.engine.impl.json.VariableJsonMapper; +import org.flowable.common.engine.impl.util.JsonUtil; import org.flowable.variable.api.persistence.entity.VariableInstance; import org.flowable.variable.service.VariableService; import org.flowable.variable.service.VariableServiceConfiguration; @@ -47,11 +51,6 @@ import org.flowable.variable.service.impl.types.StringType; import org.flowable.variable.service.impl.types.UUIDType; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; -import tools.jackson.databind.node.ArrayNode; -import tools.jackson.databind.node.ObjectNode; - /** * @author Filip Hrisafov */ @@ -65,7 +64,8 @@ public JsonPlanItemVariableAggregator(CmmnEngineConfiguration cmmnEngineConfigur @Override public Object aggregateSingleVariable(DelegatePlanItemInstance planItemInstance, PlanItemVariableAggregatorContext context) { - ObjectNode objectNode = cmmnEngineConfiguration.getObjectMapper().createObjectNode(); + VariableJsonMapper jsonMapper = cmmnEngineConfiguration.getVariableJsonMapper(); + FlowableObjectNode objectNode = jsonMapper.createObjectNode(); VariableServiceConfiguration variableServiceConfiguration = cmmnEngineConfiguration.getVariableServiceConfiguration(); VariableService variableService = variableServiceConfiguration.getVariableService(); @@ -108,7 +108,7 @@ public Object aggregateSingleVariable(DelegatePlanItemInstance planItemInstance, objectNode.put(targetVarName, (String) varInstance.getValue()); break; case JsonType.TYPE_NAME: - objectNode.set(targetVarName, (JsonNode) varInstance.getValue()); + objectNode.set(targetVarName, JsonUtil.asFlowableJsonNode(varInstance.getValue())); break; case BooleanType.TYPE_NAME: objectNode.put(targetVarName, (Boolean) varInstance.getValue()); @@ -153,8 +153,8 @@ public Object aggregateSingleVariable(DelegatePlanItemInstance planItemInstance, if (PlanItemVariableAggregatorContext.OVERVIEW.equals(context.getState())) { // We can only use the aggregated variable if we are in an overview state Object value = varInstance.getValue(); - if (value instanceof JsonNode) { - objectNode.set(targetVarName, (JsonNode) value); + if (jsonMapper.isJsonNode(value)) { + objectNode.set(targetVarName, JsonUtil.asFlowableJsonNode(value)); } else { throw new FlowableException("Cannot aggregate overview variable: " + varInstance); } @@ -167,18 +167,18 @@ public Object aggregateSingleVariable(DelegatePlanItemInstance planItemInstance, } } - return objectNode; + return objectNode.getImplementationValue(); } @Override public Object aggregateMultiVariables(DelegatePlanItemInstance planItemInstance, List instances, PlanItemVariableAggregatorContext context) { - ObjectMapper objectMapper = cmmnEngineConfiguration.getObjectMapper(); - ArrayNode arrayNode = objectMapper.createArrayNode(); + VariableJsonMapper objectMapper = cmmnEngineConfiguration.getVariableJsonMapper(); + FlowableArrayNode arrayNode = objectMapper.createArrayNode(); for (VariableInstance instance : instances) { - arrayNode.add((JsonNode) instance.getValue()); + arrayNode.add(JsonUtil.asFlowableJsonNode(instance.getValue())); } - return arrayNode; + return arrayNode.getImplementationValue(); } } diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java index 0a8956aa09f..44d71b03cfd 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/IOParameterUtil.java @@ -21,11 +21,10 @@ import org.flowable.common.engine.api.delegate.Expression; import org.flowable.common.engine.api.variable.VariableContainer; import org.flowable.common.engine.impl.el.ExpressionManager; +import org.flowable.common.engine.impl.util.JsonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.jackson.databind.JsonNode; - /** * @author Filip Hrisafov */ @@ -64,8 +63,8 @@ protected static void processParameters(List parameters, VariableCo value = sourceContainer.getVariable(parameter.getSource()); } - if (value != null && value instanceof JsonNode) { - value = ((JsonNode) value).deepCopy(); + if (value != null) { + value = JsonUtil.deepCopyIfJson(value); } String variableName = null; diff --git a/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationJackson2Test.java b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationJackson2Test.java new file mode 100644 index 00000000000..3c158ff551a --- /dev/null +++ b/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationJackson2Test.java @@ -0,0 +1,581 @@ +/* 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 org.flowable.cmmn.test.itemcontrol; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.Month; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.flowable.cmmn.api.runtime.CaseInstance; +import org.flowable.cmmn.api.runtime.PlanItemInstance; +import org.flowable.cmmn.engine.CmmnEngineConfiguration; +import org.flowable.cmmn.engine.impl.util.CommandContextUtil; +import org.flowable.cmmn.engine.impl.variable.CmmnAggregatedVariableType; +import org.flowable.cmmn.engine.test.CmmnDeployment; +import org.flowable.cmmn.engine.test.impl.CmmnHistoryTestHelper; +import org.flowable.cmmn.test.EngineConfigurer; +import org.flowable.cmmn.test.impl.CustomCmmnConfigurationFlowableTestCase; +import org.flowable.common.engine.api.scope.ScopeTypes; +import org.flowable.common.engine.impl.history.HistoryLevel; +import org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper; +import org.flowable.task.api.Task; +import org.flowable.variable.api.history.HistoricVariableInstance; +import org.flowable.variable.api.persistence.entity.VariableInstance; +import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; +import org.flowable.variable.service.impl.types.JsonType; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; + +/** + * @author Joram Barrez + * @author Filip Hrisafov + */ +public class RepetitionVariableAggregationJackson2Test extends CustomCmmnConfigurationFlowableTestCase { + + @EngineConfigurer + protected static void configureConfiguration(CmmnEngineConfiguration cmmnEngineConfiguration) { + cmmnEngineConfiguration.setVariableJsonMapper(new Jackson2VariableJsonMapper(new ObjectMapper())); + } + + @Test + @CmmnDeployment(resources = "org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.testSequentialRepeatingUserTask.cmmn") + public void testSequentialRepeatingUserTask() { + CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder() + .caseDefinitionKey("repeatingTask") + .variable("nrOfLoops", 3) + .variable("otherVariable", "Hello World") + .start(); + + ArrayNode reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: null } + ] + """); + + Task task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("My Task").singleResult(); + + assertThat(cmmnTaskService.getVariable(task.getId(), "repetitionCounter")).isEqualTo(1); + Map variables = new HashMap<>(); + variables.put("approved", false); + variables.put("description", "description task 0"); + cmmnTaskService.setAssignee(task.getId(), "userOne"); + + reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: 'userOne' } + ] + """); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(CmmnAggregatedVariableType.TYPE_NAME); + assertThatJson(historicReviews.getValue()) + .isEqualTo(""" + [ + { userId: 'userOne' } + ] + """); + } + + cmmnTaskService.complete(task.getId(), variables); + + reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: 'userOne', approved : false, description : 'description task 0' }, + { userId: null } + ] + """); + + assertVariablesNotVisible(caseInstance); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(CmmnAggregatedVariableType.TYPE_NAME); + Object historicValue = historicReviews.getValue(); + assertThat(historicValue).isInstanceOf(JsonNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { userId: 'userOne', approved : false, description : 'description task 0' }, + { userId: null } + ] + """); + } + + task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("My Task").singleResult(); + assertThat(cmmnTaskService.getVariable(task.getId(), "repetitionCounter")).isEqualTo(2); + variables.put("approved", true); + variables.put("description", "description task 1"); + cmmnTaskService.setAssignee(task.getId(), "userTwo"); + cmmnTaskService.complete(task.getId(), variables); + + task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("My Task").singleResult(); + assertThat(cmmnTaskService.getVariable(task.getId(), "repetitionCounter")).isEqualTo(3); + variables.put("approved", false); + variables.put("description", "description task 2"); + cmmnTaskService.setAssignee(task.getId(), "userThree"); + cmmnTaskService.complete(task.getId(), variables); + + assertVariablesNotVisible(caseInstance); + + reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: 'userOne', approved : false, description : 'description task 0' }, + { userId: 'userTwo', approved : true, description : 'description task 1' }, + { userId: 'userThree', approved : false, description : 'description task 2' } + ] + """); + + assertNoAggregatedVariables(); + VariableInstance reviewsVarInstance = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); + assertThat(reviewsVarInstance.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + Object historicValue = historicReviews.getValue(); + assertThat(historicValue).isInstanceOf(JsonNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { userId: 'userOne', approved : false, description : 'description task 0' }, + { userId: 'userTwo', approved : true, description : 'description task 1' }, + { userId: 'userThree', approved : false, description : 'description task 2' } + ] + """); + } + + } + + @Test + @CmmnDeployment(resources = "org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.testSequentialRepeatingUserTaskWithoutCreateOverview.cmmn") + public void testSequentialRepeatingUserTaskWithoutCreateOverview() { + CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder() + .caseDefinitionKey("repeatingTask") + .variable("nrOfLoops", 3) + .variable("otherVariable", "Hello World") + .start(); + + VariableInstance reviews = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); + + assertThat(reviews).isNull(); + + Task task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("My Task").singleResult(); + + Map variables = new HashMap<>(); + variables.put("approved", false); + variables.put("description", "description task 0"); + cmmnTaskService.setAssignee(task.getId(), "userOne"); + + reviews = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); + + assertThat(reviews).isNull(); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNull(); + } + + cmmnTaskService.complete(task.getId(), variables); + + reviews = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); + + assertThat(reviews).isNull(); + + assertVariablesNotVisible(caseInstance); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNull(); + } + + task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("My Task").singleResult(); + variables.put("approved", true); + variables.put("description", "description task 1"); + cmmnTaskService.setAssignee(task.getId(), "userTwo"); + cmmnTaskService.complete(task.getId(), variables); + + task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("My Task").singleResult(); + variables.put("approved", false); + variables.put("description", "description task 2"); + cmmnTaskService.setAssignee(task.getId(), "userThree"); + cmmnTaskService.complete(task.getId(), variables); + + assertVariablesNotVisible(caseInstance); + + reviews = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); + + assertThat(reviews).isNotNull(); + assertThat(reviews.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + Object value = reviews.getValue(); + assertThat(value).isInstanceOf(JsonNode.class); + assertThatJson(value) + .isEqualTo(""" + [ + { userId: 'userOne', approved : false, description : 'description task 0' }, + { userId: 'userTwo', approved : true, description : 'description task 1' }, + { userId: 'userThree', approved : false, description : 'description task 2' } + ] + """); + + assertNoAggregatedVariables(); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + Object historicValue = historicReviews.getValue(); + assertThat(historicValue).isInstanceOf(JsonNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { userId: 'userOne', approved : false, description : 'description task 0' }, + { userId: 'userTwo', approved : true, description : 'description task 1' }, + { userId: 'userThree', approved : false, description : 'description task 2' } + ] + """); + } + + } + + @Test + @CmmnDeployment(resources = "org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.testParallelRepeatingUserTask.cmmn") + public void testParallelRepeatingUserTask() { + CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder() + .caseDefinitionKey("repeatingTask") + .variable("otherVariable", "Hello World") + .variable("myCollection", Arrays.asList("a", "b", "c", "d")) + .start(); + + Task task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("Task A").singleResult(); + cmmnTaskService.complete(task.getId()); + + ArrayNode reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: null }, + { userId: null }, + { userId: null }, + { userId: null } + ] + """); + + List tasks = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("Task B") + .orderByTaskPriority().asc() + .list(); + assertThat(tasks).hasSize(4); + + Map variables = new HashMap<>(); + variables.put("approved", true); + variables.put("description", "description task 3"); + cmmnTaskService.setAssignee(tasks.get(3).getId(), "userThree"); + + reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: null }, + { userId: null }, + { userId: null }, + { userId: 'userThree' } + ] + """); + + cmmnTaskService.complete(tasks.get(3).getId(), variables); + + reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: null }, + { userId: null }, + { userId: null }, + { userId: 'userThree', approved : true, description : 'description task 3' } + ] + """); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(CmmnAggregatedVariableType.TYPE_NAME); + Object historicValue = historicReviews.getValue(); + assertThat(historicValue).isInstanceOf(JsonNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { userId: null }, + { userId: null }, + { userId: null }, + { userId: 'userThree', approved : true, description : 'description task 3' } + ] + """); + } + + assertVariablesNotVisible(caseInstance); + + variables.put("approved", true); + variables.put("description", "description task 1"); + cmmnTaskService.setAssignee(tasks.get(1).getId(), "userOne"); + cmmnTaskService.complete(tasks.get(1).getId(), variables); + + variables.put("approved", false); + variables.put("description", "description task 2"); + cmmnTaskService.setAssignee(tasks.get(2).getId(), "userTwo"); + cmmnTaskService.complete(tasks.get(2).getId(), variables); + + variables.put("approved", false); + variables.put("description", "description task 0"); + cmmnTaskService.setAssignee(tasks.get(0).getId(), "userZero"); + cmmnTaskService.complete(tasks.get(0).getId(), variables); + + assertVariablesNotVisible(caseInstance); + + reviews = (ArrayNode) cmmnRuntimeService.getVariable(caseInstance.getId(), "reviews"); + + assertThatJson(reviews) + .isEqualTo( + """ + [ + { userId: 'userZero', approved : false, description : 'description task 0' }, + { userId: 'userOne', approved : true, description : 'description task 1' }, + { userId: 'userTwo', approved : false, description : 'description task 2' }, + { userId: 'userThree', approved : true, description : 'description task 3' } + ] + """); + + assertNoAggregatedVariables(); + VariableInstance reviewsVarInstance = cmmnRuntimeService.getVariableInstance(caseInstance.getId(), "reviews"); + assertThat(reviewsVarInstance.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + Object historicValue = historicReviews.getValue(); + assertThat(historicValue).isInstanceOf(JsonNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { userId: 'userZero', approved : false, description : 'description task 0' }, + { userId: 'userOne', approved : true, description : 'description task 1' }, + { userId: 'userTwo', approved : false, description : 'description task 2' }, + { userId: 'userThree', approved : true, description : 'description task 3' } + ] + """); + } + + } + + @Test + @CmmnDeployment(resources = "org/flowable/cmmn/test/itemcontrol/RepetitionVariableAggregationTest.testParallelRepeatingUserTaskVariableTypes.cmmn") + public void testParallelRepeatingUserTaskVariableTypes() { + CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder() + .caseDefinitionKey("repeatingTask") + .variable("otherVariable", "Hello World") + .variable("myCollection", Arrays.asList("a", "b", "c", "d")) + .start(); + + Task task = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("Task A").singleResult(); + cmmnTaskService.complete(task.getId()); + + List tasks = cmmnTaskService.createTaskQuery().caseInstanceId(caseInstance.getId()).taskName("Task B") + .orderByTaskPriority().asc() + .list(); + assertThat(tasks).hasSize(4); + + Map variables = new HashMap<>(); + variables.put("description", "Description for task with LocalDate"); + variables.put("score", 10); + variables.put("passed", true); + variables.put("location", "Springfield"); + variables.put("startTime", LocalDate.of(2020, Month.DECEMBER, 8)); + cmmnTaskService.complete(tasks.get(0).getId(), variables); + + variables = new HashMap<>(); + variables.put("description", "Description for task with LocalDateTime"); + variables.put("score", 60.55); + variables.put("passed", false); + variables.put("location", null); + variables.put("startTime", LocalDate.of(2020, Month.DECEMBER, 8).atTime(10, 20, 30)); + cmmnTaskService.complete(tasks.get(1).getId(), variables); + + variables = new HashMap<>(); + variables.put("description", "Description for task with Instant"); + variables.put("score", (short) 100); + variables.put("passed", true); + variables.put("location", "Zurich"); + variables.put("startTime", Instant.parse("2020-12-08T08:20:45.585Z")); + cmmnTaskService.complete(tasks.get(2).getId(), variables); + + variables = new HashMap<>(); + variables.put("description", "Description for task with Date"); + variables.put("score", 1234L); + variables.put("passed", true); + variables.put("location", "Test Valley"); + variables.put("startTime", Instant.parse("2020-12-12T12:24:15.155Z")); + cmmnTaskService.complete(tasks.get(3).getId(), variables); + + assertNoAggregatedVariables(); + Object results = cmmnRuntimeService.getVariable(caseInstance.getId(), "results"); + assertThat(results).isInstanceOf(JsonNode.class); + assertThatJson(results) + .isEqualTo(""" + [ + { + description: 'Description for task with LocalDate', + score: 10, + passed: true, + location: 'Springfield', + startTime: '2020-12-08' + }, + { + description: 'Description for task with LocalDateTime', + score: 60.55, + passed: false, + location: null, + startTime: '2020-12-08T10:20:30' + }, + { + description: 'Description for task with Instant', + score: 100, + passed: true, + location: 'Zurich', + startTime: '2020-12-08T08:20:45.585Z' + }, + { + description: 'Description for task with Date', + score: 1234, + passed: true, + location: 'Test Valley', + startTime: '2020-12-12T12:24:15.155Z' + } + ] + """); + + if (CmmnHistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, cmmnEngineConfiguration)) { + HistoricVariableInstance historicReviews = cmmnHistoryService.createHistoricVariableInstanceQuery() + .caseInstanceId(caseInstance.getId()) + .variableName("results") + .singleResult(); + assertThat(historicReviews).isNotNull(); + Object historicValue = historicReviews.getValue(); + assertThat(historicValue).isInstanceOf(JsonNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { + description: 'Description for task with LocalDate', + score: 10, + passed: true, + location: 'Springfield', + startTime: '2020-12-08' + }, + { + description: 'Description for task with LocalDateTime', + score: 60.55, + passed: false, + location: null, + startTime: '2020-12-08T10:20:30' + }, + { + description: 'Description for task with Instant', + score: 100, + passed: true, + location: 'Zurich', + startTime: '2020-12-08T08:20:45.585Z' + }, + { + description: 'Description for task with Date', + score: 1234, + passed: true, + location: 'Test Valley', + startTime: '2020-12-12T12:24:15.155Z' + } + ] + """); + } + } + + protected void assertVariablesNotVisible(CaseInstance caseInstance) { + + assertThat(cmmnRuntimeService.getVariable(caseInstance.getId(), "otherVariable")).isNotNull(); + + assertThat(cmmnRuntimeService.getVariable(caseInstance.getId(), "approved")).isNull(); + assertThat(cmmnRuntimeService.getVariable(caseInstance.getId(), "description")).isNull(); + + // Gathered variables shouldn't be visible for any execution + List planItemInstances = cmmnRuntimeService.createPlanItemInstanceQuery().caseInstanceId(caseInstance.getId()).list(); + for (PlanItemInstance planItemInstance : planItemInstances) { + assertThat(cmmnRuntimeService.getLocalVariable(planItemInstance.getId(), "approved")).isNull(); + assertThat(cmmnRuntimeService.getLocalVariable(planItemInstance.getId(), "description")).isNull(); + } + + } + + protected void assertNoAggregatedVariables() { + List variableInstanceEntities = cmmnEngineConfiguration.getCommandExecutor() + .execute(commandContext -> CommandContextUtil.getCmmnEngineConfiguration(commandContext) + .getVariableServiceConfiguration() + .getVariableService() + .createInternalVariableInstanceQuery() + .scopeType(ScopeTypes.CMMN_VARIABLE_AGGREGATION) + .list()); + assertThat(variableInstanceEntities).isEmpty(); + } + +} diff --git a/modules/flowable-common-rest/pom.xml b/modules/flowable-common-rest/pom.xml index cb04bb85ade..d2ccdfc5106 100644 --- a/modules/flowable-common-rest/pom.xml +++ b/modules/flowable-common-rest/pom.xml @@ -39,6 +39,11 @@ tools.jackson.core jackson-databind + + com.fasterxml.jackson.core + jackson-databind + true + diff --git a/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/Jackson2JsonObjectRestVariableConverter.java b/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/Jackson2JsonObjectRestVariableConverter.java new file mode 100644 index 00000000000..88cc248a141 --- /dev/null +++ b/modules/flowable-common-rest/src/main/java/org/flowable/common/rest/variable/Jackson2JsonObjectRestVariableConverter.java @@ -0,0 +1,64 @@ +/* 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 org.flowable.common.rest.variable; + +import org.flowable.common.engine.api.FlowableIllegalArgumentException; + +import com.fasterxml.jackson.databind.JsonNode; + +import tools.jackson.databind.ObjectMapper; + +/** + * Support for converting Jackson 2 JSON variables over REST. + * This is only for transforming Jackson 2 JSON variables from a variable to REST. + * It does not support receiving a JSON variable and transforming it as a Jackson 3 variable. + */ +@Deprecated +public class Jackson2JsonObjectRestVariableConverter implements RestVariableConverter { + + protected ObjectMapper objectMapper; + + public Jackson2JsonObjectRestVariableConverter(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + @Override + public String getRestTypeName() { + return "json"; + } + + @Override + public Class getVariableType() { + return JsonNode.class; + } + + @Override + public Object getVariableValue(EngineRestVariable result) { + throw new UnsupportedOperationException("Cannot get variable value for jackson 2"); + } + + @Override + public void convertVariableValue(Object variableValue, EngineRestVariable result) { + if (variableValue != null) { + if (!(variableValue instanceof JsonNode)) { + throw new FlowableIllegalArgumentException("Converter can only convert com.fasterxml.jackson.databind.JsonNode."); + } + tools.jackson.databind.JsonNode valueNode = objectMapper.readTree(variableValue.toString()); + result.setValue(valueNode); + } else { + result.setValue(null); + } + } + +} diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java index 1ce2346d538..eed905f05f9 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/CollectionUtil.java @@ -15,10 +15,9 @@ import java.util.Arrays; import java.util.Collection; +import org.flowable.common.engine.impl.util.JsonUtil; import org.springframework.util.CollectionUtils; -import tools.jackson.databind.node.ArrayNode; - /** * @author Yvo Swillens */ @@ -50,7 +49,7 @@ public static boolean allOf(Object collection, Object value) { } else if (DMNParseUtil.isJavaCollection(value)) { return targetCollection.containsAll((Collection) value); } else if (DMNParseUtil.isArrayNode(value)) { - Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode((ArrayNode) value); + Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode(JsonUtil.asFlowableArrayNode(value)); return valueCollection != null && targetCollection.containsAll(valueCollection); } else { Object formattedValue = DMNParseUtil.getFormattedValue(value, targetCollection); @@ -92,7 +91,7 @@ public static boolean noneOf(Object collection, Object value) { } else if (DMNParseUtil.isJavaCollection(value)) { return !CollectionUtils.containsAny(targetCollection, (Collection) value); } else if (DMNParseUtil.isArrayNode(value)) { - Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode((ArrayNode) value); + Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode(JsonUtil.asFlowableArrayNode(value)); return !CollectionUtils.containsAny(targetCollection, valueCollection); } else { Object formattedValue = DMNParseUtil.getFormattedValue(value, targetCollection); @@ -134,7 +133,7 @@ public static boolean anyOf(Object collection, Object value) { } else if (DMNParseUtil.isJavaCollection(value)) { return CollectionUtils.containsAny(targetCollection, (Collection) value); } else if (DMNParseUtil.isArrayNode(value)) { - Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode((ArrayNode) value); + Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode(JsonUtil.asFlowableArrayNode(value)); return CollectionUtils.containsAny(targetCollection, valueCollection); } else { Object formattedValue = DMNParseUtil.getFormattedValue(value, targetCollection); @@ -176,7 +175,7 @@ public static boolean notAllOf(Object collection, Object value) { } else if (DMNParseUtil.isJavaCollection(value)) { return !targetCollection.containsAll((Collection) value); } else if (DMNParseUtil.isArrayNode(value)) { - Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode((ArrayNode) value); + Collection valueCollection = DMNParseUtil.getCollectionFromArrayNode(JsonUtil.asFlowableArrayNode(value)); return valueCollection == null || !targetCollection.containsAll(valueCollection); } else { Object formattedValue = DMNParseUtil.getFormattedValue(value, targetCollection); @@ -201,7 +200,7 @@ protected static Collection getTargetCollection(Object collection, Object value) targetCollection = Arrays.asList(collection); } } else if (DMNParseUtil.isArrayNode(collection)) { - targetCollection = DMNParseUtil.getCollectionFromArrayNode((ArrayNode) collection); + targetCollection = DMNParseUtil.getCollectionFromArrayNode(JsonUtil.asFlowableArrayNode(collection)); } else { targetCollection = (Collection) collection; } diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java index 943641bbd88..3a97eef17fc 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/el/util/DMNParseUtil.java @@ -21,14 +21,14 @@ import java.util.stream.Stream; import org.flowable.common.engine.impl.joda.JodaDeprecationLogger; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.util.JsonUtil; import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.node.ArrayNode; - /** * @author Yvo Swillens */ @@ -45,7 +45,7 @@ public static boolean isJavaCollection(Object collection) { } public static boolean isArrayNode(Object collection) { - return ArrayNode.class.isAssignableFrom(collection.getClass()); + return JsonUtil.isArrayNode(collection); } public static boolean isParseableCollection(Object value) { @@ -67,33 +67,33 @@ public static Collection parseCollection(Object value, Object targetType) { return items; } - public static Collection getCollectionFromArrayNode(ArrayNode arrayNode) { + public static Collection getCollectionFromArrayNode(FlowableArrayNode arrayNode) { List values = new ArrayList<>(); - for (JsonNode node : arrayNode) { + for (FlowableJsonNode node : arrayNode) { values.add(getJsonValue(node)); } return values; } - protected static Object getJsonValue(JsonNode jsonNode) { - switch (jsonNode.getNodeType()) { - case ARRAY: - LOGGER.warn("Nested ArrayNodes not supported"); - case BINARY: - LOGGER.warn("Nested BinaryNodes not supported"); - case OBJECT: - LOGGER.warn("Nested ObjectNodes not supported"); - case POJO: - LOGGER.warn("Nested PojoNodes not supported"); - case BOOLEAN: - return jsonNode.booleanValue(); - case NULL: - return null; - case NUMBER: - return getNumberValue(jsonNode.numberValue().toString()); - default: - return jsonNode.textValue(); + protected static Object getJsonValue(FlowableJsonNode jsonNode) { + if (jsonNode.isBoolean()) { + return jsonNode.booleanValue(); + } + + if (jsonNode.isNull()) { + return null; } + + if (jsonNode.isNumber()) { + return getNumberValue(jsonNode.asString()); + } + + if (jsonNode.isString()) { + return jsonNode.asString(); + } + + LOGGER.warn("Json Node {} is not supported", jsonNode.getImplementationValue().getClass()); + return null; } protected static List split(String str, Class collectionType) { diff --git a/modules/flowable-engine-common/pom.xml b/modules/flowable-engine-common/pom.xml index 0a0deae0cc4..21f941d127c 100644 --- a/modules/flowable-engine-common/pom.xml +++ b/modules/flowable-engine-common/pom.xml @@ -81,6 +81,11 @@ org.springframework spring-beans + + com.fasterxml.jackson.core + jackson-databind + true + tools.jackson.core jackson-databind @@ -134,5 +139,10 @@ nashorn-core test + + net.javacrumbs.json-unit + json-unit-assertj + test + \ No newline at end of file diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfigurator.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfigurator.java index 66d36d239a9..ce4263b1cd1 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfigurator.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfigurator.java @@ -330,6 +330,7 @@ protected void initObjectMapper(AbstractEngineConfiguration engineConfiguration, protected void initVariableTypes(AbstractEngineConfiguration engineConfiguration, AbstractEngineConfiguration targetEngineConfiguration) { if (engineConfiguration instanceof HasVariableTypes && targetEngineConfiguration instanceof HasVariableTypes) { ((HasVariableTypes) targetEngineConfiguration).setVariableTypes(((HasVariableTypes) engineConfiguration).getVariableTypes()); + ((HasVariableTypes) targetEngineConfiguration).setVariableJsonMapper(((HasVariableTypes) engineConfiguration).getVariableJsonMapper()); } } diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/HasVariableTypes.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/HasVariableTypes.java index a7215d81c83..5d4517b8093 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/HasVariableTypes.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/HasVariableTypes.java @@ -12,6 +12,7 @@ */ package org.flowable.common.engine.impl; +import org.flowable.common.engine.impl.json.VariableJsonMapper; import org.flowable.variable.api.types.VariableTypes; /** @@ -23,4 +24,8 @@ public interface HasVariableTypes { AbstractEngineConfiguration setVariableTypes(VariableTypes variableTypes); + VariableJsonMapper getVariableJsonMapper(); + + AbstractEngineConfiguration setVariableJsonMapper(VariableJsonMapper variableJsonMapper); + } diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java index 63735ba48cf..84acc65f838 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/assignment/CandidateUtil.java @@ -18,19 +18,20 @@ import java.util.Collections; import org.apache.commons.lang3.StringUtils; - -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.node.ArrayNode; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.util.JsonUtil; public class CandidateUtil { public static Collection extractCandidates(Object value) { if (value instanceof Collection) { return (Collection) value; - } else if (value instanceof ArrayNode valueArrayNode) { + } else if (JsonUtil.isArrayNode(value)) { + FlowableArrayNode valueArrayNode = JsonUtil.asFlowableArrayNode(value); Collection candidates = new ArrayList<>(valueArrayNode.size()); - for (JsonNode node : valueArrayNode) { - candidates.add(node.asText()); + for (FlowableJsonNode node : valueArrayNode) { + candidates.add(node.asString()); } return candidates; diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java index e3932adae0d..f0c53b68d22 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/JsonNodeELResolver.java @@ -22,11 +22,10 @@ import org.flowable.common.engine.impl.javax.el.ELException; import org.flowable.common.engine.impl.javax.el.ELResolver; import org.flowable.common.engine.impl.javax.el.PropertyNotWritableException; - -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.node.ArrayNode; -import tools.jackson.databind.node.JsonNodeCreator; -import tools.jackson.databind.node.ObjectNode; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; +import org.flowable.common.engine.impl.util.JsonUtil; /** * Defines property resolution behavior on JsonNodes. @@ -85,37 +84,6 @@ public Class getCommonPropertyType(ELContext context, Object base) { */ @Override public Iterator getFeatureDescriptors(ELContext context, Object base) { - if (isResolvable(base)) { - JsonNode node = (JsonNode) base; - final Iterator keys = node.propertyNames().iterator(); - return new Iterator<>() { - @Override - public boolean hasNext() { - return keys.hasNext(); - } - - @Override - public FeatureDescriptor next() { - Object key = keys.next(); - FeatureDescriptor feature = new FeatureDescriptor(); - feature.setDisplayName(key == null ? "null" : key.toString()); - feature.setName(feature.getDisplayName()); - feature.setShortDescription(""); - feature.setExpert(true); - feature.setHidden(false); - feature.setPreferred(true); - feature.setValue(TYPE, key == null ? "null" : key.getClass()); - feature.setValue(RESOLVABLE_AT_DESIGN_TIME, true); - return feature; - - } - - @Override - public void remove() { - throw new UnsupportedOperationException("cannot remove"); - } - }; - } return null; } @@ -175,42 +143,43 @@ public Object getValue(ELContext context, Object base, Object property) { } Object result = null; if (isResolvable(base)) { - JsonNode resultNode = getResultNode((JsonNode) base, property, context); + FlowableJsonNode baseNode = JsonUtil.asFlowableJsonNode(base); + FlowableJsonNode resultNode = getResultNode(baseNode, property, context); if (resultNode != null && resultNode.isValueNode()) { if (resultNode.isBoolean()) { - result = resultNode.asBoolean(); + result = resultNode.booleanValue(); } else if (resultNode.isShort() || resultNode.isInt()) { - result = resultNode.asInt(); + result = resultNode.intValue(); } else if (resultNode.isLong()) { - result = resultNode.asLong(); + result = resultNode.longValue(); } else if (resultNode.isBigDecimal() || resultNode.isDouble() || resultNode.isFloat()) { - result = resultNode.asDouble(); - } else if (resultNode.isTextual()) { - result = resultNode.asText(); + result = resultNode.doubleValue(); + } else if (resultNode.isString()) { + result = resultNode.asString(); } else if (resultNode.isNull()) { result = null; } else { - result = resultNode.toString(); + result = resultNode.getImplementationValue().toString(); } - } else { - result = resultNode; + } else if (resultNode != null) { + result = resultNode.getImplementationValue(); } context.setPropertyResolved(true); } return result; } - protected JsonNode getResultNode(JsonNode base, Object property, ELContext context) { + protected FlowableJsonNode getResultNode(FlowableJsonNode base, Object property, ELContext context) { if (property instanceof String) { - JsonNode propertyNode = base.get((String) property); + FlowableJsonNode propertyNode = base.get((String) property); if (propertyNode != null) { return propertyNode; } - if (!readOnly && base instanceof ObjectNode && context.getContext(EvaluationState.class) == EvaluationState.WRITE) { + if (!readOnly && base instanceof FlowableObjectNode && context.getContext(EvaluationState.class) == EvaluationState.WRITE) { // The base does not have the requested property, so add it and return it, only if we are in write evaluation state - return ((ObjectNode) base).putObject((String) property); + return ((FlowableObjectNode) base).putObject((String) property); } return null; } else if (property instanceof Number) { @@ -266,7 +235,16 @@ public Object invoke(ELContext context, Object base, Object method, Class[] p if (method == null) { return null; } - if (params.length != 1) { + if (params.length == 0) { + String methodName = method.toString(); + if (methodName.equals("asString") || methodName.equals("asText")) { + String value = JsonUtil.asFlowableJsonNode(base).asString(); + context.setPropertyResolved(true); + return value; + } + return null; + + } else if (params.length != 1) { return null; } Object param = params[0]; @@ -276,15 +254,14 @@ public Object invoke(ELContext context, Object base, Object method, Class[] p int index = ((Long) param).intValue(); String methodName = method.toString(); - JsonNode node = (JsonNode) base; if (methodName.equals("path")) { - JsonNode valueNode = node.path(index); + FlowableJsonNode valueNode = JsonUtil.asFlowableJsonNode(base).path(index); context.setPropertyResolved(true); - return valueNode; + return valueNode.getImplementationValue(); } else if (methodName.equals("get")) { - JsonNode valueNode = node.get(index); + FlowableJsonNode valueNode = JsonUtil.asFlowableJsonNode(base).get(index); context.setPropertyResolved(true); - return valueNode; + return valueNode != null ? valueNode.getImplementationValue() : null; } return null; @@ -321,64 +298,85 @@ public void setValue(ELContext context, Object base, Object property, Object val if (context == null) { throw new NullPointerException("context is null"); } - if (base instanceof ObjectNode) { - setValue(context, (ObjectNode) base, property, value); - } else if (base instanceof ArrayNode) { - setValue(context, (ArrayNode) base, property, value); + if (isResolvable(base)) { + FlowableJsonNode baseNode = JsonUtil.asFlowableJsonNode(base); + if (baseNode instanceof FlowableObjectNode objectNode) { + setValue(context, objectNode, property, value); + } else if (baseNode instanceof FlowableArrayNode arrayNode) { + setValue(context, arrayNode, property, value); + } } } - protected void setValue(ELContext context, ObjectNode node, Object property, Object value) { + protected void setValue(ELContext context, FlowableObjectNode node, Object property, Object value) { if (readOnly) { throw new PropertyNotWritableException("resolver is read-only"); } - JsonNode jsonNode = createNode(node, value); - node.set(property.toString(), jsonNode); + + String propertyName = property.toString(); + if (value instanceof BigDecimal bigDecimal) { + node.put(propertyName, bigDecimal); + + } else if (value instanceof Boolean booleanValue) { + node.put(propertyName, booleanValue); + + } else if (value instanceof Integer integerValue) { + node.put(propertyName, integerValue); + } else if (value instanceof Long longValue) { + node.put(propertyName, longValue); + + } else if (value instanceof Double doubleValue) { + node.put(propertyName, doubleValue); + + } else if (JsonUtil.isJsonNode(value)) { + node.set(propertyName, JsonUtil.asFlowableJsonNode(value)); + } else if (value instanceof CharSequence charSequence) { + node.put(propertyName, charSequence.toString()); + } else if (value instanceof Date date) { + node.put(propertyName, date.toInstant().toString()); + } else if (value != null) { + node.put(propertyName, value.toString()); + + } else { + node.putNull(propertyName); + } context.setPropertyResolved(true); } - protected void setValue(ELContext context, ArrayNode node, Object property, Object value) { + protected void setValue(ELContext context, FlowableArrayNode node, Object property, Object value) { if (readOnly) { throw new PropertyNotWritableException("resolver is read-only"); } int index = toIndex(property); - JsonNode jsonNode = createNode(node, value); - node.set(index, jsonNode); - context.setPropertyResolved(true); - } - - protected JsonNode createNode(JsonNodeCreator nodeCreator, Object value) { - JsonNode jsonNode; - if (value instanceof BigDecimal) { - jsonNode = nodeCreator.numberNode((BigDecimal) value); - - } else if (value instanceof Boolean) { - jsonNode = nodeCreator.booleanNode((Boolean) value); - - } else if (value instanceof Integer) { - jsonNode = nodeCreator.numberNode((Integer) value); - } else if (value instanceof Long) { - jsonNode = nodeCreator.numberNode((Long) value); - - } else if (value instanceof Double) { - jsonNode = nodeCreator.numberNode((Double) value); - - } else if (value instanceof JsonNode) { - jsonNode = (JsonNode) value; - } else if (value instanceof CharSequence) { - jsonNode = nodeCreator.textNode(value.toString()); - } else if (value instanceof Date) { - jsonNode = nodeCreator.textNode(((Date) value).toInstant().toString()); + if (value instanceof BigDecimal bigDecimal) { + node.set(index, bigDecimal); + + } else if (value instanceof Boolean booleanValue) { + node.set(index, booleanValue); + + } else if (value instanceof Integer integerValue) { + node.set(index, integerValue); + } else if (value instanceof Long longValue) { + node.set(index, longValue); + + } else if (value instanceof Double doubleValue) { + node.set(index, doubleValue); + + } else if (JsonUtil.isJsonNode(value)) { + node.set(index, JsonUtil.asFlowableJsonNode(value)); + } else if (value instanceof CharSequence charSequence) { + node.set(index, charSequence.toString()); + } else if (value instanceof Date date) { + node.set(index, date.toInstant().toString()); } else if (value != null) { - jsonNode = nodeCreator.textNode(value.toString()); + node.set(index, value.toString()); } else { - jsonNode = nodeCreator.nullNode(); - + node.setNull(index); } - return jsonNode; + context.setPropertyResolved(true); } protected int toIndex(Object property) { @@ -406,6 +404,6 @@ protected int toIndex(Object property) { * @return base != null */ private final boolean isResolvable(Object base) { - return base instanceof JsonNode; + return JsonUtil.isJsonNode(base); } } diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java index feceea40536..a69c583948d 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsAnyExpressionFunction.java @@ -16,8 +16,8 @@ import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.api.variable.VariableContainer; - -import tools.jackson.databind.node.ArrayNode; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.util.JsonUtil; /** * Checks if the value of a variable (fetched using the variableName through the variable scope) contains any of the provided values. @@ -26,7 +26,7 @@ * * - {@link String}: following {@link StringUtils#contains(CharSequence, CharSequence)} semantics for one of the passed values * - {@link Collection}: following the {@link Collection#contains(Object)} for one of the passed values - * - {@link ArrayNode}: supports checking if the arraynode contains a JsonNode for the types that are supported as variable type + * - {@code Json Array}: supports checking if the array contains a JsonNode for the types that are supported as variable type * * When the variable value is null, false is returned in all cases. * When the variable value is not null, and the instance type is not one of the cases above, false will be returned. @@ -60,7 +60,8 @@ public static boolean containsAny(VariableContainer variableContainer, String va } return false; - } else if (variableValue instanceof ArrayNode arrayNodeVariableValue) { + } else if (JsonUtil.isArrayNode(variableValue)) { + FlowableArrayNode arrayNodeVariableValue = JsonUtil.asFlowableArrayNode(variableValue); for (Object value : values) { if (VariableContainsExpressionFunction.arrayNodeContains(arrayNodeVariableValue, value)) { return true; diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java index 3e7a8517f51..edcee32349b 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableContainsExpressionFunction.java @@ -17,9 +17,9 @@ import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.api.variable.VariableContainer; - -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.node.ArrayNode; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.util.JsonUtil; /** * Checks if the value of a variable (fetched using the variableName through the variable scope) contains all of the provided values. @@ -28,7 +28,7 @@ * * - {@link String}: following {@link StringUtils#contains(CharSequence, CharSequence)} semantics for all passed values * - {@link Collection}: following the {@link Collection#contains(Object)} for all passed values - * - {@link ArrayNode}: supports checking if the arraynode contains a JsonNode for the types that are supported as variable type + * - {@code Json Array}: supports checking if the array contains a JsonNode for the types that are supported as variable type * * When the variable value is null, false is returned in all cases. * When the variable value is not null, and the instance type is not one of the cases above, false will be returned. @@ -62,7 +62,8 @@ public static boolean contains(VariableContainer variableContainer, String varia } return true; - } else if (variableValue instanceof ArrayNode arrayNodeVariableValue) { + } else if (JsonUtil.isArrayNode(variableValue)) { + FlowableArrayNode arrayNodeVariableValue = JsonUtil.asFlowableArrayNode(variableValue); for (Object value : values) { if (!arrayNodeContains(arrayNodeVariableValue, value)) { return false; @@ -100,14 +101,14 @@ public static boolean collectionContains( Collection collection, Object value) { } } - public static boolean arrayNodeContains(ArrayNode arrayNode, Object value) { - Iterator iterator = arrayNode.iterator(); + public static boolean arrayNodeContains(FlowableArrayNode arrayNode, Object value) { + Iterator iterator = arrayNode.iterator(); while (iterator.hasNext()) { - JsonNode jsonNode = iterator.next(); + FlowableJsonNode jsonNode = iterator.next(); if (value == null && jsonNode.isNull()) { return true; } else if (value != null) { - if (value instanceof String && jsonNode.isTextual() && StringUtils.equals(jsonNode.asText(), (String) value)) { + if (value instanceof String && jsonNode.isString() && StringUtils.equals(jsonNode.asString(), (String) value)) { return true; } else if (value instanceof Number && jsonNode.isLong() && jsonNode.longValue() == ((Number) value).longValue()) { return true; diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java index 72df5dc3b2c..50bff1da6b2 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/function/VariableIsEmptyExpressionFunction.java @@ -18,8 +18,7 @@ import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.api.variable.VariableContainer; import org.flowable.common.engine.impl.util.CollectionUtil; - -import tools.jackson.databind.node.ArrayNode; +import org.flowable.common.engine.impl.util.JsonUtil; /** * Checks if the value of a variable (fetched using the variableName through the variable scope) is empty. @@ -28,7 +27,7 @@ * * - {@link String}: following {@link StringUtils#isEmpty(CharSequence)} semantics * - {@link Collection}: if the collection has no elements - * - {@link ArrayNode}: if the json array has no elements. + * - {@code Json Array}: if the json array has no elements. * * When the variable value is null, true is returned in all cases. * When the variable value is not null, and the instance type is not one of the cases above, false will be returned. @@ -53,8 +52,8 @@ public static boolean isEmpty(VariableContainer variableContainer, String variab } else if (variableValue instanceof Collection) { return CollectionUtil.isEmpty((Collection) variableValue); - } else if (variableValue instanceof ArrayNode) { - return ((ArrayNode) variableValue).size() == 0; + } else if (JsonUtil.isArrayNode(variableValue)) { + return JsonUtil.asFlowableArrayNode(variableValue).size() == 0; } else { return false; diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableArrayNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableArrayNode.java new file mode 100644 index 00000000000..419709e37de --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableArrayNode.java @@ -0,0 +1,66 @@ +/* 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 org.flowable.common.engine.impl.json; + +import java.math.BigDecimal; +import java.math.BigInteger; + +/** + * @author Filip Hrisafov + */ +public interface FlowableArrayNode extends FlowableJsonNode, Iterable { + + void set(int index, String value); + + void set(int index, Boolean value); + + void set(int index, Short value); + + void set(int index, Integer value); + + void set(int index, Long value); + + void set(int index, Double value); + + void set(int index, BigDecimal value); + + void set(int index, BigInteger value); + + void setNull(int index); + + void set(int index, FlowableJsonNode value); + + void add(Short value); + + void add(Integer value); + + void add(Long value); + + void add(Float value); + + void add(Double value); + + void add(byte[] value); + + void add(String value); + + void add(Boolean value); + + void add(BigDecimal value); + + void add(BigInteger value); + + void add(FlowableJsonNode value); + + void addNull(); +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableJsonNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableJsonNode.java new file mode 100644 index 00000000000..84cdec7b92b --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableJsonNode.java @@ -0,0 +1,83 @@ +/* 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 org.flowable.common.engine.impl.json; + +import java.util.Collection; + +/** + * This is a Flowable JSON implementation that is for internal use by Flowable to support both Jackson 2 and Jackson 3 + * + * @author Filip Hrisafov + */ +public interface FlowableJsonNode { + + Object getImplementationValue(); + + String asString(); + + String asString(String defaultValue); + + boolean isValueNode(); + + boolean isNull(); + + boolean isMissingNode(); + + boolean isContainer(); + + boolean isString(); + + boolean isLong(); + + boolean isDouble(); + + boolean isFloat(); + + boolean isInt(); + + boolean isShort(); + + boolean isBoolean(); + + boolean isNumber(); + + boolean isBigDecimal(); + + boolean isBigInteger(); + + long longValue(); + + double doubleValue(); + + int intValue(); + + boolean booleanValue(); + + Number numberValue(); + + boolean has(String propertyName); + + FlowableJsonNode get(String propertyName); + + FlowableJsonNode get(int index); + + FlowableJsonNode path(int index); + + FlowableJsonNode path(String propertyName); + + int size(); + + Collection propertyNames(); + + String getNodeType(); +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableObjectNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableObjectNode.java new file mode 100644 index 00000000000..68b05a97196 --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/FlowableObjectNode.java @@ -0,0 +1,50 @@ +/* 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 org.flowable.common.engine.impl.json; + +import java.math.BigDecimal; +import java.math.BigInteger; + +/** + * @author Filip Hrisafov + */ +public interface FlowableObjectNode extends FlowableJsonNode { + + void put(String propertyName, String value); + + void put(String propertyName, Boolean value); + + void put(String propertyName, Short value); + + void put(String propertyName, Integer value); + + void put(String propertyName, Long value); + + void put(String propertyName, Double value); + + void put(String propertyName, Float value); + + void put(String propertyName, BigDecimal value); + + void put(String propertyName, BigInteger value); + + void put(String propertyName, byte[] value); + + void putNull(String propertyName); + + FlowableArrayNode putArray(String propertyName); + + void set(String propertyName, FlowableJsonNode value); + + FlowableObjectNode putObject(String propertyName); +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/VariableJsonMapper.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/VariableJsonMapper.java new file mode 100644 index 00000000000..91f744aae0b --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/VariableJsonMapper.java @@ -0,0 +1,33 @@ +/* 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 org.flowable.common.engine.impl.json; + +/** + * @author Filip Hrisafov + */ +public interface VariableJsonMapper { + + Object readTree(String textValue); + + Object readTree(byte[] bytes); + + Object deepCopy(Object value); + + boolean isJsonNode(Object value); + + Object transformToJsonNode(Object value); + + FlowableObjectNode createObjectNode(); + + FlowableArrayNode createArrayNode(); +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ArrayNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ArrayNode.java new file mode 100644 index 00000000000..f30c0158a32 --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ArrayNode.java @@ -0,0 +1,165 @@ +/* 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 org.flowable.common.engine.impl.json.jackson2; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.Iterator; + +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson2ArrayNode extends FlowableJackson2JsonNode implements FlowableArrayNode { + + public FlowableJackson2ArrayNode(ArrayNode arrayNode) { + super(arrayNode); + } + + @Override + public Iterator iterator() { + Iterator delegate = jsonNode.elements(); + return new Iterator<>() { + + @Override + public boolean hasNext() { + return delegate.hasNext(); + } + + @Override + public FlowableJsonNode next() { + return FlowableJackson2JsonNode.wrap(delegate.next()); + } + + @Override + public void remove() { + delegate.remove(); + } + }; + } + + @Override + public void set(int index, String value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Boolean value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Short value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Integer value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Long value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Double value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, BigDecimal value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, BigInteger value) { + jsonNode.set(index, value); + } + + @Override + public void setNull(int index) { + jsonNode.setNull(index); + } + + @Override + public void set(int index, FlowableJsonNode value) { + jsonNode.set(index, asJsonNode(value)); + } + + @Override + public void add(Short value) { + jsonNode.add(value); + } + + @Override + public void add(Integer value) { + jsonNode.add(value); + } + + @Override + public void add(Long value) { + jsonNode.add(value); + } + + @Override + public void add(Float value) { + jsonNode.add(value); + } + + @Override + public void add(Double value) { + jsonNode.add(value); + } + + @Override + public void add(byte[] value) { + jsonNode.add(value); + } + + @Override + public void add(String value) { + jsonNode.add(value); + } + + @Override + public void add(Boolean value) { + jsonNode.add(value); + } + + @Override + public void add(BigDecimal value) { + jsonNode.add(value); + } + + @Override + public void add(BigInteger value) { + jsonNode.add(value); + } + + @Override + public void add(FlowableJsonNode value) { + jsonNode.add(asJsonNode(value)); + } + + @Override + public void addNull() { + jsonNode.addNull(); + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2JsonNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2JsonNode.java new file mode 100644 index 00000000000..5684efa0632 --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2JsonNode.java @@ -0,0 +1,226 @@ +/* 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 org.flowable.common.engine.impl.json.jackson2; + +import java.util.Collection; +import java.util.List; +import java.util.Spliterators; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import org.flowable.common.engine.api.FlowableException; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.util.JsonUtil; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.NullNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson2JsonNode implements FlowableJsonNode { + + protected final T jsonNode; + + protected FlowableJackson2JsonNode(T jsonNode) { + this.jsonNode = jsonNode; + } + + @Override + public T getImplementationValue() { + return jsonNode; + } + + @Override + public String asString() { + return jsonNode.asText(); + } + + @Override + public String asString(String defaultValue) { + return jsonNode.asText(defaultValue); + } + + @Override + public boolean isValueNode() { + return jsonNode.isValueNode(); + } + + @Override + public boolean isNull() { + return jsonNode.isNull(); + } + + @Override + public boolean isMissingNode() { + return jsonNode.isMissingNode(); + } + + @Override + public boolean isContainer() { + return jsonNode.isContainerNode(); + } + + @Override + public boolean isString() { + return jsonNode.isTextual(); + } + + @Override + public boolean isLong() { + return jsonNode.isLong(); + } + + @Override + public boolean isDouble() { + return jsonNode.isDouble(); + } + + @Override + public boolean isFloat() { + return jsonNode.isFloat(); + } + + @Override + public boolean isInt() { + return jsonNode.isInt(); + } + + @Override + public boolean isShort() { + return jsonNode.isShort(); + } + + @Override + public boolean isBoolean() { + return jsonNode.isBoolean(); + } + + @Override + public boolean isNumber() { + return jsonNode.isNumber(); + } + + @Override + public boolean isBigDecimal() { + return jsonNode.isBigDecimal(); + } + + @Override + public boolean isBigInteger() { + return jsonNode.isBigInteger(); + } + + @Override + public long longValue() { + return jsonNode.longValue(); + } + + @Override + public double doubleValue() { + return jsonNode.doubleValue(); + } + + @Override + public int intValue() { + return jsonNode.intValue(); + } + + @Override + public boolean booleanValue() { + return jsonNode.booleanValue(); + } + + @Override + public Number numberValue() { + return jsonNode.numberValue(); + } + + @Override + public boolean has(String propertyName) { + return jsonNode.has(propertyName); + } + + @Override + public FlowableJsonNode get(String propertyName) { + return wrap(jsonNode.get(propertyName)); + } + + @Override + public FlowableJsonNode get(int index) { + return wrap(jsonNode.get(index)); + } + + @Override + public FlowableJsonNode path(int index) { + return wrap(jsonNode.path(index)); + } + + @Override + public FlowableJsonNode path(String propertyName) { + return wrap(jsonNode.path(propertyName)); + } + + @Override + public int size() { + return jsonNode.size(); + } + + @Override + public Collection propertyNames() { + return StreamSupport.stream(Spliterators.spliterator(jsonNode.fieldNames(), jsonNode.size(), 0), false).collect(Collectors.toSet()); + } + + @Override + public String getNodeType() { + return jsonNode.getNodeType().name(); + } + + protected static JsonNode asJsonNode(FlowableJsonNode value) { + if (value == null) { + return NullNode.getInstance(); + } + return asJsonNode(value.getImplementationValue(), ObjectMapper::new); + } + + protected static JsonNode asJsonNode(Object value, Supplier objectMapperSupplier) { + if (value instanceof JsonNode) { + return (JsonNode) value; + } else if (JsonUtil.isJsonNode(value)) { + // This means it is a Jackson 3 node + try { + return objectMapperSupplier.get().readTree(value.toString()); + } catch (JsonProcessingException e) { + throw new FlowableException("Failed to parse jase", e); + } + } else { + throw new FlowableException("Unsupported value type " + (value == null ? "null" : value.getClass().getName())); + } + } + + public static FlowableJsonNode wrap(JsonNode jsonNode) { + if (jsonNode instanceof ArrayNode arrayNode) { + return new FlowableJackson2ArrayNode(arrayNode); + } else if (jsonNode instanceof ObjectNode objectNode) { + return new FlowableJackson2ObjectNode(objectNode); + } else if (jsonNode != null) { + return new FlowableJackson2JsonNode<>(jsonNode); + } + return null; + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ObjectNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ObjectNode.java new file mode 100644 index 00000000000..9f57078083e --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/FlowableJackson2ObjectNode.java @@ -0,0 +1,103 @@ +/* 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 org.flowable.common.engine.impl.json.jackson2; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; + +import com.fasterxml.jackson.databind.node.ObjectNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson2ObjectNode extends FlowableJackson2JsonNode implements FlowableObjectNode { + + public FlowableJackson2ObjectNode(ObjectNode jsonNode) { + super(jsonNode); + } + + @Override + public void put(String propertyName, String value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Boolean value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Short value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Integer value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Long value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Double value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Float value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, BigDecimal value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, BigInteger value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, byte[] value) { + jsonNode.put(propertyName, value); + } + + @Override + public void putNull(String propertyName) { + jsonNode.putNull(propertyName); + } + + @Override + public FlowableArrayNode putArray(String propertyName) { + return new FlowableJackson2ArrayNode(jsonNode.putArray(propertyName)); + } + + @Override + public void set(String propertyName, FlowableJsonNode value) { + jsonNode.set(propertyName, asJsonNode(value)); + } + + @Override + public FlowableObjectNode putObject(String propertyName) { + return new FlowableJackson2ObjectNode(jsonNode.putObject(propertyName)); + } + +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/Jackson2VariableJsonMapper.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/Jackson2VariableJsonMapper.java new file mode 100644 index 00000000000..6bbeec36392 --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson2/Jackson2VariableJsonMapper.java @@ -0,0 +1,80 @@ +/* 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 org.flowable.common.engine.impl.json.jackson2; + +import java.io.IOException; +import java.io.UncheckedIOException; + +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; +import org.flowable.common.engine.impl.json.VariableJsonMapper; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author Filip Hrisafov + */ +@Deprecated +public class Jackson2VariableJsonMapper implements VariableJsonMapper { + + protected final ObjectMapper objectMapper; + + public Jackson2VariableJsonMapper(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + @Override + public Object readTree(String textValue) { + try { + return objectMapper.readTree(textValue); + } catch (JsonProcessingException e) { + throw new UncheckedIOException("Failed to read text value", e); + } + } + + @Override + public Object readTree(byte[] bytes) { + try { + return objectMapper.readTree(bytes); + } catch (IOException e) { + throw new UncheckedIOException("Failed to read text value", e); + } + } + + @Override + public Object deepCopy(Object value) { + return ((JsonNode) value).deepCopy(); + } + + @Override + public boolean isJsonNode(Object value) { + return value instanceof JsonNode; + } + + @Override + public Object transformToJsonNode(Object value) { + return FlowableJackson2JsonNode.asJsonNode(value, () -> objectMapper); + } + + @Override + public FlowableObjectNode createObjectNode() { + return new FlowableJackson2ObjectNode(objectMapper.createObjectNode()); + } + + @Override + public FlowableArrayNode createArrayNode() { + return new FlowableJackson2ArrayNode(objectMapper.createArrayNode()); + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ArrayNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ArrayNode.java new file mode 100644 index 00000000000..cbe58a339de --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ArrayNode.java @@ -0,0 +1,165 @@ +/* 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 org.flowable.common.engine.impl.json.jackson3; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.Iterator; + +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson3ArrayNode extends FlowableJackson3JsonNode implements FlowableArrayNode { + + public FlowableJackson3ArrayNode(ArrayNode arrayNode) { + super(arrayNode); + } + + @Override + public Iterator iterator() { + Iterator delegate = jsonNode.elements().iterator(); + return new Iterator<>() { + + @Override + public boolean hasNext() { + return delegate.hasNext(); + } + + @Override + public FlowableJsonNode next() { + return FlowableJackson3JsonNode.wrap(delegate.next()); + } + + @Override + public void remove() { + delegate.remove(); + } + }; + } + + @Override + public void set(int index, String value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Boolean value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Short value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Integer value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Long value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, Double value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, BigDecimal value) { + jsonNode.set(index, value); + } + + @Override + public void set(int index, BigInteger value) { + jsonNode.set(index, value); + } + + @Override + public void setNull(int index) { + jsonNode.setNull(index); + } + + @Override + public void set(int index, FlowableJsonNode value) { + jsonNode.set(index, asJsonNode(value)); + } + + @Override + public void add(Short value) { + jsonNode.add(value); + } + + @Override + public void add(Integer value) { + jsonNode.add(value); + } + + @Override + public void add(Long value) { + jsonNode.add(value); + } + + @Override + public void add(Float value) { + jsonNode.add(value); + } + + @Override + public void add(Double value) { + jsonNode.add(value); + } + + @Override + public void add(byte[] value) { + jsonNode.add(value); + } + + @Override + public void add(String value) { + jsonNode.add(value); + } + + @Override + public void add(Boolean value) { + jsonNode.add(value); + } + + @Override + public void add(BigDecimal value) { + jsonNode.add(value); + } + + @Override + public void add(BigInteger value) { + jsonNode.add(value); + } + + @Override + public void add(FlowableJsonNode value) { + jsonNode.add(asJsonNode(value)); + } + + @Override + public void addNull() { + jsonNode.addNull(); + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3JsonNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3JsonNode.java new file mode 100644 index 00000000000..baa0a442a80 --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3JsonNode.java @@ -0,0 +1,240 @@ +/* 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 org.flowable.common.engine.impl.json.jackson3; + +import java.util.Collection; +import java.util.function.Supplier; + +import org.flowable.common.engine.api.FlowableException; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.util.JsonUtil; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.NullNode; +import tools.jackson.databind.node.ObjectNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson3JsonNode implements FlowableJsonNode { + + protected final T jsonNode; + + protected FlowableJackson3JsonNode(T jsonNode) { + this.jsonNode = jsonNode; + } + + @Override + public Object getImplementationValue() { + return jsonNode; + } + + @Override + public String asString() { + if (jsonNode.isNull()) { + // Jackson 2 was returning `null` as a string for `asString` + // So we keep the same behavior here + return "null"; + } else if (jsonNode.isMissingNode()) { + // Jackson 2 was returning empty string for `asString` + // So we keep the same behavior here + return ""; + } + return jsonNode.asString(); + } + + @Override + public String asString(String defaultValue) { + if (jsonNode.isNull() || jsonNode.isMissingNode()) { + return defaultValue; + } + return jsonNode.asString(defaultValue); + } + + @Override + public boolean isValueNode() { + return jsonNode.isValueNode(); + } + + @Override + public boolean isNull() { + return jsonNode.isNull(); + } + + @Override + public boolean isMissingNode() { + return jsonNode.isMissingNode(); + } + + @Override + public boolean isContainer() { + return jsonNode.isContainer(); + } + + @Override + public boolean isString() { + return jsonNode.isString(); + } + + @Override + public boolean isLong() { + return jsonNode.isLong(); + } + + @Override + public boolean isDouble() { + return jsonNode.isDouble(); + } + + @Override + public boolean isFloat() { + return jsonNode.isFloat(); + } + + @Override + public boolean isInt() { + return jsonNode.isInt(); + } + + @Override + public boolean isShort() { + return jsonNode.isShort(); + } + + @Override + public boolean isBoolean() { + return jsonNode.isBoolean(); + } + + @Override + public boolean isNumber() { + return jsonNode.isNumber(); + } + + @Override + public boolean isBigDecimal() { + return jsonNode.isBigDecimal(); + } + + @Override + public boolean isBigInteger() { + return jsonNode.isBigInteger(); + } + + @Override + public long longValue() { + if (jsonNode.isFloatingPointNumber()) { + // Jackson 3 throws a coercion exception if the value is not a long. + // We just want to return the cut long value + return jsonNode.numberValue().longValue(); + } + return jsonNode.longValue(); + } + + @Override + public double doubleValue() { + return jsonNode.doubleValue(); + } + + @Override + public int intValue() { + if (jsonNode.isFloatingPointNumber()) { + // Jackson 3 throws a coercion exception if the value is not an integer. + // We just want to return the cut int value + return jsonNode.numberValue().intValue(); + } + return jsonNode.intValue(); + } + + @Override + public boolean booleanValue() { + return jsonNode.booleanValue(); + } + + @Override + public Number numberValue() { + return jsonNode.numberValue(); + } + + @Override + public boolean has(String propertyName) { + return jsonNode.has(propertyName); + } + + @Override + public FlowableJsonNode get(String propertyName) { + return wrap(jsonNode.get(propertyName)); + } + + @Override + public FlowableJsonNode get(int index) { + return wrap(jsonNode.get(index)); + } + + @Override + public FlowableJsonNode path(int index) { + return wrap(jsonNode.path(index)); + } + + @Override + public FlowableJsonNode path(String propertyName) { + return wrap(jsonNode.path(propertyName)); + } + + @Override + public int size() { + return jsonNode.size(); + } + + @Override + public Collection propertyNames() { + return jsonNode.propertyNames(); + } + + @Override + public String getNodeType() { + return jsonNode.getNodeType().name(); + } + + protected static JsonNode asJsonNode(FlowableJsonNode value) { + if (value == null) { + return NullNode.getInstance(); + } + return asJsonNode(value.getImplementationValue(), JsonMapper::shared); + } + + protected static JsonNode asJsonNode(Object value, Supplier objectMapperSupplier) { + if (value instanceof JsonNode) { + return (JsonNode) value; + } else if (JsonUtil.isJsonNode(value)) { + // This means it is a Jackson 2 node + return objectMapperSupplier.get().readTree(value.toString()); + } else { + throw new FlowableException("Unsupported value type " + (value == null ? "null" : value.getClass().getName())); + } + } + + public static FlowableJsonNode wrap(JsonNode jsonNode) { + if (jsonNode instanceof ArrayNode arrayNode) { + return new FlowableJackson3ArrayNode(arrayNode); + } else if (jsonNode instanceof ObjectNode objectNode) { + return new FlowableJackson3ObjectNode(objectNode); + } else if (jsonNode != null) { + return new FlowableJackson3JsonNode<>(jsonNode); + } + return null; + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ObjectNode.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ObjectNode.java new file mode 100644 index 00000000000..24696b441da --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/FlowableJackson3ObjectNode.java @@ -0,0 +1,102 @@ +/* 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 org.flowable.common.engine.impl.json.jackson3; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; + +import tools.jackson.databind.node.ObjectNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson3ObjectNode extends FlowableJackson3JsonNode implements FlowableObjectNode { + + public FlowableJackson3ObjectNode(ObjectNode jsonNode) { + super(jsonNode); + } + + @Override + public void put(String propertyName, String value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Boolean value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Short value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Integer value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Long value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Double value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, Float value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, BigDecimal value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, BigInteger value) { + jsonNode.put(propertyName, value); + } + + @Override + public void put(String propertyName, byte[] value) { + jsonNode.put(propertyName, value); + } + + @Override + public void putNull(String propertyName) { + jsonNode.putNull(propertyName); + } + + @Override + public FlowableArrayNode putArray(String propertyName) { + return new FlowableJackson3ArrayNode(jsonNode.putArray(propertyName)); + } + + @Override + public void set(String propertyName, FlowableJsonNode value) { + jsonNode.set(propertyName, asJsonNode(value)); + } + + @Override + public FlowableObjectNode putObject(String propertyName) { + return new FlowableJackson3ObjectNode(jsonNode.putObject(propertyName)); + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/Jackson3VariableJsonMapper.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/Jackson3VariableJsonMapper.java new file mode 100644 index 00000000000..df40bee8e9d --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/json/jackson3/Jackson3VariableJsonMapper.java @@ -0,0 +1,67 @@ +/* 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 org.flowable.common.engine.impl.json.jackson3; + +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; +import org.flowable.common.engine.impl.json.VariableJsonMapper; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; + +/** + * @author Filip Hrisafov + */ +public class Jackson3VariableJsonMapper implements VariableJsonMapper { + + protected final ObjectMapper objectMapper; + + public Jackson3VariableJsonMapper(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + @Override + public Object readTree(String textValue) { + return objectMapper.readTree(textValue); + } + + @Override + public Object readTree(byte[] bytes) { + return objectMapper.readTree(bytes); + } + + @Override + public Object deepCopy(Object value) { + return ((JsonNode) value).deepCopy(); + } + + @Override + public boolean isJsonNode(Object value) { + return value instanceof JsonNode; + } + + @Override + public Object transformToJsonNode(Object value) { + return FlowableJackson3JsonNode.asJsonNode(value, () -> objectMapper); + } + + @Override + public FlowableObjectNode createObjectNode() { + return new FlowableJackson3ObjectNode(objectMapper.createObjectNode()); + } + + @Override + public FlowableArrayNode createArrayNode() { + return new FlowableJackson3ArrayNode(objectMapper.createArrayNode()); + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/JsonUtil.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/JsonUtil.java new file mode 100644 index 00000000000..7e3725cab48 --- /dev/null +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/JsonUtil.java @@ -0,0 +1,182 @@ +/* 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 org.flowable.common.engine.impl.util; + +import org.flowable.common.engine.api.FlowableIllegalArgumentException; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableJsonNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; +import org.flowable.common.engine.impl.json.jackson2.FlowableJackson2ArrayNode; +import org.flowable.common.engine.impl.json.jackson2.FlowableJackson2JsonNode; +import org.flowable.common.engine.impl.json.jackson2.FlowableJackson2ObjectNode; +import org.flowable.common.engine.impl.json.jackson3.FlowableJackson3ArrayNode; +import org.flowable.common.engine.impl.json.jackson3.FlowableJackson3JsonNode; +import org.flowable.common.engine.impl.json.jackson3.FlowableJackson3ObjectNode; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.MissingNode; +import tools.jackson.databind.node.NullNode; +import tools.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.StringNode; + +/** + * @author Filip Hrisafov + */ +public class JsonUtil { + + private static final boolean JACKSON_2_PRESENT = ReflectUtil.isClassPresent("com.fasterxml.jackson.databind.JsonNode"); + + public static FlowableJsonNode asFlowableJsonNode(Object value) { + if (value == null) { + return null; + } + FlowableJsonNode flowableJsonNode; + if (value instanceof JsonNode node) { + flowableJsonNode = FlowableJackson3JsonNode.wrap(node); + } else if (JACKSON_2_PRESENT) { + if (value instanceof com.fasterxml.jackson.databind.JsonNode node) { + flowableJsonNode = FlowableJackson2JsonNode.wrap(node); + } else { + flowableJsonNode = null; + } + } else { + flowableJsonNode = null; + } + + return flowableJsonNode; + } + + public static FlowableArrayNode asFlowableArrayNode(Object value) { + if (value == null) { + return null; + } + + FlowableArrayNode flowableArrayNode; + if (value instanceof ArrayNode arrayNode) { + flowableArrayNode = new FlowableJackson3ArrayNode(arrayNode); + } else if (JACKSON_2_PRESENT) { + if (value instanceof com.fasterxml.jackson.databind.node.ArrayNode arrayNode) { + flowableArrayNode = new FlowableJackson2ArrayNode(arrayNode); + } else { + flowableArrayNode = null; + } + } else { + flowableArrayNode = null; + } + + return flowableArrayNode; + } + + public static FlowableObjectNode asFlowableObjectNode(Object value) { + if (value == null) { + return null; + } + + FlowableObjectNode flowableObjectNode; + if (value instanceof ObjectNode arrayNode) { + flowableObjectNode = new FlowableJackson3ObjectNode(arrayNode); + } else if (JACKSON_2_PRESENT) { + if (value instanceof com.fasterxml.jackson.databind.node.ObjectNode objectNode) { + flowableObjectNode = new FlowableJackson2ObjectNode(objectNode); + } else { + flowableObjectNode = null; + } + } else { + flowableObjectNode = null; + } + + return flowableObjectNode; + } + + public static JsonNode asJsonNode(Object value, ObjectMapper objectMapper) { + return asJsonNode(value, objectMapper, false); + } + + public static JsonNode asJsonNode(Object value, ObjectMapper objectMapper, boolean allowOtherTypes) { + if (value instanceof JsonNode jsonNode) { + return jsonNode; + } + + if (JACKSON_2_PRESENT) { + if (value instanceof com.fasterxml.jackson.databind.JsonNode jackson2JsonNode) { + if (jackson2JsonNode.isNull()) { + return NullNode.getInstance(); + } else if (jackson2JsonNode.isTextual()) { + return StringNode.valueOf(jackson2JsonNode.textValue()); + } else if (jackson2JsonNode.isNumber()) { + return objectMapper.valueToTree(jackson2JsonNode.numberValue()); + } else if (jackson2JsonNode.isBoolean()) { + return objectMapper.valueToTree(jackson2JsonNode.booleanValue()); + } else if (jackson2JsonNode.isMissingNode()) { + return MissingNode.getInstance(); + } + + String jsonString = jackson2JsonNode.toString(); + return objectMapper.readTree(jsonString); + } + } + if (allowOtherTypes) { + return null; + } + + throw new FlowableIllegalArgumentException("Cannot convert value of type " + value.getClass() + " to Jackson 3 JsonNode"); + } + + public static Object deepCopyIfJson(Object value) { + if (value instanceof JsonNode jsonNode) { + return jsonNode.deepCopy(); + } else if (JACKSON_2_PRESENT) { + if (value instanceof com.fasterxml.jackson.databind.JsonNode jsonNode) { + return jsonNode.deepCopy(); + } + } + + return value; + } + + public static boolean isArrayNode(Object value) { + if (value instanceof ArrayNode) { + return true; + } + if (JACKSON_2_PRESENT) { + return value instanceof com.fasterxml.jackson.databind.node.ArrayNode; + } + + return false; + } + + public static boolean isObjectNode(Object value) { + if (value instanceof ObjectNode) { + return true; + } + if (JACKSON_2_PRESENT) { + return value instanceof com.fasterxml.jackson.databind.node.ObjectNode; + } + + return false; + } + + public static boolean isJsonNode(Object value) { + if (value instanceof JsonNode) { + return true; + } + + if (JACKSON_2_PRESENT) { + return value instanceof com.fasterxml.jackson.databind.JsonNode; + } + + return false; + } +} diff --git a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/ReflectUtil.java b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/ReflectUtil.java index 95ccef68380..caafe0953ab 100644 --- a/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/ReflectUtil.java +++ b/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/ReflectUtil.java @@ -91,6 +91,15 @@ public static Class loadClass(String className) { return clazz; } + public static boolean isClassPresent(String className) { + try { + loadClass(className); + return true; + } catch (FlowableClassLoadingException ignored) { + return false; + } + } + public static InputStream getResourceAsStream(String name) { InputStream resourceStream = null; ClassLoader classLoader = getCustomClassLoader(); diff --git a/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableArrayNodeTests.java b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableArrayNodeTests.java new file mode 100644 index 00000000000..d0a3fcefe26 --- /dev/null +++ b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableArrayNodeTests.java @@ -0,0 +1,593 @@ +/* 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 org.flowable.common.engine.impl.json; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.junit.jupiter.api.Test; + +/** + * @author Filip Hrisafov + */ +public interface FlowableArrayNodeTests extends TestJsonProvider { + + @Test + default void arrayNode() { + FlowableJsonNode test = createArrayNode(""" + [ "first", "second", "third" ] + """); + + assertThat(test.isValueNode()).isFalse(); + assertThat(test.isContainer()).isTrue(); + assertThat(test.getNodeType()).isEqualTo("ARRAY"); + assertThat(test.propertyNames()).isEmpty(); + } + + @Test + default void arrayNodeGetByIndex() { + FlowableJsonNode test = createArrayNode(""" + [ "first", "second", "third" ] + """); + + assertThat(test.isValueNode()).isFalse(); + assertThat(test.size()).isEqualTo(3); + + FlowableJsonNode first = test.get(0); + assertThat(first).isNotNull(); + assertThat(first.isString()).isTrue(); + assertThat(first.asString()).isEqualTo("first"); + + FlowableJsonNode second = test.get(1); + assertThat(second).isNotNull(); + assertThat(second.asString()).isEqualTo("second"); + + FlowableJsonNode third = test.get(2); + assertThat(third).isNotNull(); + assertThat(third.asString()).isEqualTo("third"); + } + + @Test + default void arrayNodeGetOutOfBounds() { + FlowableJsonNode test = createArrayNode(""" + [ "first", "second" ] + """); + + FlowableJsonNode missing = test.get(5); + assertThat(missing).isNull(); + } + + @Test + default void arrayNodePath() { + FlowableJsonNode test = createArrayNode(""" + [ "first", "second" ] + """); + + // Valid index + FlowableJsonNode first = test.path(0); + assertThat(first).isNotNull(); + assertThat(first.asString()).isEqualTo("first"); + + // Out of bounds - path returns MissingNode instead of null + FlowableJsonNode missing = test.path(5); + assertThat(missing).isNotNull(); + assertThat(missing.isValueNode()).isFalse(); + assertThat(missing.asString()).isEqualTo(""); + } + + @Test + default void arrayNodeWithNumbers() { + FlowableJsonNode test = createArrayNode("[ 10, 20, 30 ]"); + + assertThat(test.size()).isEqualTo(3); + + FlowableJsonNode first = test.get(0); + assertThat(first).isNotNull(); + assertThat(first.isInt()).isTrue(); + assertThat(first.intValue()).isEqualTo(10); + + FlowableJsonNode second = test.get(1); + assertThat(second.intValue()).isEqualTo(20); + + FlowableJsonNode third = test.get(2); + assertThat(third.intValue()).isEqualTo(30); + } + + @Test + default void nestedObjectInArray() { + FlowableJsonNode test = createArrayNode(""" + [ + { "name": "John" }, + { "name": "Jane" } + ] + """); + + assertThat(test.size()).isEqualTo(2); + + FlowableJsonNode first = test.get(0); + assertThat(first).isNotNull(); + assertThat(first.isValueNode()).isFalse(); + + FlowableJsonNode firstName = first.get("name"); + assertThat(firstName).isNotNull(); + assertThat(firstName.asString()).isEqualTo("John"); + + FlowableJsonNode second = test.get(1); + FlowableJsonNode secondName = second.get("name"); + assertThat(secondName.asString()).isEqualTo("Jane"); + } + + @Test + default void emptyArraySize() { + FlowableJsonNode test = createArrayNode("[]"); + assertThat(test.size()).isEqualTo(0); + assertThat(test.isValueNode()).isFalse(); + + } + + @Test + default void arrayWithNullElement() { + FlowableJsonNode test = createArrayNode(""" + [ "first", null, "third" ] + """); + + FlowableJsonNode nullElement = test.get(1); + assertThat(nullElement).isNotNull(); + assertThat(nullElement.isNull()).isTrue(); + assertThat(nullElement.asString()).isEqualTo("null"); + } + + @Test + default void setStringValue() { + FlowableArrayNode test = createArrayNode(""" + [ "first", "second", "third" ] + """); + + test.set(1, "modified"); + + FlowableJsonNode modified = test.get(1); + assertThat(modified).isNotNull(); + assertThat(modified.isString()).isTrue(); + assertThat(modified.asString()).isEqualTo("modified"); + + // Verify other elements unchanged + assertThat(test.get(0).asString()).isEqualTo("first"); + assertThat(test.get(2).asString()).isEqualTo("third"); + } + + @Test + default void setBooleanValue() { + FlowableArrayNode test = createArrayNode(""" + [ "first", "second", "third" ] + """); + + test.set(0, true); + test.set(2, false); + + FlowableJsonNode first = test.get(0); + assertThat(first).isNotNull(); + assertThat(first.isBoolean()).isTrue(); + assertThat(first.booleanValue()).isTrue(); + + FlowableJsonNode third = test.get(2); + assertThat(third).isNotNull(); + assertThat(third.isBoolean()).isTrue(); + assertThat(third.booleanValue()).isFalse(); + } + + @Test + default void setIntegerValue() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + test.set(1, 42); + + FlowableJsonNode modified = test.get(1); + assertThat(modified).isNotNull(); + assertThat(modified.isInt()).isTrue(); + assertThat(modified.intValue()).isEqualTo(42); + } + + @Test + default void setShortValue() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + test.set(0, (short) 100); + + FlowableJsonNode modified = test.get(0); + assertThat(modified).isNotNull(); + assertThat(modified.isShort()).isTrue(); + assertThat(modified.intValue()).isEqualTo(100); + } + + @Test + default void setLongValue() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + test.set(2, 9223372036854775807L); + + FlowableJsonNode modified = test.get(2); + assertThat(modified).isNotNull(); + assertThat(modified.isLong()).isTrue(); + assertThat(modified.longValue()).isEqualTo(9223372036854775807L); + } + + @Test + default void setDoubleValue() { + FlowableArrayNode test = createArrayNode("[ 1.0, 2.0, 3.0 ]"); + + test.set(1, 3.14159); + + FlowableJsonNode modified = test.get(1); + assertThat(modified).isNotNull(); + assertThat(modified.isDouble()).isTrue(); + assertThat(modified.doubleValue()).isEqualTo(3.14159); + } + + @Test + default void setBigDecimalValue() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + BigDecimal bigDecimal = new BigDecimal("123456789.987654321"); + test.set(0, bigDecimal); + + FlowableJsonNode modified = test.get(0); + assertThat(modified).isNotNull(); + assertThat(modified.isBigDecimal()).isTrue(); + assertThat(modified.asString()).isEqualTo("123456789.987654321"); + } + + @Test + default void setBigIntegerValue() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + BigInteger bigInteger = new BigInteger("12345678901234567890"); + test.set(1, bigInteger); + + FlowableJsonNode modified = test.get(1); + assertThat(modified).isNotNull(); + assertThat(modified.isNumber()).isTrue(); + assertThat(modified.asString()).isEqualTo("12345678901234567890"); + } + + @Test + default void setNullValue() { + FlowableArrayNode test = createArrayNode(""" + [ "first", "second", "third" ] + """); + + test.setNull(1); + + FlowableJsonNode modified = test.get(1); + assertThat(modified).isNotNull(); + assertThat(modified.isNull()).isTrue(); + assertThat(modified.asString()).isEqualTo("null"); + + // Verify other elements unchanged + assertThat(test.get(0).asString()).isEqualTo("first"); + assertThat(test.get(2).asString()).isEqualTo("third"); + } + + @Test + default void setNullValueOnNullBoolean() { + FlowableArrayNode test = createArrayNode(""" + [ "first", "second", "third" ] + """); + + test.set(1, (Boolean) null); + + FlowableJsonNode modified = test.get(1); + assertThat(modified).isNotNull(); + assertThat(modified.isNull()).isTrue(); + } + + @Test + default void setNullValueOnNullInteger() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + test.set(0, (Integer) null); + + FlowableJsonNode modified = test.get(0); + assertThat(modified).isNotNull(); + assertThat(modified.isNull()).isTrue(); + } + + @Test + default void setJsonNodeWithString() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + test.set(1, create("text value")); + + FlowableJsonNode modified = test.get(1); + assertThat(modified).isNotNull(); + assertThat(modified.asString()).isEqualTo("text value"); + } + + @Test + default void setJsonNodeWithNumber() { + FlowableArrayNode test = createArrayNode(""" + [ "a", "b", "c" ] + """); + + test.set(0, create(999)); + + FlowableJsonNode modified = test.get(0); + assertThat(modified).isNotNull(); + assertThat(modified.isInt()).isTrue(); + assertThat(modified.intValue()).isEqualTo(999); + } + + @Test + default void setJsonNodeWithNull() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + test.set(2, createNull()); + + FlowableJsonNode modified = test.get(2); + assertThat(modified).isNotNull(); + assertThat(modified.isNull()).isTrue(); + } + + @Test + default void addJsonNodeToArray() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + + test.add(create("fourth")); + assertThat(test.size()).isEqualTo(4); + + FlowableJsonNode added = test.get(3); + assertThat(added).isNotNull(); + assertThat(added.isString()).isTrue(); + assertThat(added.asString()).isEqualTo("fourth"); + } + + @Test + default void addOtherJsonNodeToArray() { + FlowableArrayNode test = createArrayNode("[]"); + + assertThat(test.size()).isEqualTo(0); + + test.add(createOtherTypeJson(""" + { + "name": "John" + } + """)); + assertThat(test.size()).isEqualTo(1); + + FlowableJsonNode added = test.get(0); + assertThat(added).isNotNull(); + assertThat(added.get("name").asString()).isEqualTo("John"); + } + + @Test + default void addNullToArray() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add((FlowableJsonNode) null); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isNull()).isTrue(); + } + + @Test + default void addNull() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.addNull(); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isNull()).isTrue(); + } + + @Test + default void addShort() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add((short) 10); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isShort()).isTrue(); + } + + @Test + default void addInteger() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add(10); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isInt()).isTrue(); + } + + @Test + default void addLong() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add(10L); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isLong()).isTrue(); + } + + @Test + default void addFloat() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add((float) 10.42); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isFloat()).isTrue(); + } + + @Test + default void addDouble() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add(10.42d); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isDouble()).isTrue(); + } + + @Test + default void addString() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add("test"); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isString()).isTrue(); + } + + @Test + default void addBoolean() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add(true); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isBoolean()).isTrue(); + } + + @Test + default void addBigInteger() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add(BigInteger.valueOf(10045)); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isBigInteger()).isTrue(); + } + + @Test + default void addBigDecimal() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3 ]"); + + assertThat(test.size()).isEqualTo(3); + test.add(BigDecimal.valueOf(100.42)); + assertThat(test.size()).isEqualTo(4); + FlowableJsonNode element = test.get(3); + assertThat(element).isNotNull(); + assertThat(element.isBigDecimal()).isTrue(); + } + + @Test + default void addMultipleJsonNodesToArray() { + FlowableArrayNode test = createArrayNode("[]"); + + assertThat(test.size()).isEqualTo(0); + + test.add(create("first")); + test.add(create(42)); + test.add(create(true)); + test.add(createNull()); + + assertThat(test.size()).isEqualTo(4); + + assertThat(test.get(0).asString()).isEqualTo("first"); + assertThat(test.get(1).intValue()).isEqualTo(42); + assertThat(test.get(2).booleanValue()).isTrue(); + assertThat(test.get(3).isNull()).isTrue(); + } + + @Test + default void setMultipleTypesInArray() { + FlowableArrayNode test = createArrayNode("[ null, null, null, null, null ]"); + + test.set(0, "string"); + test.set(1, 123); + test.set(2, true); + test.set(3, 45.67); + test.setNull(4); + + assertThat(test.get(0).asString()).isEqualTo("string"); + assertThat(test.get(1).intValue()).isEqualTo(123); + assertThat(test.get(2).booleanValue()).isTrue(); + assertThat(test.get(3).doubleValue()).isEqualTo(45.67); + assertThat(test.get(4).isNull()).isTrue(); + } + + @Test + default void modifyArrayPreservesSize() { + FlowableArrayNode test = createArrayNode("[ 1, 2, 3, 4, 5 ]"); + + int originalSize = test.size(); + + test.set(0, 100); + test.set(4, 500); + + assertThat(test.size()).isEqualTo(originalSize); + assertThat(test.get(0).intValue()).isEqualTo(100); + assertThat(test.get(4).intValue()).isEqualTo(500); + } + + @Test + default void iterateArray() { + FlowableArrayNode test = createArrayNode(""" + [ + "first", + "second" + ] + """); + + List values = new ArrayList<>(test.size()); + for (FlowableJsonNode node : test) { + values.add(node.asString()); + } + + assertThat(values).containsExactly("first", "second"); + } + + @Test + default void removeFromArrayIterator() { + FlowableArrayNode test = createArrayNode(""" + [ + "first", + "second" + ] + """); + + Iterator iterator = test.iterator(); + iterator.next(); + iterator.remove(); + assertThat(test.size()).isEqualTo(1); + assertThat(test.get(0).asString()).isEqualTo("second"); + } + +} diff --git a/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson2Test.java b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson2Test.java new file mode 100644 index 00000000000..45ce87c5890 --- /dev/null +++ b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson2Test.java @@ -0,0 +1,141 @@ +/* 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 org.flowable.common.engine.impl.json; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.flowable.common.engine.impl.json.jackson2.FlowableJackson2JsonNode; +import org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper; +import org.flowable.common.engine.impl.json.jackson3.FlowableJackson3JsonNode; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.BigIntegerNode; +import com.fasterxml.jackson.databind.node.BooleanNode; +import com.fasterxml.jackson.databind.node.DecimalNode; +import com.fasterxml.jackson.databind.node.DoubleNode; +import com.fasterxml.jackson.databind.node.FloatNode; +import com.fasterxml.jackson.databind.node.IntNode; +import com.fasterxml.jackson.databind.node.LongNode; +import com.fasterxml.jackson.databind.node.MissingNode; +import com.fasterxml.jackson.databind.node.NullNode; +import com.fasterxml.jackson.databind.node.ShortNode; +import com.fasterxml.jackson.databind.node.TextNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson2Test implements FlowableJsonNodeTests, FlowableArrayNodeTests, FlowableObjectNodeTests, VariableJsonMapperTests { + + @Override + public VariableJsonMapper getVariableJsonMapper() { + return new Jackson2VariableJsonMapper(new ObjectMapper()); + } + + @Override + public Class getImplementationJsonNodeClass() { + return JsonNode.class; + } + + @Override + public Object createOtherTypeJsonNode(String json) { + return createOtherTypeJson(json).getImplementationValue(); + } + + @Override + public FlowableJsonNode create(String value) { + return FlowableJackson2JsonNode.wrap(value != null ? TextNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Long value) { + return FlowableJackson2JsonNode.wrap(value != null ? LongNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Integer value) { + return FlowableJackson2JsonNode.wrap(value != null ? IntNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Double value) { + return FlowableJackson2JsonNode.wrap(value != null ? DoubleNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Boolean value) { + return FlowableJackson2JsonNode.wrap(value != null ? BooleanNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Short value) { + return FlowableJackson2JsonNode.wrap(value != null ? ShortNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Float value) { + return FlowableJackson2JsonNode.wrap(value != null ? FloatNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(BigDecimal value) { + return FlowableJackson2JsonNode.wrap(value != null ? DecimalNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(BigInteger value) { + return FlowableJackson2JsonNode.wrap(value != null ? BigIntegerNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode createNull() { + return FlowableJackson2JsonNode.wrap(NullNode.getInstance()); + } + + @Override + public FlowableJsonNode createMissing() { + return FlowableJackson2JsonNode.wrap(MissingNode.getInstance()); + } + + @Override + public FlowableJsonNode wrapNull() { + return FlowableJackson2JsonNode.wrap(null); + } + + @Override + public FlowableObjectNode createObjectNode(String json) { + try { + JsonNode jsonNode = new ObjectMapper().readTree(json); + return (FlowableObjectNode) FlowableJackson2JsonNode.wrap(jsonNode); + } catch (JsonProcessingException e) { + throw new RuntimeException("Failed to parse JSON", e); + } + } + + @Override + public FlowableArrayNode createArrayNode(String json) { + try { + JsonNode jsonNode = new ObjectMapper().readTree(json); + return (FlowableArrayNode) FlowableJackson2JsonNode.wrap(jsonNode); + } catch (JsonProcessingException e) { + throw new RuntimeException("Failed to parse JSON", e); + } + } + + @Override + public FlowableJsonNode createOtherTypeJson(String json) { + return FlowableJackson3JsonNode.wrap(tools.jackson.databind.json.JsonMapper.shared().readTree(json)); + } +} diff --git a/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson3Test.java b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson3Test.java new file mode 100644 index 00000000000..11c150650bc --- /dev/null +++ b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJackson3Test.java @@ -0,0 +1,138 @@ +/* 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 org.flowable.common.engine.impl.json; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.flowable.common.engine.impl.json.jackson2.FlowableJackson2JsonNode; +import org.flowable.common.engine.impl.json.jackson3.FlowableJackson3JsonNode; +import org.flowable.common.engine.impl.json.jackson3.Jackson3VariableJsonMapper; + +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.node.BigIntegerNode; +import tools.jackson.databind.node.BooleanNode; +import tools.jackson.databind.node.DecimalNode; +import tools.jackson.databind.node.DoubleNode; +import tools.jackson.databind.node.FloatNode; +import tools.jackson.databind.node.IntNode; +import tools.jackson.databind.node.LongNode; +import tools.jackson.databind.node.MissingNode; +import tools.jackson.databind.node.NullNode; +import tools.jackson.databind.node.ShortNode; +import tools.jackson.databind.node.StringNode; + +/** + * @author Filip Hrisafov + */ +public class FlowableJackson3Test implements FlowableJsonNodeTests, FlowableArrayNodeTests, FlowableObjectNodeTests, VariableJsonMapperTests { + + @Override + public VariableJsonMapper getVariableJsonMapper() { + return new Jackson3VariableJsonMapper(JsonMapper.shared()); + } + + @Override + public Class getImplementationJsonNodeClass() { + return JsonNode.class; + } + + @Override + public Object createOtherTypeJsonNode(String json) { + return createOtherTypeJson(json).getImplementationValue(); + } + + @Override + public FlowableJsonNode create(String value) { + return FlowableJackson3JsonNode.wrap(value != null ? StringNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Long value) { + return FlowableJackson3JsonNode.wrap(value != null ? LongNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Integer value) { + return FlowableJackson3JsonNode.wrap(value != null ? IntNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Double value) { + return FlowableJackson3JsonNode.wrap(value != null ? DoubleNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Boolean value) { + return FlowableJackson3JsonNode.wrap(value != null ? BooleanNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Short value) { + return FlowableJackson3JsonNode.wrap(value != null ? ShortNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(Float value) { + return FlowableJackson3JsonNode.wrap(value != null ? FloatNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(BigDecimal value) { + return FlowableJackson3JsonNode.wrap(value != null ? DecimalNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode create(BigInteger value) { + return FlowableJackson3JsonNode.wrap(value != null ? BigIntegerNode.valueOf(value) : NullNode.getInstance()); + } + + @Override + public FlowableJsonNode createNull() { + return FlowableJackson3JsonNode.wrap(NullNode.getInstance()); + } + + @Override + public FlowableJsonNode createMissing() { + return FlowableJackson3JsonNode.wrap(MissingNode.getInstance()); + } + + @Override + public FlowableJsonNode wrapNull() { + return FlowableJackson3JsonNode.wrap(null); + } + + @Override + public FlowableObjectNode createObjectNode(String json) { + JsonNode jsonNode = JsonMapper.shared().readTree(json); + return (FlowableObjectNode) FlowableJackson3JsonNode.wrap(jsonNode); + } + + @Override + public FlowableArrayNode createArrayNode(String json) { + JsonNode jsonNode = JsonMapper.shared().readTree(json); + return (FlowableArrayNode) FlowableJackson3JsonNode.wrap(jsonNode); + } + + @Override + public FlowableJsonNode createOtherTypeJson(String json) { + try { + return FlowableJackson2JsonNode.wrap(new com.fasterxml.jackson.databind.ObjectMapper().readTree(json)); + } catch (IOException e) { + throw new UncheckedIOException("Failed to read json", e); + } + } +} diff --git a/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJsonNodeTests.java b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJsonNodeTests.java new file mode 100644 index 00000000000..86b9f028d1d --- /dev/null +++ b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableJsonNodeTests.java @@ -0,0 +1,397 @@ +/* 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 org.flowable.common.engine.impl.json; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.junit.jupiter.api.Test; + +/** + * @author Filip Hrisafov + */ +public interface FlowableJsonNodeTests extends TestJsonProvider { + + @Test + default void stringNode() { + FlowableJsonNode test = create("test"); + assertThat(test.isString()).isTrue(); + assertThat(test.asString()).isEqualTo("test"); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.getNodeType()).isEqualTo("STRING"); + + assertThat(test.isNull()).isFalse(); + assertThat(test.isLong()).isFalse(); + assertThat(test.isDouble()).isFalse(); + assertThat(test.isInt()).isFalse(); + assertThat(test.isBoolean()).isFalse(); + assertThat(test.isNumber()).isFalse(); + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.isContainer()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void emptyStringNode() { + FlowableJsonNode test = create(""); + assertThat(test.isString()).isTrue(); + assertThat(test.asString()).isEqualTo(""); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.asString("default")).isEqualTo(""); + } + + @Test + default void nullStringNode() { + FlowableJsonNode test = create((String) null); + assertThat(test.isString()).isFalse(); + assertThat(test.asString()).isEqualTo("null"); + assertThat(test.asString("default")).isEqualTo("default"); + assertThat(test.isNull()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.getNodeType()).isEqualTo("NULL"); + + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.size()).isZero(); + } + + @Test + default void longNode() { + FlowableJsonNode test = create(42L); + assertThat(test.isNumber()).isTrue(); + assertThat(test.isLong()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.asString()).isEqualTo("42"); + assertThat(test.numberValue()) + .isEqualTo(42L) + .isInstanceOf(Long.class); + assertThat(test.getNodeType()).isEqualTo("NUMBER"); + + assertThat(test.isString()).isFalse(); + assertThat(test.isDouble()).isFalse(); + assertThat(test.isInt()).isFalse(); + assertThat(test.isBoolean()).isFalse(); + assertThat(test.isNull()).isFalse(); + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.isContainer()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void nullLongNode() { + FlowableJsonNode test = create((Long) null); + assertThat(test.isNumber()).isFalse(); + assertThat(test.asString()).isEqualTo("null"); + assertThat(test.isNull()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.isMissingNode()).isFalse(); + } + + @Test + default void doubleNode() { + FlowableJsonNode test = create(65.4D); + assertThat(test.isNumber()).isTrue(); + assertThat(test.isDouble()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.asString()).isEqualTo("65.4"); + assertThat(test.numberValue()) + .isEqualTo(65.4d) + .isInstanceOf(Double.class); + assertThat(test.getNodeType()).isEqualTo("NUMBER"); + + assertThat(test.isString()).isFalse(); + assertThat(test.isLong()).isFalse(); + assertThat(test.isInt()).isFalse(); + assertThat(test.isBoolean()).isFalse(); + assertThat(test.isNull()).isFalse(); + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.isContainer()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void nullDoubleNode() { + FlowableJsonNode test = create((Double) null); + assertThat(test.isNumber()).isFalse(); + assertThat(test.asString()).isEqualTo("null"); + assertThat(test.isNull()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.isMissingNode()).isFalse(); + } + + @Test + default void intNode() { + FlowableJsonNode test = create(12); + assertThat(test.isNumber()).isTrue(); + assertThat(test.isInt()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.asString()).isEqualTo("12"); + assertThat(test.numberValue()) + .isEqualTo(12) + .isInstanceOf(Integer.class); + assertThat(test.getNodeType()).isEqualTo("NUMBER"); + + assertThat(test.isString()).isFalse(); + assertThat(test.isLong()).isFalse(); + assertThat(test.isDouble()).isFalse(); + assertThat(test.isBoolean()).isFalse(); + assertThat(test.isNull()).isFalse(); + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.isContainer()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void nullIntNode() { + FlowableJsonNode test = create((Integer) null); + assertThat(test.isNumber()).isFalse(); + assertThat(test.asString()).isEqualTo("null"); + assertThat(test.isNull()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.isMissingNode()).isFalse(); + } + + @Test + default void booleanNode() { + FlowableJsonNode test = create(true); + assertThat(test.isBoolean()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.asString()).isEqualTo("true"); + assertThat(test.getNodeType()).isEqualTo("BOOLEAN"); + + assertThat(test.isString()).isFalse(); + assertThat(test.isLong()).isFalse(); + assertThat(test.isDouble()).isFalse(); + assertThat(test.isInt()).isFalse(); + assertThat(test.isNull()).isFalse(); + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.isContainer()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void nullBooleanNode() { + FlowableJsonNode test = create((Boolean) null); + assertThat(test.isBoolean()).isFalse(); + assertThat(test.asString()).isEqualTo("null"); + assertThat(test.isNull()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.isMissingNode()).isFalse(); + } + + @Test + default void nullNode() { + FlowableJsonNode test = createNull(); + assertThat(test.asString()).isEqualTo("null"); + assertThat(test.isNull()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + + assertThat(test.isString()).isFalse(); + assertThat(test.isLong()).isFalse(); + assertThat(test.isDouble()).isFalse(); + assertThat(test.isInt()).isFalse(); + assertThat(test.isBoolean()).isFalse(); + assertThat(test.isNumber()).isFalse(); + assertThat(test.isMissingNode()).isFalse(); + assertThat(test.isContainer()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void missingNode() { + FlowableJsonNode test = createMissing(); + assertThat(test.asString()).isEqualTo(""); + assertThat(test.isMissingNode()).isTrue(); + assertThat(test.getNodeType()).isEqualTo("MISSING"); + + assertThat(test.isNull()).isFalse(); + assertThat(test.isValueNode()).isFalse(); + assertThat(test.isString()).isFalse(); + assertThat(test.isLong()).isFalse(); + assertThat(test.isDouble()).isFalse(); + assertThat(test.isInt()).isFalse(); + assertThat(test.isBoolean()).isFalse(); + assertThat(test.isNumber()).isFalse(); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void wrapNullNode() { + FlowableJsonNode test = wrapNull(); + assertThat(test).isNull(); + } + + @Test + default void longValueExtraction() { + FlowableJsonNode test = create(100L); + assertThat(test.longValue()).isEqualTo(100L); + assertThat(test.intValue()).isEqualTo(100); + assertThat(test.doubleValue()).isEqualTo(100.0); + } + + @Test + default void intValueExtraction() { + FlowableJsonNode test = create(42); + assertThat(test.intValue()).isEqualTo(42); + assertThat(test.longValue()).isEqualTo(42L); + assertThat(test.doubleValue()).isEqualTo(42.0); + } + + @Test + default void doubleValueExtraction() { + FlowableJsonNode test = create(3.14); + assertThat(test.isDouble()).isTrue(); + assertThat(test.isDouble()).isTrue(); + assertThat(test.doubleValue()).isEqualTo(3.14); + assertThat(test.intValue()).isEqualTo(3); + assertThat(test.longValue()).isEqualTo(3L); + } + + @Test + default void booleanValueExtraction() { + FlowableJsonNode trueNode = create(true); + assertThat(trueNode.booleanValue()).isTrue(); + + FlowableJsonNode falseNode = create(false); + assertThat(falseNode.booleanValue()).isFalse(); + } + + @Test + default void shortNode() { + FlowableJsonNode test = create((short) 5); + assertThat(test.isShort()).isTrue(); + assertThat(test.isNumber()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.intValue()).isEqualTo(5); + assertThat(test.asString()).isEqualTo("5"); + assertThat(test.numberValue()) + .isEqualTo((short) 5) + .isInstanceOf(Short.class); + assertThat(test.getNodeType()).isEqualTo("NUMBER"); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void floatNode() { + FlowableJsonNode test = create(2.5f); + assertThat(test.isFloat()).isTrue(); + assertThat(test.isNumber()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.doubleValue()).isEqualTo(2.5); + assertThat(test.asString()).isEqualTo("2.5"); + assertThat(test.numberValue()) + .isEqualTo((float) 2.5) + .isInstanceOf(Float.class); + assertThat(test.getNodeType()).isEqualTo("NUMBER"); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void bigDecimalNode() { + FlowableJsonNode test = create(BigDecimal.valueOf(123.456)); + assertThat(test.isBigDecimal()).isTrue(); + assertThat(test.isNumber()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.asString()).isEqualTo("123.456"); + assertThat(test.numberValue()) + .isEqualTo(BigDecimal.valueOf(123.456)) + .isInstanceOf(BigDecimal.class); + assertThat(test.getNodeType()).isEqualTo("NUMBER"); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } + + @Test + default void bigIntegerNode() { + FlowableJsonNode test = create(BigInteger.valueOf(420)); + assertThat(test.isBigInteger()).isTrue(); + assertThat(test.isNumber()).isTrue(); + assertThat(test.isValueNode()).isTrue(); + assertThat(test.asString()).isEqualTo("420"); + assertThat(test.numberValue()) + .isEqualTo(BigInteger.valueOf(420)) + .isInstanceOf(BigInteger.class); + assertThat(test.intValue()).isEqualTo(420); + assertThat(test.longValue()).isEqualTo(420); + assertThat(test.getNodeType()).isEqualTo("NUMBER"); + assertThat(test.size()).isZero(); + assertThat(test.path(0).isMissingNode()).isTrue(); + assertThat(test.path("dummy").isMissingNode()).isTrue(); + assertThat(test.get(0)).isNull(); + assertThat(test.get("dummy")).isNull(); + assertThat(test.propertyNames()).isEmpty(); + assertThat(test.has("dummy")).isFalse(); + } +} diff --git a/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableObjectNodeTests.java b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableObjectNodeTests.java new file mode 100644 index 00000000000..9369ecf05bc --- /dev/null +++ b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/FlowableObjectNodeTests.java @@ -0,0 +1,714 @@ +/* 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 org.flowable.common.engine.impl.json; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import org.junit.jupiter.api.Test; + +/** + * @author Filip Hrisafov + */ +public interface FlowableObjectNodeTests extends TestJsonProvider { + + @Test + default void objectNode() { + FlowableJsonNode test = createObjectNode(""" + { + "name": "John", + "age": 30, + "active": true + } + """); + + assertThat(test.isValueNode()).isFalse(); + assertThat(test.isContainer()).isTrue(); + assertThat(test.getNodeType()).isEqualTo("OBJECT"); + assertThat(test.propertyNames()).containsExactlyInAnyOrder("name", "age", "active"); + } + + @Test + default void objectNodeGetProperty() { + FlowableJsonNode test = createObjectNode(""" + { + "name": "John", + "age": 30, + "active": true + } + """); + + assertThat(test.isValueNode()).isFalse(); + assertThat(test.size()).isEqualTo(3); + + FlowableJsonNode name = test.get("name"); + assertThat(name).isNotNull(); + assertThat(name.isString()).isTrue(); + assertThat(name.asString()).isEqualTo("John"); + + FlowableJsonNode age = test.get("age"); + assertThat(age).isNotNull(); + assertThat(age.isInt()).isTrue(); + assertThat(age.intValue()).isEqualTo(30); + + FlowableJsonNode active = test.get("active"); + assertThat(active).isNotNull(); + assertThat(active.isBoolean()).isTrue(); + assertThat(active.booleanValue()).isTrue(); + } + + @Test + default void objectNodeGetNonExistentProperty() { + FlowableJsonNode test = createObjectNode(""" + { "name": "John" } + """); + + FlowableJsonNode missing = test.get("nonExistent"); + assertThat(missing).isNull(); + } + + @Test + default void nestedObjectInObject() { + FlowableJsonNode test = createObjectNode(""" + { + "person": { + "name": "John", + "age":30 + } + } + """); + + FlowableJsonNode person = test.get("person"); + assertThat(person).isNotNull(); + assertThat(person.isValueNode()).isFalse(); + assertThat(person.size()).isEqualTo(2); + + FlowableJsonNode name = person.get("name"); + assertThat(name).isNotNull(); + assertThat(name.asString()).isEqualTo("John"); + + FlowableJsonNode age = person.get("age"); + assertThat(age).isNotNull(); + assertThat(age.intValue()).isEqualTo(30); + } + + @Test + default void nestedArrayInObject() { + FlowableJsonNode test = createObjectNode(""" + { + "numbers": [1, 2, 3] + } + """); + + FlowableJsonNode numbers = test.get("numbers"); + assertThat(numbers).isNotNull(); + assertThat(numbers.isValueNode()).isFalse(); + assertThat(numbers.size()).isEqualTo(3); + + FlowableJsonNode first = numbers.get(0); + assertThat(first).isNotNull(); + assertThat(first.intValue()).isEqualTo(1); + } + + @Test + default void emptyObjectSize() { + FlowableJsonNode test = createObjectNode("{}"); + assertThat(test.size()).isEqualTo(0); + assertThat(test.isValueNode()).isFalse(); + } + + @Test + default void objectWithNullProperty() { + FlowableJsonNode test = createObjectNode(""" + { + "name": "John", + "middleName":null + } + """); + + FlowableJsonNode middleName = test.get("middleName"); + assertThat(middleName).isNotNull(); + assertThat(middleName.isNull()).isTrue(); + assertThat(middleName.asString()).isEqualTo("null"); + } + + @Test + default void putStringValue() { + FlowableObjectNode test = createObjectNode(""" + { + "name": "John", + "age":30 + } + """); + + test.put("name", "Jane"); + test.put("city", "New York"); + + FlowableJsonNode name = test.get("name"); + assertThat(name).isNotNull(); + assertThat(name.isString()).isTrue(); + assertThat(name.asString()).isEqualTo("Jane"); + + FlowableJsonNode city = test.get("city"); + assertThat(city).isNotNull(); + assertThat(city.isString()).isTrue(); + assertThat(city.asString()).isEqualTo("New York"); + + // Verify other properties unchanged + assertThat(test.get("age").intValue()).isEqualTo(30); + } + + @Test + default void putBooleanValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("active", true); + test.put("verified", false); + + FlowableJsonNode active = test.get("active"); + assertThat(active).isNotNull(); + assertThat(active.isBoolean()).isTrue(); + assertThat(active.booleanValue()).isTrue(); + + FlowableJsonNode verified = test.get("verified"); + assertThat(verified).isNotNull(); + assertThat(verified.isBoolean()).isTrue(); + assertThat(verified.booleanValue()).isFalse(); + } + + @Test + default void putIntegerValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("age", 30); + test.put("count", 42); + + FlowableJsonNode age = test.get("age"); + assertThat(age).isNotNull(); + assertThat(age.isInt()).isTrue(); + assertThat(age.intValue()).isEqualTo(30); + + FlowableJsonNode count = test.get("count"); + assertThat(count).isNotNull(); + assertThat(count.isInt()).isTrue(); + assertThat(count.intValue()).isEqualTo(42); + } + + @Test + default void putShortValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("value", (short) 100); + + FlowableJsonNode value = test.get("value"); + assertThat(value).isNotNull(); + assertThat(value.isShort()).isTrue(); + assertThat(value.intValue()).isEqualTo(100); + } + + @Test + default void putLongValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("timestamp", 9223372036854775807L); + + FlowableJsonNode timestamp = test.get("timestamp"); + assertThat(timestamp).isNotNull(); + assertThat(timestamp.isLong()).isTrue(); + assertThat(timestamp.longValue()).isEqualTo(9223372036854775807L); + } + + @Test + default void putDoubleValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("price", 99.99); + test.put("pi", 3.14159); + + FlowableJsonNode price = test.get("price"); + assertThat(price).isNotNull(); + assertThat(price.isDouble()).isTrue(); + assertThat(price.doubleValue()).isEqualTo(99.99); + + FlowableJsonNode pi = test.get("pi"); + assertThat(pi).isNotNull(); + assertThat(pi.isDouble()).isTrue(); + assertThat(pi.doubleValue()).isEqualTo(3.14159); + } + + @Test + default void putFloatValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("price", (float) 99.99); + test.put("pi", (float) 3.14159); + + FlowableJsonNode price = test.get("price"); + assertThat(price).isNotNull(); + assertThat(price.isDouble()).isFalse(); + assertThat(price.isFloat()).isTrue(); + + FlowableJsonNode pi = test.get("pi"); + assertThat(pi).isNotNull(); + assertThat(pi.isDouble()).isFalse(); + assertThat(pi.isFloat()).isTrue(); + + } + + @Test + default void putBigDecimalValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + BigDecimal bigDecimal = new BigDecimal("123456789.987654321"); + test.put("amount", bigDecimal); + + FlowableJsonNode amount = test.get("amount"); + assertThat(amount).isNotNull(); + assertThat(amount.isBigDecimal()).isTrue(); + assertThat(amount.asString()).isEqualTo("123456789.987654321"); + } + + @Test + default void putBigIntegerValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + BigInteger bigInteger = new BigInteger("12345678901234567890"); + test.put("bigNumber", bigInteger); + + FlowableJsonNode bigNumber = test.get("bigNumber"); + assertThat(bigNumber).isNotNull(); + assertThat(bigNumber.isNumber()).isTrue(); + assertThat(bigNumber.asString()).isEqualTo("12345678901234567890"); + } + + @Test + default void putByteArrayValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + byte[] data = new byte[] { 1, 2, 3, 4, 5 }; + test.put("data", data); + + FlowableJsonNode dataNode = test.get("data"); + assertThat(dataNode).isNotNull(); + // Byte arrays are typically encoded as base64 strings in JSON + assertThat(dataNode).isNotNull(); + } + + @Test + default void putNullValue() { + FlowableObjectNode test = createObjectNode(""" + { + "name": "John", + "age": 30 + } + """); + + test.putNull("middleName"); + test.putNull("age"); + + FlowableJsonNode middleName = test.get("middleName"); + assertThat(middleName).isNotNull(); + assertThat(middleName.isNull()).isTrue(); + assertThat(middleName.asString()).isEqualTo("null"); + + FlowableJsonNode age = test.get("age"); + assertThat(age).isNotNull(); + assertThat(age.isNull()).isTrue(); + + // Verify other properties unchanged + assertThat(test.get("name").asString()).isEqualTo("John"); + } + + @Test + default void putNullStringValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("middleName", (String) null); + + FlowableJsonNode middleName = test.get("middleName"); + assertThat(middleName).isNotNull(); + assertThat(middleName.isNull()).isTrue(); + } + + @Test + default void putNullBooleanValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("active", (Boolean) null); + + FlowableJsonNode active = test.get("active"); + assertThat(active).isNotNull(); + assertThat(active.isNull()).isTrue(); + } + + @Test + default void putNullIntegerValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("age", (Integer) null); + + FlowableJsonNode age = test.get("age"); + assertThat(age).isNotNull(); + assertThat(age.isNull()).isTrue(); + } + + @Test + default void putNullShortValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("value", (Short) null); + + FlowableJsonNode value = test.get("value"); + assertThat(value).isNotNull(); + assertThat(value.isNull()).isTrue(); + } + + @Test + default void putNullLongValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("timestamp", (Long) null); + + FlowableJsonNode timestamp = test.get("timestamp"); + assertThat(timestamp).isNotNull(); + assertThat(timestamp.isNull()).isTrue(); + } + + @Test + default void putNullDoubleValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("price", (Double) null); + + FlowableJsonNode price = test.get("price"); + assertThat(price).isNotNull(); + assertThat(price.isNull()).isTrue(); + } + + @Test + default void putNullBigDecimalValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("amount", (BigDecimal) null); + + FlowableJsonNode amount = test.get("amount"); + assertThat(amount).isNotNull(); + assertThat(amount.isNull()).isTrue(); + } + + @Test + default void putNullBigIntegerValue() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("bigNumber", (BigInteger) null); + + FlowableJsonNode bigNumber = test.get("bigNumber"); + assertThat(bigNumber).isNotNull(); + assertThat(bigNumber.isNull()).isTrue(); + } + + @Test + default void setJsonNodeOnObjectWithString() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.set("city", create("Boston")); + + FlowableJsonNode city = test.get("city"); + assertThat(city).isNotNull(); + assertThat(city.isString()).isTrue(); + assertThat(city.asString()).isEqualTo("Boston"); + } + + @Test + default void setJsonNodeOnObjectWithOtherJacksonNode() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.set("address", createOtherTypeJson(""" + { + "city": "Boston" + } + """)); + + FlowableJsonNode address = test.get("address"); + assertThat(address).isNotNull(); + FlowableJsonNode city = address.get("city"); + assertThat(city.isString()).isTrue(); + assertThat(city.asString()).isEqualTo("Boston"); + } + + @Test + default void setJsonNodeOnObjectWithNumber() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.set("count", create(999)); + + FlowableJsonNode count = test.get("count"); + assertThat(count).isNotNull(); + assertThat(count.isInt()).isTrue(); + assertThat(count.intValue()).isEqualTo(999); + } + + @Test + default void setJsonNodeOnObjectWithNullNode() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.set("middleName", createNull()); + + FlowableJsonNode middleName = test.get("middleName"); + assertThat(middleName).isNotNull(); + assertThat(middleName.isNull()).isTrue(); + } + + @Test + default void setJsonNodeOnObjectWithNull() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.set("middleName", null); + + assertThat(test.size()).isEqualTo(2); + FlowableJsonNode node = test.get("middleName"); + assertThat(node).isNotNull(); + assertThat(node.isNull()).isTrue(); + } + + @Test + default void setJsonNodeWithObject() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + FlowableObjectNode address = createObjectNode(""" + { + "city": "Boston", + "zip": "02101" + } + """); + test.set("address", address); + + FlowableJsonNode addressNode = test.get("address"); + assertThat(addressNode).isNotNull(); + assertThat(addressNode.isValueNode()).isFalse(); + assertThat(addressNode.get("city").asString()).isEqualTo("Boston"); + assertThat(addressNode.get("zip").asString()).isEqualTo("02101"); + } + + @Test + default void setJsonNodeWithArray() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + FlowableArrayNode tags = createArrayNode("[\"developer\",\"java\",\"flowable\"]"); + test.set("tags", tags); + + FlowableJsonNode tagsNode = test.get("tags"); + assertThat(tagsNode).isNotNull(); + assertThat(tagsNode.isValueNode()).isFalse(); + assertThat(tagsNode.size()).isEqualTo(3); + assertThat(tagsNode.get(0).asString()).isEqualTo("developer"); + } + + @Test + default void putArray() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + assertThat(test.propertyNames()).containsExactlyInAnyOrder("name"); + FlowableArrayNode tags = test.putArray("tags"); + assertThat(tags.size()).isZero(); + assertThat(test.propertyNames()).containsExactlyInAnyOrder("name", "tags"); + + tags.add("developer"); + tags.add("java"); + tags.add("flowable"); + + FlowableJsonNode tagsNode = test.get("tags"); + assertThat(tagsNode).isNotNull(); + assertThat(tagsNode.isValueNode()).isFalse(); + assertThat(tagsNode.size()).isEqualTo(3); + assertThat(tagsNode.get(0).asString()).isEqualTo("developer"); + assertThat(tagsNode.get(1).asString()).isEqualTo("java"); + assertThat(tagsNode.get(2).asString()).isEqualTo("flowable"); + } + + @Test + default void putObjectCreatesNestedObject() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + FlowableObjectNode address = test.putObject("address"); + assertThat(address).isNotNull(); + + address.put("city", "Boston"); + address.put("zip", "02101"); + + FlowableJsonNode addressNode = test.get("address"); + assertThat(addressNode).isNotNull(); + assertThat(addressNode.isValueNode()).isFalse(); + assertThat(addressNode.get("city").asString()).isEqualTo("Boston"); + assertThat(addressNode.get("zip").asString()).isEqualTo("02101"); + } + + @Test + default void putMultipleTypesInObject() { + FlowableObjectNode test = createObjectNode("{}"); + + test.put("name", "John"); + test.put("age", 30); + test.put("active", true); + test.put("salary", 50000.50); + test.putNull("middleName"); + + assertThat(test.get("name").asString()).isEqualTo("John"); + assertThat(test.get("age").intValue()).isEqualTo(30); + assertThat(test.get("active").booleanValue()).isTrue(); + assertThat(test.get("salary").doubleValue()).isEqualTo(50000.50); + assertThat(test.get("middleName").isNull()).isTrue(); + } + + @Test + default void overwritePropertyWithDifferentType() { + FlowableObjectNode test = createObjectNode(""" + { "value": "text" } + """); + + FlowableJsonNode original = test.get("value"); + assertThat(original.isString()).isTrue(); + assertThat(original.asString()).isEqualTo("text"); + + test.put("value", 42); + + FlowableJsonNode modified = test.get("value"); + assertThat(modified.isInt()).isTrue(); + assertThat(modified.intValue()).isEqualTo(42); + } + + @Test + default void overwritePropertyWithSameType() { + FlowableObjectNode test = createObjectNode(""" + { "name": "John" } + """); + + test.put("name", "Jane"); + test.put("name", "Bob"); + + FlowableJsonNode name = test.get("name"); + assertThat(name.asString()).isEqualTo("Bob"); + } + + @Test + default void buildObjectFromScratch() { + FlowableObjectNode test = createObjectNode("{}"); + + assertThat(test.size()).isEqualTo(0); + + test.put("firstName", "John"); + test.put("lastName", "Doe"); + test.put("age", 30); + test.put("active", true); + + assertThat(test.size()).isEqualTo(4); + assertThat(test.get("firstName").asString()).isEqualTo("John"); + assertThat(test.get("lastName").asString()).isEqualTo("Doe"); + assertThat(test.get("age").intValue()).isEqualTo(30); + assertThat(test.get("active").booleanValue()).isTrue(); + } + + @Test + default void createDeeplyNestedObjects() { + FlowableObjectNode test = createObjectNode("{}"); + + FlowableObjectNode person = test.putObject("person"); + person.put("name", "John"); + + FlowableObjectNode address = person.putObject("address"); + address.put("street", "123 Main St"); + + FlowableObjectNode location = address.putObject("location"); + location.put("city", "Boston"); + location.put("state", "MA"); + + FlowableJsonNode city = test.get("person").get("address").get("location").get("city"); + assertThat(city).isNotNull(); + assertThat(city.asString()).isEqualTo("Boston"); + } + + @Test + default void modifyObjectPreservesOtherProperties() { + FlowableObjectNode test = createObjectNode(""" + { + "name": "John", + "age": 30, + "city": "Boston" + } + """); + + int originalSize = test.size(); + + test.put("age", 31); + + assertThat(test.size()).isEqualTo(originalSize); + assertThat(test.get("name").asString()).isEqualTo("John"); + assertThat(test.get("age").intValue()).isEqualTo(31); + assertThat(test.get("city").asString()).isEqualTo("Boston"); + } + +} diff --git a/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/TestJsonProvider.java b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/TestJsonProvider.java new file mode 100644 index 00000000000..86f88e907bf --- /dev/null +++ b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/TestJsonProvider.java @@ -0,0 +1,53 @@ +/* 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 org.flowable.common.engine.impl.json; + +import java.math.BigDecimal; +import java.math.BigInteger; + +/** + * @author Filip Hrisafov + */ +public interface TestJsonProvider { + + FlowableJsonNode create(String value); + + FlowableJsonNode create(Long value); + + FlowableJsonNode create(Integer value); + + FlowableJsonNode create(Double value); + + FlowableJsonNode create(Boolean value); + + FlowableJsonNode create(Short value); + + FlowableJsonNode create(Float value); + + FlowableJsonNode create(BigDecimal value); + + FlowableJsonNode create(BigInteger value); + + FlowableJsonNode createNull(); + + FlowableJsonNode createMissing(); + + FlowableJsonNode wrapNull(); + + FlowableObjectNode createObjectNode(String json); + + FlowableArrayNode createArrayNode(String json); + + FlowableJsonNode createOtherTypeJson(String json); + +} diff --git a/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/VariableJsonMapperTests.java b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/VariableJsonMapperTests.java new file mode 100644 index 00000000000..98fc6ede0ce --- /dev/null +++ b/modules/flowable-engine-common/src/test/java/org/flowable/common/engine/impl/json/VariableJsonMapperTests.java @@ -0,0 +1,354 @@ +/* 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 org.flowable.common.engine.impl.json; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; + +import org.junit.jupiter.api.Test; + +/** + * @author Filip Hrisafov + */ +public interface VariableJsonMapperTests { + + VariableJsonMapper getVariableJsonMapper(); + + Class getImplementationJsonNodeClass(); + + Object createOtherTypeJsonNode(String json); + + @Test + default void readTreeFromString() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = """ + { + "name": "John", + "age": 30, + "active": true + } + """; + + Object jsonNode = mapper.readTree(json); + + assertThat(jsonNode).isNotNull(); + assertThat(jsonNode).isInstanceOf(getImplementationJsonNodeClass()); + assertThatJson(jsonNode) + .isEqualTo(""" + { + name: 'John', + age: 30, + active: true + } + """); + } + + @Test + default void readTreeFromStringWithArray() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = """ + [1, 2, 3, "test", true] + """; + + Object jsonNode = mapper.readTree(json); + + assertThat(jsonNode).isNotNull(); + assertThat(jsonNode).isInstanceOf(getImplementationJsonNodeClass()); + assertThatJson(jsonNode) + .isEqualTo(""" + [ + 1, 2, 3, "test", true + ] + """); + } + + @Test + default void readTreeFromStringWithNull() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = "null"; + + Object jsonNode = mapper.readTree(json); + + assertThat(jsonNode).isNotNull(); + assertThat(jsonNode).isInstanceOf(getImplementationJsonNodeClass()); + } + + @Test + default void readTreeFromStringWithInvalidJson() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = "{ invalid json }"; + + assertThatThrownBy(() -> mapper.readTree(json)); + } + + @Test + default void readTreeFromBytes() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = """ + { + "name": "John", + "age": 30 + } + """; + byte[] bytes = json.getBytes(StandardCharsets.UTF_8); + + Object jsonNode = mapper.readTree(bytes); + + assertThat(jsonNode).isNotNull(); + assertThat(jsonNode).isInstanceOf(getImplementationJsonNodeClass()); + assertThatJson(jsonNode) + .isEqualTo(""" + { + name: 'John', + age: 30 + } + """); + } + + @Test + default void readTreeFromBytesWithArray() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = """ + ["value1", "value2"] + """; + byte[] bytes = json.getBytes(StandardCharsets.UTF_8); + + Object jsonNode = mapper.readTree(bytes); + + assertThat(jsonNode).isNotNull(); + assertThat(jsonNode).isInstanceOf(getImplementationJsonNodeClass()); + assertThatJson(jsonNode) + .isEqualTo(""" + [ + "value1", + "value2" + ] + """); + } + + @Test + default void readTreeFromBytesWithInvalidJson() { + VariableJsonMapper mapper = getVariableJsonMapper(); + byte[] bytes = "{ invalid }".getBytes(StandardCharsets.UTF_8); + + assertThatThrownBy(() -> mapper.readTree(bytes)); + } + + @Test + default void deepCopyObject() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = """ + { + "name": "John", + "age": 30 + } + """; + Object original = mapper.readTree(json); + + Object copy = mapper.deepCopy(original); + + assertThat(copy).isNotNull(); + assertThat(copy).isNotSameAs(original); + assertThat(copy).isInstanceOf(getImplementationJsonNodeClass()); + } + + @Test + default void deepCopyArray() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = """ + [1, 2, 3] + """; + Object original = mapper.readTree(json); + + Object copy = mapper.deepCopy(original); + + assertThat(copy).isNotNull(); + assertThat(copy).isNotSameAs(original); + assertThat(copy).isInstanceOf(getImplementationJsonNodeClass()); + } + + @Test + default void isJsonNodeWithJsonNode() { + VariableJsonMapper mapper = getVariableJsonMapper(); + Object jsonNode = mapper.readTree("{}"); + + boolean result = mapper.isJsonNode(jsonNode); + + assertThat(result).isTrue(); + } + + @Test + default void isJsonNodeWithNonJsonNode() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + boolean result = mapper.isJsonNode("not a json node"); + + assertThat(result).isFalse(); + } + + @Test + default void isJsonNodeWithNull() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + boolean result = mapper.isJsonNode(null); + + assertThat(result).isFalse(); + } + + @Test + default void createObjectNode() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + FlowableObjectNode objectNode = mapper.createObjectNode(); + + assertThat(objectNode).isNotNull(); + assertThat(objectNode.getImplementationValue()).isInstanceOf(getImplementationJsonNodeClass()); + } + + @Test + default void createObjectNodeAndAddProperties() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + FlowableObjectNode objectNode = mapper.createObjectNode(); + objectNode.put("stringProp", "value"); + objectNode.put("intProp", 42); + objectNode.put("longProp", 123L); + objectNode.put("doubleProp", 3.14); + objectNode.put("boolProp", true); + objectNode.put("shortProp", (short) 10); + objectNode.put("bigDecimalProp", new BigDecimal("123.456")); + objectNode.put("bigIntegerProp", new BigInteger("9876543210")); + objectNode.putNull("nullProp"); + + assertThatJson(objectNode.getImplementationValue()) + .isEqualTo(""" + { + stringProp: 'value', + intProp: 42, + longProp: 123, + doubleProp: 3.14, + boolProp: true, + shortProp: 10, + bigDecimalProp: 123.456, + bigIntegerProp: 9876543210, + nullProp: null + } + """); + } + + @Test + default void createObjectNodeWithNestedObject() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + FlowableObjectNode objectNode = mapper.createObjectNode(); + FlowableObjectNode nestedObject = objectNode.putObject("nested"); + nestedObject.put("name", "John"); + nestedObject.put("age", 30); + + assertThatJson(objectNode.getImplementationValue()) + .isEqualTo(""" + { + nested: { + name: 'John', + age: 30 + } + } + """); + } + + @Test + default void createArrayNode() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + FlowableArrayNode arrayNode = mapper.createArrayNode(); + + assertThat(arrayNode).isNotNull(); + assertThat(arrayNode.getImplementationValue()).isInstanceOf(getImplementationJsonNodeClass()); + } + + @Test + default void readTreeAndDeepCopyComplexObject() { + VariableJsonMapper mapper = getVariableJsonMapper(); + String json = """ + { + "person": { + "name": "John", + "age": 30, + "addresses": [ + { + "street": "Main St", + "city": "New York" + }, + { + "street": "Second St", + "city": "Boston" + } + ] + }, + "active": true + } + """; + Object original = mapper.readTree(json); + + Object copy = mapper.deepCopy(original); + + assertThat(copy).isNotNull(); + assertThat(copy).isNotSameAs(original); + assertThat(mapper.isJsonNode(copy)).isTrue(); + } + + @Test + default void transformToJsonNodeWhenUsingOtherTypeJson() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + Object original = createOtherTypeJsonNode(""" + { + "person": { + "name": "John", + "age": 30 + }, + "active": true + } + """); + assertThat(original).isNotInstanceOf(getImplementationJsonNodeClass()); + + Object transformed = mapper.transformToJsonNode(original); + + assertThat(transformed).isInstanceOf(getImplementationJsonNodeClass()); + assertThat(transformed).isNotSameAs(original); + } + + @Test + default void transformToJsonNodeWhenUsingSameTypeJson() { + VariableJsonMapper mapper = getVariableJsonMapper(); + + Object original = mapper.readTree(""" + { + "person": { + "name": "John", + "age": 30 + }, + "active": true + } + """); + + Object transformed = mapper.transformToJsonNode(original); + + assertThat(transformed).isSameAs(original); + } +} diff --git a/modules/flowable-engine/pom.xml b/modules/flowable-engine/pom.xml index 64936151083..a3b13d30155 100755 --- a/modules/flowable-engine/pom.xml +++ b/modules/flowable-engine/pom.xml @@ -275,6 +275,11 @@ nashorn-core test + + com.fasterxml.jackson.core + jackson-databind + test + diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java index 70a93f88325..9fd9dccec3b 100755 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/UserTaskActivityBehavior.java @@ -17,9 +17,7 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.Date; import java.util.List; @@ -31,6 +29,7 @@ import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType; import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher; import org.flowable.common.engine.api.scope.ScopeTypes; +import org.flowable.common.engine.impl.assignment.CandidateUtil; import org.flowable.common.engine.impl.calendar.BusinessCalendar; import org.flowable.common.engine.impl.calendar.DueDateBusinessCalendar; import org.flowable.common.engine.impl.el.ExpressionManager; @@ -62,8 +61,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.node.ArrayNode; import tools.jackson.databind.node.ObjectNode; /** @@ -489,24 +486,7 @@ protected void handleAssignments(TaskService taskService, String assignee, Strin } protected Collection extractCandidates(Object value) { - if (value instanceof Collection) { - return (Collection) value; - } else if (value instanceof ArrayNode valueArrayNode) { - Collection candidates = new ArrayList<>(valueArrayNode.size()); - for (JsonNode node : valueArrayNode) { - candidates.add(node.asText()); - } - - return candidates; - } else if (value != null) { - String str = value.toString(); - if (StringUtils.isNotEmpty(str)) { - return Arrays.asList(value.toString().split("[\\s]*,[\\s]*")); - } - } - - return Collections.emptyList(); - + return CandidateUtil.extractCandidates(value); } protected String getAssigneeValue(UserTask userTask, MigrationContext migrationContext, ObjectNode taskElementProperties) { diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/ProcessEngineConfigurationImpl.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/ProcessEngineConfigurationImpl.java index c946deec776..f35dd0bcbc5 100755 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/ProcessEngineConfigurationImpl.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cfg/ProcessEngineConfigurationImpl.java @@ -93,6 +93,8 @@ import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; import org.flowable.common.engine.impl.interceptor.SessionFactory; import org.flowable.common.engine.impl.javax.el.ELResolver; +import org.flowable.common.engine.impl.json.VariableJsonMapper; +import org.flowable.common.engine.impl.json.jackson3.Jackson3VariableJsonMapper; import org.flowable.common.engine.impl.logging.LoggingSession; import org.flowable.common.engine.impl.logging.LoggingSessionFactory; import org.flowable.common.engine.impl.persistence.GenericManagerFactory; @@ -722,6 +724,8 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig */ protected boolean jsonVariableTypeTrackObjects = true; + protected VariableJsonMapper variableJsonMapper; + /** * Whether the Parallel Multi instance should perform the leave operation through an async exclusive job. * When this is true then non exclusive parallel multi instances can run in non exclusive asynchronously without an exception being thrown. @@ -1339,6 +1343,7 @@ public void configureVariableServiceConfiguration() { this.variableServiceConfiguration.setMaxLengthString(this.getMaxLengthString()); this.variableServiceConfiguration.setSerializableVariableTypeTrackDeserializedObjects(this.isSerializableVariableTypeTrackDeserializedObjects()); + this.variableServiceConfiguration.setVariableJsonMapper(this.variableJsonMapper); this.variableServiceConfiguration.setLoggingSessionEnabled(isLoggingSessionEnabled()); this.variableServiceConfiguration.setConfigurators(variableServiceConfigurators); } @@ -2193,9 +2198,9 @@ public void initVariableTypes() { variableTypes.addType(new BigDecimalType()); variableTypes.addType(new BigIntegerType()); variableTypes.addType(new UUIDType()); - variableTypes.addType(new JsonType(getMaxLengthString(), variableLengthVerifier, objectMapper, jsonVariableTypeTrackObjects)); + variableTypes.addType(new JsonType(getMaxLengthString(), variableLengthVerifier, variableJsonMapper, jsonVariableTypeTrackObjects)); // longJsonType only needed for reading purposes - variableTypes.addType(JsonType.longJsonType(getMaxLengthString(), variableLengthVerifier, objectMapper, jsonVariableTypeTrackObjects)); + variableTypes.addType(JsonType.longJsonType(getMaxLengthString(), variableLengthVerifier, variableJsonMapper, jsonVariableTypeTrackObjects)); variableTypes.addType(new ParallelMultiInstanceLoopVariableType(this)); variableTypes.addType(new BpmnAggregatedVariableType(this)); variableTypes.addType(new ByteArrayType(variableLengthVerifier)); @@ -2296,6 +2301,14 @@ protected void initScriptEngine() { } } + @Override + public void initObjectMapper() { + super.initObjectMapper(); + if (variableJsonMapper == null) { + variableJsonMapper = new Jackson3VariableJsonMapper(objectMapper); + } + } + public void initExpressionManager() { if (expressionManager == null) { ProcessExpressionManager processExpressionManager = new ProcessExpressionManager(delegateInterceptor, beans); @@ -3224,6 +3237,17 @@ public ProcessEngineConfigurationImpl setJsonVariableTypeTrackObjects(boolean js return this; } + @Override + public VariableJsonMapper getVariableJsonMapper() { + return variableJsonMapper; + } + + @Override + public ProcessEngineConfigurationImpl setVariableJsonMapper(VariableJsonMapper variableJsonMapper) { + this.variableJsonMapper = variableJsonMapper; + return this; + } + public boolean isParallelMultiInstanceAsyncLeave() { return parallelMultiInstanceAsyncLeave; } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java index 7e8a15a1df5..5b33a31a7b7 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delegate/JsonVariableAggregator.java @@ -20,6 +20,10 @@ import org.apache.commons.lang3.StringUtils; import org.flowable.bpmn.model.VariableAggregationDefinition; import org.flowable.common.engine.api.FlowableException; +import org.flowable.common.engine.impl.json.FlowableArrayNode; +import org.flowable.common.engine.impl.json.FlowableObjectNode; +import org.flowable.common.engine.impl.json.VariableJsonMapper; +import org.flowable.common.engine.impl.util.JsonUtil; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.variable.VariableAggregator; import org.flowable.engine.delegate.variable.VariableAggregatorContext; @@ -47,11 +51,6 @@ import org.flowable.variable.service.impl.types.StringType; import org.flowable.variable.service.impl.types.UUIDType; -import tools.jackson.databind.JsonNode; -import tools.jackson.databind.ObjectMapper; -import tools.jackson.databind.node.ArrayNode; -import tools.jackson.databind.node.ObjectNode; - /** * @author Filip Hrisafov */ @@ -65,7 +64,8 @@ public JsonVariableAggregator(ProcessEngineConfigurationImpl processEngineConfig @Override public Object aggregateSingleVariable(DelegateExecution execution, VariableAggregatorContext context) { - ObjectNode objectNode = processEngineConfiguration.getObjectMapper().createObjectNode(); + VariableJsonMapper jsonMapper = processEngineConfiguration.getVariableJsonMapper(); + FlowableObjectNode objectNode = jsonMapper.createObjectNode(); VariableServiceConfiguration variableServiceConfiguration = processEngineConfiguration.getVariableServiceConfiguration(); VariableService variableService = variableServiceConfiguration.getVariableService(); @@ -109,7 +109,7 @@ public Object aggregateSingleVariable(DelegateExecution execution, VariableAggre objectNode.put(targetVarName, (String) varInstance.getValue()); break; case JsonType.TYPE_NAME: - objectNode.set(targetVarName, (JsonNode) varInstance.getValue()); + objectNode.set(targetVarName, JsonUtil.asFlowableJsonNode(varInstance.getValue())); break; case BooleanType.TYPE_NAME: objectNode.put(targetVarName, (Boolean) varInstance.getValue()); @@ -154,8 +154,8 @@ public Object aggregateSingleVariable(DelegateExecution execution, VariableAggre if (VariableAggregatorContext.OVERVIEW.equals(context.getState())) { // We can only use the aggregated variable if we are in an overview state Object value = varInstance.getValue(); - if (value instanceof JsonNode) { - objectNode.set(targetVarName, (JsonNode) value); + if (jsonMapper.isJsonNode(value)) { + objectNode.set(targetVarName, JsonUtil.asFlowableJsonNode(value)); } else { throw new FlowableException("Cannot aggregate overview variable: " + varInstance); } @@ -168,17 +168,17 @@ public Object aggregateSingleVariable(DelegateExecution execution, VariableAggre } } - return objectNode; + return objectNode.getImplementationValue(); } @Override public Object aggregateMultiVariables(DelegateExecution execution, List instances, VariableAggregatorContext context) { - ObjectMapper objectMapper = processEngineConfiguration.getObjectMapper(); - ArrayNode arrayNode = objectMapper.createArrayNode(); + VariableJsonMapper objectMapper = processEngineConfiguration.getVariableJsonMapper(); + FlowableArrayNode arrayNode = objectMapper.createArrayNode(); for (VariableInstance instance : instances) { - arrayNode.add((JsonNode) instance.getValue()); + arrayNode.add(JsonUtil.asFlowableJsonNode(instance.getValue())); } - return arrayNode; + return arrayNode.getImplementationValue(); } } diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java index 2d9831ce9d5..3ba41fcd692 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/util/IOParameterUtil.java @@ -23,11 +23,10 @@ import org.flowable.common.engine.api.delegate.Expression; import org.flowable.common.engine.api.variable.VariableContainer; import org.flowable.common.engine.impl.el.ExpressionManager; +import org.flowable.common.engine.impl.util.JsonUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.jackson.databind.JsonNode; - /** * @author Filip Hrisafov */ @@ -77,8 +76,8 @@ protected static void processParameters(List parameters, VariableCo value = sourceContainer.getVariable(parameter.getSource()); } - if (value != null && value instanceof JsonNode) { - value = ((JsonNode) value).deepCopy(); + if (value != null) { + value = JsonUtil.deepCopyIfJson(value); } String variableName = null; diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationJackson2Test.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationJackson2Test.java new file mode 100644 index 00000000000..7bc5e740810 --- /dev/null +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationJackson2Test.java @@ -0,0 +1,403 @@ +/* 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 org.flowable.engine.test.bpmn.multiinstance; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.Month; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.flowable.common.engine.api.scope.ScopeTypes; +import org.flowable.common.engine.impl.history.HistoryLevel; +import org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper; +import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.impl.test.HistoryTestHelper; +import org.flowable.engine.impl.test.ResourceFlowableTestCase; +import org.flowable.engine.impl.util.CommandContextUtil; +import org.flowable.engine.impl.variable.BpmnAggregatedVariableType; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.test.Deployment; +import org.flowable.task.api.Task; +import org.flowable.variable.api.history.HistoricVariableInstance; +import org.flowable.variable.api.persistence.entity.VariableInstance; +import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; +import org.flowable.variable.service.impl.types.JsonType; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; + +/** + * @author Joram Barrez + * @author Filip Hrisafov + */ +public class MultiInstanceVariableAggregationJackson2Test extends ResourceFlowableTestCase { + + public MultiInstanceVariableAggregationJackson2Test() { + super("flowable.cfg.xml", "multiInstanceVariableAggregationJackson2"); + } + + @Override + protected void additionalConfiguration(ProcessEngineConfiguration processEngineConfiguration) { + ((ProcessEngineConfigurationImpl) processEngineConfiguration).setVariableJsonMapper( + new Jackson2VariableJsonMapper(new ObjectMapper())); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationTest.testParallelMultiInstanceUserTask.bpmn20.xml") + public void testParallelMultiInstanceUserTask() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("myProcess") + .variable("nrOfLoops", 3) + .start(); + + ArrayNode reviews = runtimeService.getVariable(processInstance.getId(), "reviews", ArrayNode.class); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: null }, + { userId: null }, + { userId: null } + ] """); + + List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()) + .orderByTaskPriority().asc() + .list(); + assertThat(tasks).hasSize(3); + + taskService.setAssignee(tasks.get(0).getId(), "userOne"); + taskService.setAssignee(tasks.get(1).getId(), "userTwo"); + taskService.setAssignee(tasks.get(2).getId(), "userThree"); + + reviews = runtimeService.getVariable(processInstance.getId(), "reviews", ArrayNode.class); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: 'userOne' }, + { userId: 'userTwo' }, + { userId: 'userThree' } + ] + """); + + Map variables = new HashMap<>(); + variables.put("approved", true); + variables.put("description", "description task 0"); + taskService.complete(tasks.get(0).getId(), variables); + + reviews = runtimeService.getVariable(processInstance.getId(), "reviews", ArrayNode.class); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: 'userOne', approved : true, description : 'description task 0' }, + { userId: 'userTwo' }, + { userId: 'userThree' } + ] + """); + + assertVariablesNotVisibleForProcessInstance(processInstance); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance historicReviews = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(BpmnAggregatedVariableType.TYPE_NAME); + Object historicValue = historicReviews.getValue(); + assertThat(historicValue).isInstanceOf(ArrayNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { userId: 'userOne', approved : true, description : 'description task 0' }, + { userId: 'userTwo' }, + { userId: 'userThree' } + ] + """); + } + + variables.put("approved", true); + variables.put("description", "description task 1"); + taskService.complete(tasks.get(1).getId(), variables); + + reviews = runtimeService.getVariable(processInstance.getId(), "reviews", ArrayNode.class); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: 'userOne', approved : true, description : 'description task 0' }, + { userId: 'userTwo', approved : true, description : 'description task 1' }, + { userId: 'userThree' } + ] + """); + + variables.put("approved", false); + variables.put("description", "description task 2"); + taskService.complete(tasks.get(2).getId(), variables); + + assertVariablesNotVisibleForProcessInstance(processInstance); + + reviews = runtimeService.getVariable(processInstance.getId(), "reviews", ArrayNode.class); + + assertThatJson(reviews) + .isEqualTo(""" + [ + { userId: 'userOne', approved : true, description : 'description task 0' }, + { userId: 'userTwo', approved : true, description : 'description task 1' }, + { userId: 'userThree', approved : false, description : 'description task 2' } + ] + """); + + assertNoAggregatedVariables(); + VariableInstance reviewsVarInstance = runtimeService.getVariableInstance(processInstance.getId(), "reviews"); + assertThat(reviewsVarInstance.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance historicReviews = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + } + + } + + @Test + @Deployment(resources = "org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationTest.testParallelMultiInstanceUserTaskWithoutCreateOverview.bpmn20.xml") + public void testParallelMultiInstanceUserTaskWithoutCreateOverview() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("myProcess") + .variable("nrOfLoops", 3) + .start(); + + VariableInstance reviews = runtimeService.getVariableInstance(processInstance.getId(), "reviews"); + assertThat(reviews).isNull(); + + List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()) + .orderByTaskPriority().asc() + .list(); + assertThat(tasks).hasSize(3); + + taskService.setAssignee(tasks.get(0).getId(), "userOne"); + taskService.setAssignee(tasks.get(1).getId(), "userTwo"); + taskService.setAssignee(tasks.get(2).getId(), "userThree"); + + reviews = runtimeService.getVariableInstance(processInstance.getId(), "reviews"); + + assertThat(reviews).isNull(); + + Map variables = new HashMap<>(); + variables.put("approved", true); + variables.put("description", "description task 0"); + taskService.complete(tasks.get(0).getId(), variables); + + reviews = runtimeService.getVariableInstance(processInstance.getId(), "reviews"); + + assertThat(reviews).isNull(); + + assertVariablesNotVisibleForProcessInstance(processInstance); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance historicReviews = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNull(); + } + + variables.put("approved", true); + variables.put("description", "description task 1"); + taskService.complete(tasks.get(1).getId(), variables); + + variables.put("approved", false); + variables.put("description", "description task 2"); + taskService.complete(tasks.get(2).getId(), variables); + + assertVariablesNotVisibleForProcessInstance(processInstance); + + reviews = runtimeService.getVariableInstance(processInstance.getId(), "reviews"); + + assertThat(reviews).isNotNull(); + assertThat(reviews.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + assertThatJson(reviews.getValue()) + .isEqualTo(""" + [ + { userId: 'userOne', approved : true, description : 'description task 0' }, + { userId: 'userTwo', approved : true, description : 'description task 1' }, + { userId: 'userThree', approved : false, description : 'description task 2' } + ] + """); + + assertNoAggregatedVariables(); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance historicReviews = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("reviews") + .singleResult(); + assertThat(historicReviews).isNotNull(); + assertThat(historicReviews.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/bpmn/multiinstance/MultiInstanceVariableAggregationTest.testParallelMultiInstanceUserTaskVariableTypes.bpmn20.xml") + public void testParallelMultiInstanceUserTaskVariableTypes() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("myProcess") + .variable("nrOfLoops", 4) + .start(); + + List tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()) + .orderByTaskPriority().asc() + .list(); + assertThat(tasks).hasSize(4); + + Map variables = new HashMap<>(); + variables.put("description", "Description for task with LocalDate"); + variables.put("score", 10); + variables.put("passed", true); + variables.put("location", "Springfield"); + variables.put("startTime", LocalDate.of(2020, Month.DECEMBER, 8)); + taskService.complete(tasks.get(0).getId(), variables); + + variables = new HashMap<>(); + variables.put("description", "Description for task with LocalDateTime"); + variables.put("score", 60.55); + variables.put("passed", false); + variables.put("location", null); + variables.put("startTime", LocalDate.of(2020, Month.DECEMBER, 8).atTime(10, 20, 30)); + taskService.complete(tasks.get(1).getId(), variables); + + variables = new HashMap<>(); + variables.put("description", "Description for task with Instant"); + variables.put("score", (short) 100); + variables.put("passed", true); + variables.put("location", "Zurich"); + variables.put("startTime", Instant.parse("2020-12-08T08:20:45.585Z")); + taskService.complete(tasks.get(2).getId(), variables); + + variables = new HashMap<>(); + variables.put("description", "Description for task with Date"); + variables.put("score", 1234L); + variables.put("passed", true); + variables.put("location", "Test Valley"); + variables.put("startTime", Instant.parse("2020-12-12T12:24:15.155Z")); + taskService.complete(tasks.get(3).getId(), variables); + + assertNoAggregatedVariables(); + assertThatJson(runtimeService.getVariable(processInstance.getId(), "results")) + .isEqualTo(""" + [ + { + description: 'Description for task with LocalDate', + score: 10, + passed: true, + location: 'Springfield', + startTime: '2020-12-08' + }, + { + description: 'Description for task with LocalDateTime', + score: 60.55, + passed: false, + location: null, + startTime: '2020-12-08T10:20:30' + }, + { + description: 'Description for task with Instant', + score: 100, + passed: true, + location: 'Zurich', + startTime: '2020-12-08T08:20:45.585Z' + }, + { + description: 'Description for task with Date', + score: 1234, + passed: true, + location: 'Test Valley', + startTime: '2020-12-12T12:24:15.155Z' + } + ] + """); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance historicResults = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("results") + .singleResult(); + assertThat(historicResults).isNotNull(); + Object historicValue = historicResults.getValue(); + assertThat(historicValue).isInstanceOf(ArrayNode.class); + assertThatJson(historicValue) + .isEqualTo(""" + [ + { + description: 'Description for task with LocalDate', + score: 10, + passed: true, + location: 'Springfield', + startTime: '2020-12-08' + }, + { + description: 'Description for task with LocalDateTime', + score: 60.55, + passed: false, + location: null, + startTime: '2020-12-08T10:20:30' + }, + { + description: 'Description for task with Instant', + score: 100, + passed: true, + location: 'Zurich', + startTime: '2020-12-08T08:20:45.585Z' + }, + { + description: 'Description for task with Date', + score: 1234, + passed: true, + location: 'Test Valley', + startTime: '2020-12-12T12:24:15.155Z' + } + ] + """); + } + } + + protected void assertVariablesNotVisibleForProcessInstance(ProcessInstance processInstance) { + + assertThat(runtimeService.getVariable(processInstance.getId(), "nrOfLoops")).isNotNull(); + + assertThat(runtimeService.getVariable(processInstance.getId(), "approved")).isNull(); + assertThat(runtimeService.getVariable(processInstance.getId(), "description")).isNull(); + } + + protected void assertNoAggregatedVariables() { + List variableInstanceEntities = managementService.executeCommand(commandContext -> CommandContextUtil.getVariableService() + .createInternalVariableInstanceQuery() + .scopeType(ScopeTypes.BPMN_VARIABLE_AGGREGATION) + .list()); + assertThat(variableInstanceEntities).isEmpty(); + + } + +} diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerJackson2Test.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerJackson2Test.java new file mode 100644 index 00000000000..ba9c14fbd75 --- /dev/null +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerJackson2Test.java @@ -0,0 +1,191 @@ +/* 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 org.flowable.engine.test.el; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.HashMap; +import java.util.Map; + +import org.flowable.common.engine.api.delegate.Expression; +import org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper; +import org.flowable.common.engine.impl.tenant.CurrentTenant; +import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.engine.impl.test.ResourceFlowableTestCase; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.test.Deployment; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import tools.jackson.databind.node.ArrayNode; +import tools.jackson.databind.node.ObjectNode; + +/** + * @author Filip Hrisafov + */ +public class ExpressionManagerJackson2Test extends ResourceFlowableTestCase { + + public ExpressionManagerJackson2Test() { + super("flowable.cfg.xml", "expressionManagerJackson2Test"); + } + + @Override + protected void additionalConfiguration(ProcessEngineConfiguration processEngineConfiguration) { + ((ProcessEngineConfigurationImpl) processEngineConfiguration).setVariableJsonMapper(new Jackson2VariableJsonMapper(new ObjectMapper())); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") + public void testIntJsonVariableSerialization() { + Map vars = new HashMap<>(); + vars.put("mapVariable", processEngineConfiguration.getObjectMapper().createObjectNode().put("minIntVar", Integer.MIN_VALUE)); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); + + Expression expression = this.processEngineConfiguration.getExpressionManager().createExpression("#{mapVariable.minIntVar}"); + Object value = managementService.executeCommand(commandContext -> + expression.getValue( + (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).includeProcessVariables() + .singleResult())); + + assertThat(value).isEqualTo(Integer.MIN_VALUE); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") + public void testFloatJsonVariableSerialization() { + Map vars = new HashMap<>(); + vars.put("mapVariable", processEngineConfiguration.getObjectMapper().createObjectNode().put("minFloatVar", Float.valueOf((float) -1.5))); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); + + Expression expression = this.processEngineConfiguration.getExpressionManager().createExpression("#{mapVariable.minFloatVar}"); + Object value = managementService.executeCommand(commandContext -> + expression.getValue( + (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).includeProcessVariables() + .singleResult())); + + assertThat(value).isEqualTo(-1.5d); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") + public void testNullJsonVariableSerialization() { + Map vars = new HashMap<>(); + vars.put("mapVariable", processEngineConfiguration.getObjectMapper().createObjectNode().putNull("nullVar")); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); + + Expression expression = this.processEngineConfiguration.getExpressionManager().createExpression("#{mapVariable.nullVar}"); + Object value = managementService.executeCommand(commandContext -> + expression.getValue( + (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).includeProcessVariables() + .singleResult())); + + assertThat(value).isNull(); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") + public void testOverloadedMethodUsage() { + Map vars = new HashMap<>(); + vars.put("nodeVariable", processEngineConfiguration.getObjectMapper().createObjectNode()); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); + + Expression expression = this.processEngineConfiguration.getExpressionManager() + .createExpression("#{nodeVariable.put('stringVar', 'String value').put('intVar', 10)}"); + Object value = managementService.executeCommand(commandContext -> + expression.getValue( + (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).includeProcessVariables() + .singleResult())); + + assertThat(value).isInstanceOf(com.fasterxml.jackson.databind.node.ObjectNode.class); + assertThatJson(value) + .isEqualTo("{" + + " stringVar: 'String value'," + + " intVar: 10" + + "}"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") + public void testInvokeOnArrayNode() { + Map vars = new HashMap<>(); + ArrayNode arrayNode = processEngineConfiguration.getObjectMapper().createArrayNode(); + arrayNode.add("firstValue"); + arrayNode.add("secondValue"); + arrayNode.add(42); + + vars.put("array", arrayNode); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); + + assertThat(getExpressionValue("${array.get(0).isTextual()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${array.get(0).textValue()}", processInstance)).isEqualTo("firstValue"); + assertThat(getExpressionValue("${array.get(0).isNumber()}", processInstance)).isEqualTo(false); + + assertThat(getExpressionValue("${array.get(2).isNumber()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${array.get(2).asInt()}", processInstance)).isEqualTo(42); + assertThat(getExpressionValue("${array.get(2).asLong()}", processInstance)).isEqualTo(42L); + + assertThat(getExpressionValue("${array.get(1).textValue()}", processInstance)).isEqualTo("secondValue"); + assertThat(getExpressionValue("${array.get(1).asLong(123)}", processInstance)).isEqualTo(123L); + + assertThat(getExpressionValue("${array.get(3)}", processInstance)).isNull(); + assertThat(getExpressionValue("${array.path(3).isMissingNode()}", processInstance)).isEqualTo(true); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/runtime/oneTaskProcess.bpmn20.xml") + public void testInvokeOnObjectNode() { + Map vars = new HashMap<>(); + ObjectNode objectNode = processEngineConfiguration.getObjectMapper().createObjectNode(); + objectNode.put("firstAttribute", "foo"); + objectNode.put("secondAttribute", "bar"); + objectNode.put("thirdAttribute", 42); + objectNode.putNull("nullAttribute"); + + vars.put("object", objectNode); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); + + assertThat(getExpressionValue("${object.get(\"firstAttribute\").isTextual()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${object.get(\"firstAttribute\").textValue()}", processInstance)).isEqualTo("foo"); + assertThat(getExpressionValue("${object.get(\"firstAttribute\").isNumber()}", processInstance)).isEqualTo(false); + + assertThat(getExpressionValue("${object.get(\"thirdAttribute\").isNumber()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${object.get(\"thirdAttribute\").asInt()}", processInstance)).isEqualTo(42); + assertThat(getExpressionValue("${object.get(\"thirdAttribute\").asLong()}", processInstance)).isEqualTo(42L); + + assertThat(getExpressionValue("${object.get(\"secondAttribute\").textValue()}", processInstance)).isEqualTo("bar"); + assertThat(getExpressionValue("${object.get(\"secondAttribute\").asLong(123)}", processInstance)).isEqualTo(123L); + + assertThat(getExpressionValue("${object.get(\"dummyAttribute\")}", processInstance)).isNull(); + assertThat(getExpressionValue("${object.path(\"dummyAttribute\").isMissingNode()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${object.path(\"dummyAttribute\").asString()}", processInstance)).isEqualTo(""); + assertThat(getExpressionValue("${object.path(\"dummyAttribute\").asText()}", processInstance)).isEqualTo(""); + + assertThat(getExpressionValue("${object.path(\"nullAttribute\").isNull()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${object.path(\"nullAttribute\").asString()}", processInstance)).isEqualTo("null"); + assertThat(getExpressionValue("${object.path(\"nullAttribute\").asText()}", processInstance)).isEqualTo("null"); + } + + private Object getExpressionValue(String expressionStr, ProcessInstance processInstance) { + Expression expression = this.processEngineConfiguration.getExpressionManager().createExpression(expressionStr); + return managementService.executeCommand(commandContext -> + expression.getValue( + (ExecutionEntity) runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).includeProcessVariables() + .singleResult())); + } + +} diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java index e917c08e6f0..24e33baefcb 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/el/ExpressionManagerTest.java @@ -311,6 +311,7 @@ public void testInvokeOnObjectNode() { objectNode.put("firstAttribute", "foo"); objectNode.put("secondAttribute", "bar"); objectNode.put("thirdAttribute", 42); + objectNode.putNull("nullAttribute"); vars.put("object", objectNode); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess", vars); @@ -328,6 +329,12 @@ public void testInvokeOnObjectNode() { assertThat(getExpressionValue("${object.get(\"dummyAttribute\")}", processInstance)).isNull(); assertThat(getExpressionValue("${object.path(\"dummyAttribute\").isMissingNode()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${object.path(\"dummyAttribute\").asString()}", processInstance)).isEqualTo(""); + assertThat(getExpressionValue("${object.path(\"dummyAttribute\").asText()}", processInstance)).isEqualTo(""); + + assertThat(getExpressionValue("${object.path(\"nullAttribute\").isNull()}", processInstance)).isEqualTo(true); + assertThat(getExpressionValue("${object.path(\"nullAttribute\").asString()}", processInstance)).isEqualTo("null"); + assertThat(getExpressionValue("${object.path(\"nullAttribute\").asText()}", processInstance)).isEqualTo("null"); } private Object getExpressionValue(String expressionStr, ProcessInstance processInstance) { diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonJackson2Test.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonJackson2Test.java new file mode 100644 index 00000000000..84ecc817f51 --- /dev/null +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonJackson2Test.java @@ -0,0 +1,1154 @@ +/* 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 org.flowable.engine.test.json; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.time.Instant; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.RandomStringUtils; +import org.flowable.common.engine.api.delegate.Expression; +import org.flowable.common.engine.impl.el.ExpressionManager; +import org.flowable.common.engine.impl.history.HistoryLevel; +import org.flowable.common.engine.impl.javax.el.PropertyNotFoundException; +import org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper; +import org.flowable.engine.ProcessEngineConfiguration; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.delegate.JavaDelegate; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.impl.test.HistoryTestHelper; +import org.flowable.engine.impl.test.ResourceFlowableTestCase; +import org.flowable.engine.impl.util.CommandContextUtil; +import org.flowable.engine.runtime.ProcessInstance; +import org.flowable.engine.test.Deployment; +import org.flowable.task.api.Task; +import org.flowable.variable.api.history.HistoricVariableInstance; +import org.flowable.variable.api.persistence.entity.VariableInstance; +import org.flowable.variable.service.impl.persistence.entity.HistoricVariableInstanceEntity; +import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; +import org.flowable.variable.service.impl.types.JsonType; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + +/** + * @author Tijs Rademakers + * @author Tim Stephenson + * @author Filip Hrisafov + */ +public class JsonJackson2Test extends ResourceFlowableTestCase { + + public static final String MY_JSON_OBJ = "myJsonObj"; + public static final String BIG_JSON_OBJ = "bigJsonObj"; + + protected ObjectMapper objectMapper = new ObjectMapper(); + + public JsonJackson2Test() { + super("flowable.cfg.xml", "jsonJackson2"); + } + + @Override + protected void additionalConfiguration(ProcessEngineConfiguration processEngineConfiguration) { + ((ProcessEngineConfigurationImpl) processEngineConfiguration).setVariableJsonMapper(new Jackson2VariableJsonMapper(objectMapper)); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testUpdateJsonValueDuringExecution.bpmn20.xml") + public void testCreateAndUpdateJsonValueDuringExecution() { + JavaDelegate javaDelegate = new JavaDelegate() { + + @Override + public void execute(DelegateExecution execution) { + + ExpressionManager expressionManager = CommandContextUtil.getProcessEngineConfiguration().getExpressionManager(); + execution.setVariable("customer", objectMapper.createObjectNode()); + + Expression expression = expressionManager.createExpression("${customer.name}"); + expression.setValue("Kermit", execution); + + expression = expressionManager.createExpression("${customer.address}"); + expression.setValue(objectMapper.createObjectNode(), execution); + + expression = expressionManager.createExpression("${customer.address.street}"); + expression.setValue("Sesame Street", execution); + } + }; + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("updateJsonValue") + .transientVariable("jsonBean", javaDelegate) + .start(); + + VariableInstance customerVarInstance = runtimeService.getVariableInstance(processInstance.getId(), "customer"); + assertThat(customerVarInstance.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + + JsonNode customerVar = (JsonNode) customerVarInstance.getValue(); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVarInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer") + .singleResult(); + assertThat(customerHistoricVarInstance.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + + customerVar = (JsonNode) customerHistoricVarInstance.getValue(); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testCreateJsonArrayDuringExecution.bpmn20.xml") + public void testCreateJsonArrayDuringExecution() { + JavaDelegate javaDelegate = new JavaDelegate() { + + @Override + public void execute(DelegateExecution execution) { + ArrayNode testArrayNode = objectMapper.createArrayNode(); + testArrayNode.addObject(); + execution.setVariable("jsonArrayTest", testArrayNode); + execution.setVariable("${jsonArrayTest[0].name}", "test"); + + execution.setVariable("jsonObjectTest", objectMapper.createObjectNode()); + execution.setVariable("${jsonObjectTest.name}", "anotherTest"); + } + }; + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("createJsonArray") + .transientVariable("jsonBean", javaDelegate) + .start(); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + List varInstances = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .orderByVariableName() + .asc() + .list(); + assertThat(varInstances).hasSize(2); + HistoricVariableInstance varInstance = varInstances.get(0); + assertThatJson(varInstance.getValue()) + .isEqualTo("[{" + + " name: 'test'" + + "}]"); + + varInstance = varInstances.get(1); + assertThatJson(varInstance.getValue()) + .isEqualTo("{" + + " name: 'anotherTest'" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testCreateAndUpdateJsonValueDuringExecutionWithoutWaitState.bpmn20.xml") + public void testCreateAndUpdateJsonValueDuringExecutionWithoutWaitState() { + JavaDelegate javaDelegate = new JavaDelegate() { + + @Override + public void execute(DelegateExecution execution) { + + ExpressionManager expressionManager = CommandContextUtil.getProcessEngineConfiguration().getExpressionManager(); + execution.setVariable("customer", objectMapper.createObjectNode()); + + Expression expression = expressionManager.createExpression("${customer.name}"); + expression.setValue("Kermit", execution); + + expression = expressionManager.createExpression("${customer.address}"); + expression.setValue(objectMapper.createObjectNode(), execution); + + expression = expressionManager.createExpression("${customer.address.street}"); + expression.setValue("Sesame Street", execution); + } + }; + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("updateJsonValue") + .transientVariable("jsonBean", javaDelegate) + .start(); + + JsonNode customerVar = (JsonNode) processInstance.getProcessVariables().get("customer"); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVarInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer") + .singleResult(); + assertThat(customerHistoricVarInstance.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + + customerVar = (JsonNode) customerHistoricVarInstance.getValue(); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testUpdateJsonValueDuringExecution.bpmn20.xml") + public void testUpdateJsonValueDuringExecution() { + ObjectNode customer = objectMapper.createObjectNode(); + customer.put("name", "Kermit"); + JavaDelegate javaDelegate = new JavaDelegate() { + + @Override + public void execute(DelegateExecution execution) { + execution.getVariable("customer", ObjectNode.class) + .putObject("address") + .put("street", "Sesame Street"); + } + }; + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("updateJsonValue") + .variable("customer", customer) + .transientVariable("jsonBean", javaDelegate) + .start(); + + customer = (ObjectNode) runtimeService.getVariable(processInstance.getId(), "customer"); + assertThatJson(customer) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + + VariableInstance customerVarInstance = runtimeService.getVariableInstance(processInstance.getId(), "customer"); + assertThat(customerVarInstance.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + + JsonNode customerVar = (JsonNode) customerVarInstance.getValue(); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVarInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer") + .singleResult(); + assertThat(customerHistoricVarInstance.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + + customerVar = (JsonNode) customerHistoricVarInstance.getValue(); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testUpdateJsonValueDuringExecution.bpmn20.xml") + public void testUpdateFromSmallToLongJsonValue() { + // Set customer.street to 'Sesame Street' + ObjectNode customer = objectMapper.createObjectNode(); + customer.put("street", "Sesame Street"); + JavaDelegate javaDelegate = execution -> { + }; + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("updateJsonValue") + .variable("customer", customer) + .transientVariable("jsonBean", javaDelegate) + .start(); + + VariableInstance customerVariableInstance = runtimeService.getVariableInstance(processInstance.getId(), "customer"); + assertThat(((VariableInstanceEntity) customerVariableInstance).getByteArrayRef()).isNull(); + + Object customerActual = customerVariableInstance.getValue(); + assertThat(customerActual).isInstanceOf(ObjectNode.class); + assertThatJson(customerActual) + .inPath("street") + .isEqualTo("Sesame Street"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVariableInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer") + .singleResult(); + assertThatJson(customerHistoricVariableInstance.getValue()) + .inPath("street") + .isEqualTo("Sesame Street"); + assertThat(((HistoricVariableInstanceEntity) customerHistoricVariableInstance).getByteArrayRef()).isNull(); + } + + // Set customer.street to long value + String randomLongValue = RandomStringUtils.insecure().nextAlphanumeric(processEngineConfiguration.getMaxLengthString() + 1); + customer.put("street", randomLongValue); + runtimeService.setVariable(processInstance.getId(), "customer", customer); + + customerVariableInstance = runtimeService.getVariableInstance(processInstance.getId(), "customer"); + customerActual = customerVariableInstance.getValue(); + assertThat(customerActual).isInstanceOf(ObjectNode.class); + assertThatJson(customerActual) + .inPath("street") + .isEqualTo(randomLongValue); + assertThat(((VariableInstanceEntity) customerVariableInstance).getByteArrayRef()).isNotNull(); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVariableInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer") + .singleResult(); + assertThatJson(customerHistoricVariableInstance.getValue()) + .inPath("street") + .isEqualTo(randomLongValue); + assertThat(((HistoricVariableInstanceEntity) customerHistoricVariableInstance).getByteArrayRef()).isNotNull(); + } + + // Set customer.street back to a small value + customer.put("street", "Sesame Street 2"); + runtimeService.setVariable(processInstance.getId(), "customer", customer); + + customerVariableInstance = runtimeService.getVariableInstance(processInstance.getId(), "customer"); + customerActual = customerVariableInstance.getValue(); + assertThat(customerActual).isInstanceOf(ObjectNode.class); + assertThatJson(customerActual) + .inPath("street") + .isEqualTo("Sesame Street 2"); + assertThat(((VariableInstanceEntity) customerVariableInstance).getByteArrayRef()).isNull(); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVariableInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer").singleResult(); + assertThatJson(customerHistoricVariableInstance.getValue()) + .inPath("street") + .isEqualTo("Sesame Street 2"); + assertThat(((HistoricVariableInstanceEntity) customerHistoricVariableInstance).getByteArrayRef()).isNull(); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testUpdateJsonValueDuringExecution.bpmn20.xml") + public void testUpdateJsonValueToLongValueDuringExecution() { + ObjectNode customer = objectMapper.createObjectNode(); + customer.put("name", "Kermit"); + String randomLongStreetName = RandomStringUtils.insecure().nextAlphanumeric(processEngineConfiguration.getMaxLengthString() + 1); + JavaDelegate javaDelegate = new JavaDelegate() { + + @Override + public void execute(DelegateExecution execution) { + execution.getVariable("customer", ObjectNode.class) + .putObject("address") + .put("street", randomLongStreetName); + } + }; + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("updateJsonValue") + .variable("customer", customer) + .transientVariable("jsonBean", javaDelegate) + .start(); + + customer = (ObjectNode) runtimeService.getVariable(processInstance.getId(), "customer"); + assertThatJson(customer) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: '" + randomLongStreetName + "'" + + " }" + + "}"); + + VariableInstance customerVarInstance = runtimeService.getVariableInstance(processInstance.getId(), "customer"); + assertThat(customerVarInstance.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + + JsonNode customerVar = (JsonNode) managementService.executeCommand(commandContext -> customerVarInstance.getValue()); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: '" + randomLongStreetName + "'" + + " }" + + "}"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVarInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer") + .singleResult(); + assertThat(customerHistoricVarInstance.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + + customerVar = (JsonNode) managementService.executeCommand(commandContext -> customerHistoricVarInstance.getValue()); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'," + + " address: {" + + " street: '" + randomLongStreetName + "'" + + " }" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testUpdateJsonValueDuringExecution.bpmn20.xml") + public void testUpdateLongJsonValueDuringExecution() { + ObjectNode customer = objectMapper.createObjectNode(); + + String randomLongStreetName = RandomStringUtils.insecure().nextAlphanumeric(processEngineConfiguration.getMaxLengthString() + 1); + customer.put("name", "Kermit"); + customer.putObject("address") + .put("address", randomLongStreetName); + JavaDelegate javaDelegate = new JavaDelegate() { + + @Override + public void execute(DelegateExecution execution) { + execution.getVariable("customer", ObjectNode.class) + .remove("address"); + } + }; + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("updateJsonValue") + .variable("customer", customer) + .transientVariable("jsonBean", javaDelegate) + .start(); + + customer = (ObjectNode) runtimeService.getVariable(processInstance.getId(), "customer"); + assertThatJson(customer) + .isEqualTo("{" + + " name: 'Kermit'" + + "}"); + + VariableInstance customerVarInstance = runtimeService.getVariableInstance(processInstance.getId(), "customer"); + assertThat(customerVarInstance.getTypeName()).isEqualTo(JsonType.TYPE_NAME); + + JsonNode customerVar = (JsonNode) managementService.executeCommand(commandContext -> customerVarInstance.getValue()); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'" + + "}"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + HistoricVariableInstance customerHistoricVarInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName("customer") + .singleResult(); + assertThat(customerHistoricVarInstance.getVariableTypeName()).isEqualTo(JsonType.TYPE_NAME); + + customerVar = (JsonNode) managementService.executeCommand(commandContext -> customerHistoricVarInstance.getValue()); + assertThatJson(customerVar) + .isEqualTo("{" + + " name: 'Kermit'" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testJsonObjectAvailable.bpmn20.xml") + public void testJsonObjectAvailable() { + Map vars = new HashMap<>(); + + ObjectNode varNode = objectMapper.createObjectNode(); + varNode.put("var", "myValue"); + vars.put(MY_JSON_OBJ, varNode); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJsonAvailableProcess", vars); + + // Check JSON has been parsed as expected + ObjectNode value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), MY_JSON_OBJ); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("{ var: 'myValue' }"); + + ObjectNode var2Node = objectMapper.createObjectNode(); + var2Node.put("var", "myValue"); + var2Node.put("var2", "myOtherValue"); + runtimeService.setVariable(processInstance.getId(), MY_JSON_OBJ, var2Node); + + // Check JSON has been updated as expected + value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), MY_JSON_OBJ); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("{ " + + " var: 'myValue'," + + " var2: 'myOtherValue'" + + "}"); + + Task task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + ObjectNode var3Node = objectMapper.createObjectNode(); + var3Node.put("var", "myValue"); + var3Node.put("var2", "myOtherValue"); + var3Node.put("var3", "myThirdValue"); + + vars = new HashMap<>(); + vars.put(MY_JSON_OBJ, var3Node); + vars.put(BIG_JSON_OBJ, createBigJsonObject()); + taskService.complete(task.getId(), vars); + value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), MY_JSON_OBJ); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("{ " + + " var: 'myValue'," + + " var2: 'myOtherValue'," + + " var3: 'myThirdValue'" + + "}"); + + value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), BIG_JSON_OBJ); + assertThat(value).hasToString(createBigJsonObject().toString()); + + VariableInstance variableInstance = runtimeService.getVariableInstance(processInstance.getId(), BIG_JSON_OBJ); + assertThat(variableInstance).isNotNull(); + assertThat(variableInstance.getValue()).hasToString(createBigJsonObject().toString()); + + task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + assertThat(task.getTaskDefinitionKey()).isEqualTo("userTaskSuccess"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, processEngineConfiguration)) { + List historicVariableInstances = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getProcessInstanceId()).orderByVariableName().asc().list(); + assertThat(historicVariableInstances).hasSize(2); + + assertThat(historicVariableInstances.get(0).getVariableName()).isEqualTo(BIG_JSON_OBJ); + value = (ObjectNode) historicVariableInstances.get(0).getValue(); + assertThat(value).hasToString(createBigJsonObject().toString()); + + assertThat(historicVariableInstances.get(1).getVariableName()).isEqualTo(MY_JSON_OBJ); + value = (ObjectNode) historicVariableInstances.get(1).getValue(); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("{ " + + " var: 'myValue'," + + " var2: 'myOtherValue'," + + " var3: 'myThirdValue'" + + "}"); + + HistoricVariableInstance historicVariableInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getId()) + .variableName(BIG_JSON_OBJ) + .singleResult(); + + assertThat(historicVariableInstance).isNotNull(); + assertThat(historicVariableInstance.getValue()).hasToString(createBigJsonObject().toString()); + } + + // It should be possible do remove a json variable + runtimeService.removeVariable(processInstance.getId(), MY_JSON_OBJ); + assertThat(runtimeService.getVariable(processInstance.getId(), MY_JSON_OBJ)).isNull(); + + // It should be possible do remove a longJson variable + runtimeService.removeVariable(processInstance.getId(), BIG_JSON_OBJ); + assertThat(runtimeService.getVariable(processInstance.getId(), BIG_JSON_OBJ)).isNull(); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testDirectJsonPropertyAccess.bpmn20.xml") + public void testDirectJsonPropertyAccess() { + Map vars = new HashMap<>(); + + ObjectNode varNode = objectMapper.createObjectNode(); + varNode.put("var", "myValue"); + vars.put("myJsonObj", varNode); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJsonAvailableProcess", vars); + + // Check JSON has been parsed as expected + ObjectNode value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), "myJsonObj"); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("{ " + + " var: 'myValue'" + + "}"); + + Task task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + ObjectNode var3Node = objectMapper.createObjectNode(); + var3Node.put("var", "myValue"); + var3Node.put("var2", "myOtherValue"); + var3Node.put("var3", "myThirdValue"); + + vars.put("myJsonObj", var3Node); + taskService.complete(task.getId(), vars); + + value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), "myJsonObj"); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("{ " + + " var: 'myValue'," + + " var2: 'myOtherValue'," + + " var3: 'myThirdValue'" + + "}"); + + task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + assertThat(task.getTaskDefinitionKey()).isEqualTo("userTaskSuccess"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testJsonArrayAvailable.bpmn20.xml") + public void testJsonArrayAvailable() { + Map vars = new HashMap<>(); + + ArrayNode varArray = objectMapper.createArrayNode(); + ObjectNode varNode = objectMapper.createObjectNode(); + varNode.put("var", "myValue"); + varArray.add(varNode); + vars.put("myJsonArr", varArray); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJsonAvailableProcess", vars); + + // Check JSON has been parsed as expected + ArrayNode value = (ArrayNode) runtimeService.getVariable(processInstance.getId(), "myJsonArr"); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("[ { " + + " var: 'myValue'" + + "} ]"); + + ArrayNode varArray2 = objectMapper.createArrayNode(); + varNode = objectMapper.createObjectNode(); + varNode.put("var", "myValue"); + varArray2.add(varNode); + varNode = objectMapper.createObjectNode(); + varNode.put("var", "myOtherValue"); + varArray2.add(varNode); + runtimeService.setVariable(processInstance.getId(), "myJsonArr", varArray2); + + // Check JSON has been updated as expected + value = (ArrayNode) runtimeService.getVariable(processInstance.getId(), "myJsonArr"); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("[ { " + + " var: 'myValue'" + + "}, {" + + " var: 'myOtherValue'" + + "} ]"); + + Task task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + ArrayNode varArray3 = objectMapper.createArrayNode(); + varNode = objectMapper.createObjectNode(); + varNode.put("var", "myValue"); + varArray3.add(varNode); + varNode = objectMapper.createObjectNode(); + varNode.put("var", "myOtherValue"); + varArray3.add(varNode); + varNode = objectMapper.createObjectNode(); + varNode.put("var", "myThirdValue"); + varArray3.add(varNode); + vars = new HashMap<>(); + vars.put("myJsonArr", varArray3); + taskService.complete(task.getId(), vars); + value = (ArrayNode) runtimeService.getVariable(processInstance.getId(), "myJsonArr"); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("[ { " + + " var: 'myValue'" + + "}, {" + + " var: 'myOtherValue'" + + "}, {" + + " var: 'myThirdValue'" + + "} ]"); + + task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + assertThat(task.getTaskDefinitionKey()).isEqualTo("userTaskSuccess"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.AUDIT, processEngineConfiguration)) { + HistoricVariableInstance historicVariableInstance = historyService.createHistoricVariableInstanceQuery() + .processInstanceId(processInstance.getProcessInstanceId()).singleResult(); + value = (ArrayNode) historicVariableInstance.getValue(); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("[ { " + + " var: 'myValue'" + + "}, {" + + " var: 'myOtherValue'" + + "}, {" + + " var: 'myThirdValue'" + + "} ]"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testJsonArrayAccessByIndex.bpmn20.xml") + public void testJsonArrayAccessByIndex() { + Map vars = new HashMap<>(); + + ArrayNode varArray = objectMapper.createArrayNode(); + ObjectNode varNode = objectMapper.createObjectNode(); + varNode.put("var", "myValue"); + varArray.add(varNode); + vars.put("myJsonArr", varArray); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJsonAvailableProcess", vars); + + // Check JSON has been parsed as expected + ArrayNode value = (ArrayNode) runtimeService.getVariable(processInstance.getId(), "myJsonArr"); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("[ { " + + " var: 'myValue'" + + "} ]"); + + Task task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + ArrayNode taskVarArray = objectMapper.createArrayNode(); + taskVarArray.addObject().put("var", "firstValue"); + taskVarArray.addObject().put("var", "secondValue"); + taskVarArray.addObject().put("var", "thirdValue"); + vars = new HashMap<>(); + vars.put("myJsonArr", taskVarArray); + taskService.complete(task.getId(), vars); + + task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + assertThat(task.getTaskDefinitionKey()).isEqualTo("userTaskSuccess"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testJsonArrayAccessByNegativeIndex.bpmn20.xml") + public void testJsonArrayAccessByNegativeIndex() { + Map vars = new HashMap<>(); + + ArrayNode varArray = objectMapper.createArrayNode(); + ObjectNode varNode = objectMapper.createObjectNode(); + varNode.put("var", "myValue"); + varArray.add(varNode); + vars.put("myJsonArr", varArray); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJsonAvailableProcess", vars); + + // Check JSON has been parsed as expected + ArrayNode value = (ArrayNode) runtimeService.getVariable(processInstance.getId(), "myJsonArr"); + assertThat(value).isNotNull(); + assertThatJson(value) + .isEqualTo("[ { " + + " var: 'myValue'" + + "} ]"); + + Task task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + ArrayNode taskVarArray = objectMapper.createArrayNode(); + taskVarArray.addObject().put("var", "firstValue"); + taskVarArray.addObject().put("var", "secondValue"); + taskVarArray.addObject().put("var", "thirdValue"); + vars = new HashMap<>(); + vars.put("myJsonArr", taskVarArray); + taskService.complete(task.getId(), vars); + + task = taskService.createTaskQuery().active().singleResult(); + assertThat(task).isNotNull(); + assertThat(task.getTaskDefinitionKey()).isEqualTo("userTaskSuccess"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/json/JsonTest.testJsonNumber.bpmn20.xml") + public void testJsonNumber() { + Map vars = new HashMap<>(); + + ObjectNode varNode = objectMapper.createObjectNode(); + varNode.put("numVar", 10); + vars.put(MY_JSON_OBJ, varNode); + ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testJsonAvailableProcess", vars); + + // Check JSON has been parsed as expected + ObjectNode value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), MY_JSON_OBJ); + assertThat(value.get("numVar").asInt()).isEqualTo(10); + + Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); + taskService.complete(task.getId(), vars); + + task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); + assertThat(task.getTaskDefinitionKey()).isEqualTo("userTaskSuccess"); + + vars = new HashMap<>(); + + varNode = objectMapper.createObjectNode(); + varNode.put("numVar", 40); + vars.put(MY_JSON_OBJ, varNode); + processInstance = runtimeService.startProcessInstanceByKey("testJsonAvailableProcess", vars); + + // Check JSON has been parsed as expected + value = (ObjectNode) runtimeService.getVariable(processInstance.getId(), MY_JSON_OBJ); + assertThat(value.get("numVar").asInt()).isEqualTo(40); + + task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); + taskService.complete(task.getId(), vars); + + task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); + assertThat(task.getTaskDefinitionKey()).isEqualTo("userTaskFailure"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testSetNestedJsonNodeValue() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customer", objectMapper.createObjectNode()) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{}"); + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customer.address.street}"); + expression.setValue("Sesame Street", CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return null; + }); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{" + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + assertThatJson(historyService.createHistoricVariableInstanceQuery().variableName("customer").singleResult().getValue()) + .isEqualTo("{" + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testSetIntegerInJsonNode() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customer", objectMapper.createObjectNode()) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{}"); + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customer.pin}"); + expression.setValue(10, CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return null; + }); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{" + + " pin: 10" + + "}"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + assertThatJson(historyService.createHistoricVariableInstanceQuery().variableName("customer").singleResult().getValue()) + .isEqualTo("{" + + " pin: 10" + + "}"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testSetDateInJsonNode() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customer", objectMapper.createObjectNode()) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{}"); + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customer.creationDate}"); + expression.setValue(Date.from(Instant.parse("2020-02-16T14:24:45.583Z")), + CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return null; + }); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{ creationDate: '2020-02-16T14:24:45.583Z' }"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + assertThatJson(historyService.createHistoricVariableInstanceQuery().variableName("customer").singleResult().getValue()) + .isEqualTo("{ creationDate: '2020-02-16T14:24:45.583Z' }"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testSetInstantInJsonNode() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customer", objectMapper.createObjectNode()) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{}"); + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + assertThatJson(historyService.createHistoricVariableInstanceQuery().variableName("customer").singleResult().getValue()) + .isEqualTo("{}"); + } + + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customer.creationDate}"); + expression.setValue(Instant.parse("2020-02-16T14:24:45.583Z"), + CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return null; + }); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{ creationDate: '2020-02-16T14:24:45.583Z' }"); + + if (HistoryTestHelper.isHistoryLevelAtLeast(HistoryLevel.ACTIVITY, processEngineConfiguration)) { + assertThatJson(historyService.createHistoricVariableInstanceQuery().variableName("customer").singleResult().getValue()) + .isEqualTo("{ creationDate: '2020-02-16T14:24:45.583Z' }"); + } + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testGetNestedJsonNodeValue() { + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customer", objectMapper.createObjectNode()) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{}"); + + Object value = managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customer.address.street}"); + return expression.getValue(CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + }); + + assertThat(value).isNull(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customer")) + .isEqualTo("{}"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testSetArrayNestedJsonNodeValue() { + ArrayNode customers = objectMapper.createArrayNode(); + customers.addObject(); + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customers", customers) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[{}]"); + + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customers[0].address.street}"); + expression.setValue("Sesame Street", CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return null; + }); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[" + + " {" + + " address: {" + + " street: 'Sesame Street'" + + " }" + + " }" + + "]"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testGetArrayNestedJsonNodeValue() { + ArrayNode customers = objectMapper.createArrayNode(); + customers.addObject() + .put("name", "Kermit the Frog"); + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customers", customers) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[" + + " {" + + " name: 'Kermit the Frog'" + + " }" + + "]"); + + Object value = managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customers[0].address.street}"); + return expression.getValue(CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + }); + + assertThat(value).isNull(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[" + + " {" + + " name: 'Kermit the Frog'" + + " }" + + "]"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testSetNestedArrayNestedJsonNodeValue() { + ArrayNode customers = objectMapper.createArrayNode(); + customers.addObject() + .putArray("addresses") + .addObject(); + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customers", customers) + .start(); + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[{" + + " addresses: [{}]" + + "}]"); + + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customers[0].addresses[0].street}"); + expression.setValue("Sesame Street", CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return null; + }); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[{" + + " addresses: [{" + + " street: 'Sesame Street'" + + " }]" + + "}]"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testSetNestedArrayNestedJsonNodeValueWhenNestedArrayIsMissing() { + ArrayNode customers = objectMapper.createArrayNode(); + customers.addObject(); + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customers", customers) + .start(); + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[{}]"); + + assertThatThrownBy(() -> managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customers[0].addresses[0].street}"); + expression.setValue("Sesame Street", CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return null; + })) + .hasCauseInstanceOf(PropertyNotFoundException.class); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[{}]"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testArrayNodeJsonNodeValue() { + ArrayNode customers = objectMapper.createArrayNode(); + customers.add("Initial value"); + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customers", customers) + .start(); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("['Initial value']"); + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customers[0]}"); + expression.setValue("Flowable", CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return customers; + }); + + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("['Flowable']"); + + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customers[0]}"); + expression.setValue(10L, CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return customers; + }); + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[10]"); + + managementService.executeCommand(commandContext -> { + Expression expression = processEngineConfiguration.getExpressionManager().createExpression("${customers[0]}"); + ObjectNode value = objectMapper.createObjectNode(); + value.putObject("address") + .put("street", "Sesame Street"); + expression.setValue(value, CommandContextUtil.getExecutionEntityManager(commandContext).findById(processInstance.getId())); + return customers; + }); + assertThatJson(runtimeService.getVariable(processInstance.getId(), "customers")) + .isEqualTo("[{" + + " address: {" + + " street: 'Sesame Street'" + + " }" + + "}]"); + } + + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testJackson3JsonNodeVariable() { + tools.jackson.databind.ObjectMapper jackson3ObjectMapper = tools.jackson.databind.json.JsonMapper.shared(); + tools.jackson.databind.node.ObjectNode customer = jackson3ObjectMapper.createObjectNode() + .put("name", "Kermit"); + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customer", customer) + .start(); + + Object customerVariable = runtimeService.getVariable(processInstance.getId(), "customer"); + assertThat(customerVariable).isInstanceOf(ObjectNode.class); + assertThatJson(customerVariable) + .isEqualTo(""" + { + name: 'Kermit' + } + """); + } + + protected ObjectNode createBigJsonObject() { + ObjectNode valueNode = objectMapper.createObjectNode(); + for (int i = 0; i < 1000; i++) { + ObjectNode childNode = objectMapper.createObjectNode(); + childNode.put("test", "this is a simple test text"); + childNode.put("test2", "this is a simple test2 text"); + childNode.put("test3", "this is a simple test3 text"); + childNode.put("test4", "this is a simple test4 text"); + valueNode.set("var" + i, childNode); + } + return valueNode; + } + +} diff --git a/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java b/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java index 2990b94743f..7a9ebae2a2a 100644 --- a/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java +++ b/modules/flowable-engine/src/test/java/org/flowable/engine/test/json/JsonTest.java @@ -1105,6 +1105,28 @@ void testArrayNodeJsonNodeValue() { + "}]"); } + @Test + @Deployment(resources = "org/flowable/engine/test/api/oneTaskProcess.bpmn20.xml") + void testJackson2JsonNodeVariable() { + com.fasterxml.jackson.databind.ObjectMapper jackson2ObjectMapper = new com.fasterxml.jackson.databind.ObjectMapper(); + com.fasterxml.jackson.databind.node.ObjectNode customer = jackson2ObjectMapper.createObjectNode() + .put("name", "Kermit"); + + ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder() + .processDefinitionKey("oneTaskProcess") + .variable("customer", customer) + .start(); + + Object customerVariable = runtimeService.getVariable(processInstance.getId(), "customer"); + assertThat(customerVariable).isInstanceOf(ObjectNode.class); + assertThatJson(customerVariable) + .isEqualTo(""" + { + name: 'Kermit' + } + """); + } + protected ObjectNode createBigJsonObject() { ObjectNode valueNode = objectMapper.createObjectNode(); for (int i = 0; i < 1000; i++) { diff --git a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java index f3e637ee20e..d3705339f6f 100644 --- a/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java +++ b/modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToJsonStringSerializer.java @@ -105,8 +105,14 @@ public String serialize(EventInstance eventInstance) { Object jsonValue = payloadInstanceValue; if (payloadInstanceValue instanceof Supplier) { Object suppliedValue = ((Supplier) payloadInstanceValue).get(); - if (suppliedValue instanceof JsonNode) { - jsonValue = suppliedValue; + JsonNode jsonNode = JsonUtil.asJsonNode(suppliedValue, objectMapper, true); + if (jsonNode != null) { + jsonValue = jsonNode; + } + } else { + JsonNode jsonNode = JsonUtil.asJsonNode(jsonValue, objectMapper, true); + if (jsonNode != null) { + jsonValue = jsonNode; } } if (jsonValue instanceof JsonNode) { diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml index 820bf926be7..e5baf334e11 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/pom.xml @@ -167,6 +167,12 @@ true + + org.springframework.boot + spring-boot-jackson2 + true + + org.springframework.integration diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/FlowableProperties.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/FlowableProperties.java index c34c26070eb..e73824a17ac 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/FlowableProperties.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/FlowableProperties.java @@ -136,6 +136,13 @@ public class FlowableProperties { private Duration historyCleaningAfter = Duration.ofDays(365); private int historyCleaningBatchSize = 100; + /** + * Preferred JSON mapper to use for variables. + * The options are jackson and jackson2. + * Jackson is the default and jackson2 is deprecated for removal. + */ + private String variableJsonMapper = "jackson"; + public boolean isAsyncExecutorActivate() { return asyncExecutorActivate; } @@ -399,4 +406,12 @@ public int getHistoryCleaningBatchSize() { public void setHistoryCleaningBatchSize(int historyCleaningBatchSize) { this.historyCleaningBatchSize = historyCleaningBatchSize; } + + public String getVariableJsonMapper() { + return variableJsonMapper; + } + + public void setVariableJsonMapper(String variableJsonMapper) { + this.variableJsonMapper = variableJsonMapper; + } } diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java index b2fca32df61..8eb46cb3cbf 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/ProcessEngineAutoConfiguration.java @@ -22,6 +22,7 @@ import org.flowable.common.engine.api.async.AsyncTaskExecutor; import org.flowable.common.engine.api.scope.ScopeTypes; import org.flowable.common.engine.impl.cfg.IdGenerator; +import org.flowable.common.engine.impl.json.VariableJsonMapper; import org.flowable.common.engine.impl.persistence.StrongUuidGenerator; import org.flowable.common.spring.AutoDeploymentStrategy; import org.flowable.common.spring.CommonAutoDeploymentProperties; @@ -39,6 +40,7 @@ import org.flowable.spring.boot.condition.ConditionalOnProcessEngine; import org.flowable.spring.boot.eventregistry.FlowableEventRegistryProperties; import org.flowable.spring.boot.idm.FlowableIdmProperties; +import org.flowable.spring.boot.json.FlowableVariableJackson2JsonMapperConfiguration; import org.flowable.spring.boot.process.FlowableProcessProperties; import org.flowable.spring.boot.process.Process; import org.flowable.spring.boot.process.ProcessAsync; @@ -55,7 +57,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -94,7 +95,8 @@ "org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration" }) @Import({ - FlowableJobConfiguration.class + FlowableJobConfiguration.class, + FlowableVariableJackson2JsonMapperConfiguration.class }) public class ProcessEngineAutoConfiguration extends AbstractSpringEngineAutoConfiguration { @@ -171,6 +173,7 @@ public SpringAsyncHistoryExecutor asyncHistoryExecutor( @ConditionalOnMissingBean public SpringProcessEngineConfiguration springProcessEngineConfiguration(DataSource dataSource, PlatformTransactionManager platformTransactionManager, ObjectProvider objectMapperProvider, + ObjectProvider variableJsonMapperProvider, @Process ObjectProvider processIdGenerator, ObjectProvider globalIdGenerator, @ProcessAsync ObjectProvider asyncExecutorProvider, @@ -221,6 +224,7 @@ public SpringProcessEngineConfiguration springProcessEngineConfiguration(DataSou asyncTaskInvokerTaskExecutor.ifAvailable(conf::setAsyncTaskInvokerTaskExecutor); objectMapperProvider.ifAvailable(conf::setObjectMapper); + variableJsonMapperProvider.ifAvailable(conf::setVariableJsonMapper); configureSpringEngine(conf, platformTransactionManager); configureEngine(conf, dataSource); diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java index 71dd2d8bd69..6bfce806b38 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/app/AppEngineAutoConfiguration.java @@ -22,6 +22,7 @@ import org.flowable.app.spring.SpringAppEngineConfiguration; import org.flowable.app.spring.autodeployment.DefaultAutoDeploymentStrategy; import org.flowable.common.engine.api.scope.ScopeTypes; +import org.flowable.common.engine.impl.json.VariableJsonMapper; import org.flowable.common.engine.impl.persistence.StrongUuidGenerator; import org.flowable.common.spring.AutoDeploymentStrategy; import org.flowable.common.spring.CommonAutoDeploymentProperties; @@ -31,11 +32,13 @@ import org.flowable.spring.boot.condition.ConditionalOnAppEngine; import org.flowable.spring.boot.eventregistry.FlowableEventRegistryProperties; import org.flowable.spring.boot.idm.FlowableIdmProperties; +import org.flowable.spring.boot.json.FlowableVariableJackson2JsonMapperConfiguration; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; import org.springframework.core.io.Resource; import org.springframework.transaction.PlatformTransactionManager; @@ -55,6 +58,9 @@ FlowableIdmProperties.class, FlowableEventRegistryProperties.class, }) +@Import({ + FlowableVariableJackson2JsonMapperConfiguration.class, +}) public class AppEngineAutoConfiguration extends AbstractSpringEngineAutoConfiguration { protected final FlowableAppProperties appProperties; @@ -75,6 +81,7 @@ public AppEngineAutoConfiguration(FlowableProperties flowableProperties, Flowabl @ConditionalOnMissingBean public SpringAppEngineConfiguration springAppEngineConfiguration(DataSource dataSource, PlatformTransactionManager platformTransactionManager, ObjectProvider objectMapperProvider, + ObjectProvider variableJsonMapperProvider, ObjectProvider> appAutoDeploymentStrategies) throws IOException { SpringAppEngineConfiguration conf = new SpringAppEngineConfiguration(); @@ -92,6 +99,7 @@ public SpringAppEngineConfiguration springAppEngineConfiguration(DataSource data configureSpringEngine(conf, platformTransactionManager); configureEngine(conf, dataSource); objectMapperProvider.ifAvailable(conf::setObjectMapper); + variableJsonMapperProvider.ifAvailable(conf::setVariableJsonMapper); conf.setIdGenerator(new StrongUuidGenerator()); diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java index 1cd5479c3b0..f5bba870603 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineAutoConfiguration.java @@ -28,6 +28,7 @@ import org.flowable.cmmn.spring.configurator.SpringCmmnEngineConfigurator; import org.flowable.common.engine.api.async.AsyncTaskExecutor; import org.flowable.common.engine.api.scope.ScopeTypes; +import org.flowable.common.engine.impl.json.VariableJsonMapper; import org.flowable.common.spring.AutoDeploymentStrategy; import org.flowable.common.spring.CommonAutoDeploymentProperties; import org.flowable.common.spring.async.SpringAsyncTaskExecutor; @@ -51,6 +52,7 @@ import org.flowable.spring.boot.condition.ConditionalOnCmmnEngine; import org.flowable.spring.boot.eventregistry.FlowableEventRegistryProperties; import org.flowable.spring.boot.idm.FlowableIdmProperties; +import org.flowable.spring.boot.json.FlowableVariableJackson2JsonMapperConfiguration; import org.flowable.spring.job.service.SpringAsyncExecutor; import org.flowable.spring.job.service.SpringRejectedJobsHandler; import org.springframework.beans.factory.ObjectProvider; @@ -94,7 +96,8 @@ ProcessEngineServicesAutoConfiguration.class }) @Import({ - FlowableJobConfiguration.class + FlowableJobConfiguration.class, + FlowableVariableJackson2JsonMapperConfiguration.class, }) public class CmmnEngineAutoConfiguration extends AbstractSpringEngineAutoConfiguration { @@ -145,6 +148,7 @@ public SpringAsyncExecutor cmmnAsyncExecutor( @ConditionalOnMissingBean public SpringCmmnEngineConfiguration cmmnEngineConfiguration(DataSource dataSource, PlatformTransactionManager platformTransactionManager, ObjectProvider objectMapperProvider, + ObjectProvider variableJsonMapperProvider, @Cmmn ObjectProvider asyncExecutorProvider, ObjectProvider taskExecutor, @Cmmn ObjectProvider cmmnTaskExecutor, @@ -189,6 +193,7 @@ public SpringCmmnEngineConfiguration cmmnEngineConfiguration(DataSource dataSour configureSpringEngine(configuration, platformTransactionManager); configureEngine(configuration, dataSource); objectMapperProvider.ifAvailable(configuration::setObjectMapper); + variableJsonMapperProvider.ifAvailable(configuration::setVariableJsonMapper); configuration.setDeploymentName(defaultText(cmmnProperties.getDeploymentName(), configuration.getDeploymentName())); diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java index 9acdeaca711..6ea366de645 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/cmmn/CmmnEngineRestConfiguration.java @@ -12,9 +12,13 @@ */ package org.flowable.spring.boot.cmmn; +import java.util.List; + import org.flowable.cmmn.rest.service.api.CmmnRestResponseFactory; +import org.flowable.common.rest.variable.RestVariableConverter; import org.flowable.spring.boot.DispatcherServletConfiguration; -import org.springframework.beans.factory.annotation.Autowired; +import org.flowable.spring.boot.json.Jackson2JsonRestConverterConfiguration; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; @@ -26,15 +30,18 @@ * * @author Filip Hrisafov */ -@Import(DispatcherServletConfiguration.class) +@Import({ + DispatcherServletConfiguration.class, + Jackson2JsonRestConverterConfiguration.class +}) @ComponentScan("org.flowable.cmmn.rest.service.api") public class CmmnEngineRestConfiguration { - @Autowired - protected ObjectMapper objectMapper; - @Bean - public CmmnRestResponseFactory cmmnRestResponseFactory() { - return new CmmnRestResponseFactory(objectMapper); + public CmmnRestResponseFactory cmmnRestResponseFactory(ObjectMapper objectMapper, ObjectProvider variableConverters) { + CmmnRestResponseFactory restResponseFactory = new CmmnRestResponseFactory(objectMapper); + List additionalVariableConverters = variableConverters.orderedStream().toList(); + restResponseFactory.getVariableConverters().addAll(additionalVariableConverters); + return restResponseFactory; } } diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java index 8320d31c1ce..584f46a67c5 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/job/ExternalJobRestConfiguration.java @@ -17,8 +17,8 @@ import org.flowable.common.rest.variable.RestVariableConverter; import org.flowable.external.job.rest.service.api.ExternalJobRestResponseFactory; import org.flowable.spring.boot.DispatcherServletConfiguration; +import org.flowable.spring.boot.json.Jackson2JsonRestConverterConfiguration; import org.springframework.beans.factory.ObjectProvider; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -31,16 +31,16 @@ * * @author Filip Hrisafov */ -@Import(DispatcherServletConfiguration.class) +@Import({ + DispatcherServletConfiguration.class, + Jackson2JsonRestConverterConfiguration.class, +}) @ComponentScan("org.flowable.external.job.rest.service.api") public class ExternalJobRestConfiguration { - @Autowired - protected ObjectMapper objectMapper; - @Bean @ConditionalOnMissingBean //If we don't include this annotation, we cannot override the RestResponseFactory bean - public ExternalJobRestResponseFactory restResponseFactory(ObjectProvider variableConverters) { + public ExternalJobRestResponseFactory restResponseFactory(ObjectMapper objectMapper, ObjectProvider variableConverters) { return new ExternalJobRestResponseFactory(objectMapper, variableConverters.orderedStream().collect(Collectors.toList())); } } diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/FlowableVariableJackson2JsonMapperConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/FlowableVariableJackson2JsonMapperConfiguration.java new file mode 100644 index 00000000000..89c6e0d3cc8 --- /dev/null +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/FlowableVariableJackson2JsonMapperConfiguration.java @@ -0,0 +1,41 @@ +/* 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 org.flowable.spring.boot.json; + +import org.flowable.common.engine.impl.json.VariableJsonMapper; +import org.flowable.common.engine.impl.json.jackson2.Jackson2VariableJsonMapper; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author Filip Hrisafov + */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnProperty(prefix = "flowable", name = "variable-json-mapper", havingValue = "jackson2") +@ConditionalOnClass(ObjectMapper.class) +public class FlowableVariableJackson2JsonMapperConfiguration { + + @Bean + @ConditionalOnMissingBean + public VariableJsonMapper flowableVariableJsonMapper(ObjectProvider objectMapperProvider) { + ObjectMapper objectMapper = objectMapperProvider.getIfAvailable(ObjectMapper::new); + return new Jackson2VariableJsonMapper(objectMapper); + } + +} diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/Jackson2JsonRestConverterConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/Jackson2JsonRestConverterConfiguration.java new file mode 100644 index 00000000000..2b511f50990 --- /dev/null +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/json/Jackson2JsonRestConverterConfiguration.java @@ -0,0 +1,39 @@ +/* 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 org.flowable.spring.boot.json; + +import org.flowable.common.rest.variable.Jackson2JsonObjectRestVariableConverter; +import org.flowable.common.rest.variable.RestVariableConverter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.fasterxml.jackson.databind.JsonNode; + +import tools.jackson.databind.ObjectMapper; + +/** + * @author Filip Hrisafov + */ +@ConditionalOnProperty(prefix = "flowable", name = "variable-json-mapper", havingValue = "jackson2") +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass(JsonNode.class) +public class Jackson2JsonRestConverterConfiguration { + + @Bean + public RestVariableConverter jackson2RestVariableConverter(ObjectMapper objectMapper) { + return new Jackson2JsonObjectRestVariableConverter(objectMapper); + } + +} diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java index 63f6a170a95..5d982154f19 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/java/org/flowable/spring/boot/process/ProcessEngineRestConfiguration.java @@ -12,9 +12,13 @@ */ package org.flowable.spring.boot.process; +import java.util.List; + +import org.flowable.common.rest.variable.RestVariableConverter; import org.flowable.rest.service.api.RestResponseFactory; import org.flowable.spring.boot.DispatcherServletConfiguration; -import org.springframework.beans.factory.annotation.Autowired; +import org.flowable.spring.boot.json.Jackson2JsonRestConverterConfiguration; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -27,16 +31,19 @@ * * @author Filip Hrisafov */ -@Import(DispatcherServletConfiguration.class) +@Import({ + DispatcherServletConfiguration.class, + Jackson2JsonRestConverterConfiguration.class, +}) @ComponentScan("org.flowable.rest.service.api") public class ProcessEngineRestConfiguration { - @Autowired - protected ObjectMapper objectMapper; - @ConditionalOnMissingBean //If we don't include this annotation, we cannot override the RestResponseFactory bean @Bean - public RestResponseFactory restResponseFactory() { - return new RestResponseFactory(objectMapper); + public RestResponseFactory restResponseFactory(ObjectMapper objectMapper, ObjectProvider variableConverters) { + RestResponseFactory responseFactory = new RestResponseFactory(objectMapper); + List additionalVariableConverters = variableConverters.orderedStream().toList(); + responseFactory.getVariableConverters().addAll(additionalVariableConverters); + return responseFactory; } } diff --git a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index 3babdc17af9..050d700a1e2 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/modules/flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -784,6 +784,17 @@ "description": "App engine." } ] + }, + { + "name": "flowable.variable-json-mapper", + "values": [ + { + "value": "jackson" + }, + { + "value": "jackson2" + } + ] } ] } diff --git a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/VariableServiceConfiguration.java b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/VariableServiceConfiguration.java index 4be8254cc74..894b2febbfe 100755 --- a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/VariableServiceConfiguration.java +++ b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/VariableServiceConfiguration.java @@ -14,6 +14,7 @@ import org.flowable.common.engine.impl.AbstractServiceConfiguration; import org.flowable.common.engine.impl.el.ExpressionManager; +import org.flowable.common.engine.impl.json.VariableJsonMapper; import org.flowable.variable.api.types.VariableTypes; import org.flowable.variable.service.history.InternalHistoryVariableManager; import org.flowable.variable.service.impl.DefaultVariableInstanceValueModifier; @@ -68,6 +69,8 @@ public class VariableServiceConfiguration extends AbstractServiceConfiguration { +public class JsonType implements VariableType, MutableVariableType { public static final String TYPE_NAME = "json"; @@ -52,31 +49,31 @@ public class JsonType implements VariableType, MutableVariableType 0) { try { - jsonValue = objectMapper.readTree(textValue); + jsonValue = jsonMapper.readTree(textValue); valueFields.setCachedValue(jsonValue); traceValue(jsonValue, valueFields); } catch (Exception e) { @@ -109,10 +106,10 @@ public Object getValue(ValueFields valueFields) { byte[] bytes = valueFields.getBytes(); if (bytes != null && bytes.length > 0) { try { - jsonValue = objectMapper.readTree(bytes); + jsonValue = jsonMapper.readTree(bytes); valueFields.setCachedValue(jsonValue); traceValue(jsonValue, valueFields); - } catch (IOException e) { + } catch (Exception e) { LOGGER.error("Error reading json variable {}", valueFields.getName(), e); } } @@ -127,7 +124,6 @@ public void setValue(Object value, ValueFields valueFields) { valueFields.setBytes(null); valueFields.setCachedValue(null); } else { - JsonNode jsonNode = (JsonNode) value; String textValue = value.toString(); int length = textValue.length(); @@ -139,13 +135,13 @@ public void setValue(Object value, ValueFields valueFields) { valueFields.setBytes(textValue.getBytes(StandardCharsets.UTF_8)); valueFields.setTextValue(null); } - valueFields.setCachedValue(jsonNode); - traceValue(jsonNode, valueFields); + valueFields.setCachedValue(value); + traceValue(value, valueFields); } } @Override - public boolean updateValueIfChanged(JsonNode originalNode, JsonNode originalCopyNode, VariableInstanceEntity variableInstanceEntity) { + public boolean updateValueIfChanged(Object originalNode, Object originalCopyNode, VariableInstanceEntity variableInstanceEntity) { boolean valueChanged = false; if (!Objects.equals(originalNode, originalCopyNode)) { String textValue = originalNode.toString(); @@ -163,14 +159,14 @@ public boolean updateValueIfChanged(JsonNode originalNode, JsonNode originalCopy return valueChanged; } - protected void traceValue(JsonNode value, ValueFields valueFields) { + protected void traceValue(Object value, ValueFields valueFields) { if (trackObjects && valueFields instanceof VariableInstanceEntity) { CommandContext commandContext = Context.getCommandContext(); if (commandContext != null) { VariableServiceConfiguration variableServiceConfiguration = getVariableServiceConfiguration(valueFields); if (variableServiceConfiguration != null) { commandContext.addCloseListener(new TraceableVariablesCommandContextCloseListener( - new TraceableObject<>(this, value, value.deepCopy(), (VariableInstanceEntity) valueFields) + new TraceableObject<>(this, value, jsonMapper.deepCopy(value), (VariableInstanceEntity) valueFields) )); } @@ -210,6 +206,6 @@ public boolean isAbleToStore(Object value) { if (value == null) { return true; } - return value instanceof JsonNode; + return jsonMapper.isJsonNode(value); } } diff --git a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java index b247aded193..e36733a5406 100644 --- a/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java +++ b/modules/flowable-variable-service/src/main/java/org/flowable/variable/service/impl/util/VariableLoggingSessionUtil.java @@ -19,6 +19,7 @@ import org.flowable.common.engine.api.scope.ScopeTypes; import org.flowable.common.engine.impl.logging.LoggingSessionUtil; +import org.flowable.common.engine.impl.util.JsonUtil; import org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntity; import org.flowable.variable.service.impl.types.BigDecimalType; import org.flowable.variable.service.impl.types.BigIntegerType; @@ -72,14 +73,15 @@ public static ObjectNode addLoggingData(String message, VariableInstanceEntity v loggingNode.putNull("variableValue"); } else { - addVariableValue(variableInstance.getValue(), variableTypeName, "variableRawValue", "variableValue", loggingNode); + addVariableValue(variableInstance.getValue(), variableTypeName, "variableRawValue", "variableValue", loggingNode, objectMapper); } } return loggingNode; } - public static void addVariableValue(Object variableValue, String variableTypeName, String variableRawValueName, String variableValueName, ObjectNode loggingNode) { + public static void addVariableValue(Object variableValue, String variableTypeName, String variableRawValueName, String variableValueName, + ObjectNode loggingNode, ObjectMapper objectMapper) { if (LongType.TYPE_NAME.equals(variableTypeName)) { loggingNode.put(variableRawValueName, (Long) variableValue); } else if (IntegerType.TYPE_NAME.equals(variableTypeName)) { @@ -101,7 +103,8 @@ public static void addVariableValue(Object variableValue, String variableTypeNam } else if (BooleanType.TYPE_NAME.equals(variableTypeName)) { loggingNode.put(variableRawValueName, (Boolean) variableValue); } else if (JsonType.TYPE_NAME.equals(variableTypeName)) { - loggingNode.set(variableRawValueName, (JsonNode) variableValue); + JsonNode jsonNode = JsonUtil.asJsonNode(variableValue, objectMapper); + loggingNode.set(variableRawValueName, jsonNode); } else if (UUIDType.TYPE_NAME.equals(variableTypeName)) { loggingNode.put("variableRawValue", ((UUID) variableValue).toString()); } else if (NullType.TYPE_NAME.equals(variableTypeName)) { diff --git a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java index 96664519334..2d1606ec654 100644 --- a/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java +++ b/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl.java @@ -210,6 +210,8 @@ import org.flowable.common.engine.impl.cfg.mail.FlowableMailClientCreator; import org.flowable.common.engine.impl.cfg.mail.MailServerInfo; import org.flowable.common.engine.impl.history.HistoryLevel; +import org.flowable.common.engine.impl.json.VariableJsonMapper; +import org.flowable.common.engine.impl.json.jackson3.Jackson3VariableJsonMapper; import org.flowable.common.engine.impl.persistence.deploy.DefaultDeploymentCache; import org.flowable.common.engine.impl.persistence.deploy.DeploymentCache; import org.flowable.common.engine.impl.util.DefaultClockImpl; @@ -242,6 +244,7 @@ import org.slf4j.LoggerFactory; import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; /** * @author Tom Baeyens @@ -535,7 +538,8 @@ public abstract class ProcessEngineConfigurationImpl extends ProcessEngineConfig */ protected int maxNrOfStatementsInBulkInsert = 100; - protected ObjectMapper objectMapper = new ObjectMapper(); + protected ObjectMapper objectMapper; + protected VariableJsonMapper variableJsonMapper; protected boolean enableEventDispatcher = true; protected FlowableEventDispatcher eventDispatcher; @@ -577,6 +581,7 @@ protected void init() { initConfigurators(); configuratorsBeforeInit(); initClock(); + initObjectMapper(); initProcessDiagramGenerator(); initHistoryLevel(); initExpressionManager(); @@ -1284,6 +1289,16 @@ private void initClock() { } } + protected void initObjectMapper() { + if (objectMapper == null) { + objectMapper = JsonMapper.builder().build(); + } + + if (variableJsonMapper == null) { + variableJsonMapper = new Jackson3VariableJsonMapper(objectMapper); + } + } + protected void initProcessDiagramGenerator() { if (processDiagramGenerator == null) { processDiagramGenerator = new DefaultProcessDiagramGenerator(); @@ -1378,9 +1393,9 @@ protected void initVariableTypes() { variableTypes.addType(new DateType()); variableTypes.addType(new DoubleType()); variableTypes.addType(new UUIDType()); - variableTypes.addType(new JsonType(maxLengthStringVariableType, objectMapper, false)); + variableTypes.addType(new JsonType(maxLengthStringVariableType, variableJsonMapper, false)); // longJsonType only needed for reading purposes - variableTypes.addType(JsonType.longJsonType(maxLengthStringVariableType, objectMapper, false)); + variableTypes.addType(JsonType.longJsonType(maxLengthStringVariableType, variableJsonMapper, false)); variableTypes.addType(new ByteArrayType()); variableTypes.addType(new SerializableType()); if (customPostVariableTypes != null) { @@ -2317,6 +2332,15 @@ public ProcessEngineConfigurationImpl setObjectMapper(ObjectMapper objectMapper) return this; } + public VariableJsonMapper getVariableJsonMapper() { + return variableJsonMapper; + } + + public ProcessEngineConfigurationImpl setVariableJsonMapper(VariableJsonMapper variableJsonMapper) { + this.variableJsonMapper = variableJsonMapper; + return this; + } + public Flowable5CompatibilityHandler getFlowable5CompatibilityHandler() { return flowable5CompatibilityHandler; } From b0b031559581b45fbc9136eedb9b52c5ee26a0b5 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Thu, 20 Nov 2025 00:45:20 +0100 Subject: [PATCH 6/6] Add checkstyle import control check --- build-tools/pom.xml | 20 ++++++++ .../resources/build-config/checkstyle.xml | 51 +++++++++++++++++++ .../resources/build-config/import-control.xml | 40 +++++++++++++++ modules/flowable-parent/pom.xml | 13 +++++ .../flowable-spring-boot-samples/pom.xml | 1 + pom.xml | 36 ++++++++++++- 6 files changed, 160 insertions(+), 1 deletion(-) create mode 100755 build-tools/pom.xml create mode 100644 build-tools/src/main/resources/build-config/checkstyle.xml create mode 100644 build-tools/src/main/resources/build-config/import-control.xml diff --git a/build-tools/pom.xml b/build-tools/pom.xml new file mode 100755 index 00000000000..5df3c3fb312 --- /dev/null +++ b/build-tools/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + flowable-build-tools + + + org.flowable + flowable-root + 8.0.0-SNAPSHOT + + + + true + true + + + + diff --git a/build-tools/src/main/resources/build-config/checkstyle.xml b/build-tools/src/main/resources/build-config/checkstyle.xml new file mode 100644 index 00000000000..3a1dd66815a --- /dev/null +++ b/build-tools/src/main/resources/build-config/checkstyle.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build-tools/src/main/resources/build-config/import-control.xml b/build-tools/src/main/resources/build-config/import-control.xml new file mode 100644 index 00000000000..711b53eba72 --- /dev/null +++ b/build-tools/src/main/resources/build-config/import-control.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/flowable-parent/pom.xml b/modules/flowable-parent/pom.xml index 909079b46db..bb508ba1074 100644 --- a/modules/flowable-parent/pom.xml +++ b/modules/flowable-parent/pom.xml @@ -158,6 +158,19 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + + + check-style + verify + + check + + + + diff --git a/modules/flowable-spring-boot/flowable-spring-boot-samples/pom.xml b/modules/flowable-spring-boot/flowable-spring-boot-samples/pom.xml index b83346c7a1b..2bd13990316 100644 --- a/modules/flowable-spring-boot/flowable-spring-boot-samples/pom.xml +++ b/modules/flowable-spring-boot/flowable-spring-boot-samples/pom.xml @@ -15,6 +15,7 @@ true false + true pom diff --git a/pom.xml b/pom.xml index 284834acc54..e59c8d9f3c2 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ modules/flowable-bom + build-tools modules/flowable-parent modules/flowable-dependencies modules/flowable-bpmn-model @@ -170,7 +171,33 @@ ${central-publishing-maven-plugin.version} true - + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.6.0 + + build-config/checkstyle.xml + true + true + error + true + basedir=${basedir} + + + + com.puppycrawl.tools + checkstyle + 12.1.2 + + + org.flowable + flowable-build-tools + ${project.version} + + + + + @@ -367,6 +394,13 @@ modules/flowable5-test + + quick + + true + true + +