From a55d5cd5176b8b941968f50d09a794e82166c9db Mon Sep 17 00:00:00 2001 From: Vasil Ilchev Date: Wed, 6 Aug 2025 09:46:19 +0300 Subject: [PATCH] Fix class cast exception when deserielize getRemoteEvent() by any ServiceEvent (#2593) Co-authored-by: vasilchev --- .../remote/service/AbstractServiceRemoteEvent.java | 6 +++--- .../hawkbit/event/EventPublisherConfiguration.java | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/service/AbstractServiceRemoteEvent.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/service/AbstractServiceRemoteEvent.java index 855a6db5b..28ff47690 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/service/AbstractServiceRemoteEvent.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/event/remote/service/AbstractServiceRemoteEvent.java @@ -10,15 +10,15 @@ package org.eclipse.hawkbit.repository.event.remote.service; import lombok.Getter; -import org.eclipse.hawkbit.repository.event.remote.RemoteTenantAwareEvent; +import org.eclipse.hawkbit.repository.event.remote.AbstractRemoteEvent; @Getter -public abstract class AbstractServiceRemoteEvent extends RemoteTenantAwareEvent { +public abstract class AbstractServiceRemoteEvent extends AbstractRemoteEvent { private final T remoteEvent; protected AbstractServiceRemoteEvent(T remoteEvent) { - super(remoteEvent == null ? "_empty_tenant_" : remoteEvent.getTenant(), remoteEvent == null ? "_empty_source_" : remoteEvent.getSource()); + super(remoteEvent == null ? "_empty_source_" : remoteEvent.getSource()); this.remoteEvent = remoteEvent; } diff --git a/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/event/EventPublisherConfiguration.java b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/event/EventPublisherConfiguration.java index 8dbc6552c..28a8fdd0e 100644 --- a/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/event/EventPublisherConfiguration.java +++ b/hawkbit-repository/hawkbit-repository-core/src/main/java/org/eclipse/hawkbit/event/EventPublisherConfiguration.java @@ -18,6 +18,7 @@ import org.eclipse.hawkbit.repository.event.ApplicationEventFilter; import org.eclipse.hawkbit.repository.event.EventPublisherHolder; import org.eclipse.hawkbit.repository.event.remote.AbstractRemoteEvent; import org.eclipse.hawkbit.repository.event.remote.RemoteTenantAwareEvent; +import org.eclipse.hawkbit.repository.event.remote.service.AbstractServiceRemoteEvent; import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -101,6 +102,15 @@ public class EventPublisherConfiguration { return; } + if (event instanceof final AbstractServiceRemoteEvent serviceRemoteEvent + && serviceRemoteEvent.getRemoteEvent() instanceof RemoteTenantAwareEvent tenantAwareEvent) { + systemSecurityContext.runAsSystemAsTenant(() -> { + super.multicastEvent(event, eventType); + return null; + }, tenantAwareEvent.getTenant()); + return; + } + super.multicastEvent(event, eventType); } }