Merge pull request #6478 from elsa-workflows/bug/composite-activity-serialization

Fix serialization of composite activities
This commit is contained in:
Sipke Schoorstra 2025-03-10 08:54:42 +01:00 committed by GitHub
commit 8dca671ae2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 25 additions and 18 deletions

View file

@ -1,5 +1,4 @@
version: '3.7'
services:
services:
consul-agent-1: &consul-agent
image: consul:latest
@ -30,14 +29,15 @@ services:
command: "agent -server -bootstrap-expect 3 -ui -client 0.0.0.0"
sqlserver:
image: "mcr.microsoft.com/mssql/server:2019-latest"
image: mcr.microsoft.com/mssql/server:2022-latest
ports:
- "3433:1433"
- 1433:1433
environment:
SA_PASSWORD: "Elsa2022!"
MSSQL_SA_PASSWORD: "Elsa2022!"
ACCEPT_EULA: "Y"
volumes:
- c:\data\docker\sqlserver2019:/var/opt/mssql/data
- sqlserver_data:/var/opt/mssql
restart: unless-stopped
postgres:
image: postgres:13.3-alpine
@ -123,5 +123,6 @@ networks:
volumes:
mongodb_data:
pgdata-3:
sqlserver_data:
elasticsearch-data:
driver: local

View file

@ -96,6 +96,7 @@ const bool useTenantsFromConfiguration = true;
const bool useSecrets = false;
const bool disableVariableWrappers = false;
const bool disableVariableCopying = false;
const bool useOtel = false;
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
@ -120,13 +121,15 @@ var sqlDatabaseProvider = Enum.Parse<SqlDatabaseProvider>(configuration["Databas
TypeAliasRegistry.RegisterAlias("OrderReceivedProducerFactory", typeof(GenericProducerFactory<string, OrderReceived>));
TypeAliasRegistry.RegisterAlias("OrderReceivedConsumerFactory", typeof(GenericConsumerFactory<string, OrderReceived>));
if (useOtel)
{
// Configure OpenTelemetry Tracing
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Elsa.Workflows") // Match your ActivitySource name here
.SetSampler(new AlwaysOnSampler()) // Always record traces for testing
.AddConsoleExporter() // Export spans to the console (optional)
.Build();
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Elsa.Workflows") // Match your ActivitySource name here
.SetSampler(new AlwaysOnSampler()) // Always record traces for testing
.AddConsoleExporter() // Export spans to the console (optional)
.Build();
}
// Add Elsa services.
services

View file

@ -6,6 +6,7 @@ using Elsa.Workflows.Activities;
using Elsa.Workflows.Helpers;
using Elsa.Workflows.Models;
using Elsa.Workflows.Serialization.Helpers;
using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Workflows.Serialization.Converters;
@ -64,7 +65,7 @@ public class ActivityJsonConverter(
/// <inheritdoc />
public override void Write(Utf8JsonWriter writer, IActivity value, JsonSerializerOptions options)
{
var clonedOptions = GetClonedOptions(options);
var clonedOptions = GetClonedWriterOptions(options);
var activityDescriptor = activityRegistry.Find(value.Type, value.Version);
// Give the activity descriptor a chance to customize the serializer options.
@ -116,4 +117,11 @@ public class ActivityJsonConverter(
clonedOptions.Converters.Add(new ExpressionJsonConverterFactory(expressionDescriptorRegistry));
return clonedOptions;
}
private JsonSerializerOptions GetClonedWriterOptions(JsonSerializerOptions options)
{
var clonedOptions = GetClonedOptions(options);
clonedOptions.Converters.Add(new JsonIgnoreCompositeRootConverterFactory(serviceProvider.GetRequiredService<ActivityWriter>()));
return clonedOptions;
}
}

View file

@ -109,11 +109,6 @@ public class WorkflowDefinitionActivityProvider(IWorkflowDefinitionStore store,
activity.LatestAvailablePublishedVersionId = latestPublishedVersion?.Id;
return activity;
},
ConfigureSerializerOptions = options =>
{
options.Converters.Add(new JsonIgnoreCompositeRootConverterFactory(activityWriter));
return options;
}
};
}