diff --git a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java index 0574565a0..e5331ba9d 100644 --- a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java +++ b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/DmfApiConfiguration.java @@ -9,8 +9,6 @@ */ package org.eclipse.hawkbit.amqp; -import static org.eclipse.hawkbit.dmf.DmfMessageConverter.DMF_JSON_MODEL_PACKAGE; - import java.sql.SQLException; import java.time.Duration; import java.util.Arrays; @@ -52,6 +50,7 @@ import org.springframework.context.annotation.PropertySource; import org.springframework.core.retry.RetryPolicy; import org.springframework.core.retry.RetryTemplate; import org.springframework.util.ErrorHandler; +import org.springframework.util.ObjectUtils; import tools.jackson.databind.json.JsonMapper; /** @@ -99,8 +98,12 @@ public class DmfApiConfiguration { @ConditionalOnMissingBean(name = "dmfMessageConverter") // override it if needed to add / edit trusted packages or need other customization public MessageConverter dmfMessageConverter( final JsonMapper jsonMapper, - @Value("${hawkbit.dmf.trusted-packages:" + DMF_JSON_MODEL_PACKAGE + "}") final String trustedPackages) { - return new DmfMessageConverter(jsonMapper, Arrays.stream(trustedPackages.split(",")).map(String::trim).toArray(String[]::new)); + @Value("${hawkbit.dmf.trusted-packages:}") final String trustedPackages) { + return new DmfMessageConverter( + jsonMapper, + ObjectUtils.isEmpty(trustedPackages) + ? new String[0] + : Arrays.stream(trustedPackages.split(",")).map(String::trim).toArray(String[]::new)); } /** diff --git a/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/DmfMessageConverter.java b/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/DmfMessageConverter.java index c37b66f7f..cad684ae5 100644 --- a/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/DmfMessageConverter.java +++ b/hawkbit-dmf/hawkbit-dmf-api/src/main/java/org/eclipse/hawkbit/dmf/DmfMessageConverter.java @@ -9,6 +9,9 @@ */ package org.eclipse.hawkbit.dmf; +import java.util.Arrays; +import java.util.stream.Stream; + import org.jspecify.annotations.NonNull; import org.jspecify.annotations.Nullable; import org.springframework.amqp.core.Message; @@ -22,14 +25,33 @@ import tools.jackson.databind.json.JsonMapper; // empty payload is empty byte[] and not try to convert it to Object (which fail since it is not JSON) public class DmfMessageConverter extends JacksonJsonMessageConverter { - public static final String DMF_JSON_MODEL_PACKAGE = "org.eclipse.hawkbit.dmf.json.model"; + private static final String DMF_JSON_MODEL_PACKAGE = "org.eclipse.hawkbit.dmf.json.model"; - public DmfMessageConverter(final String... trustedPackages) { - this(new JsonMapper(), trustedPackages); + /** + * Constructor unsing default {@link JsonMapper}, i.e. new JsonMapper() + * + * @param trustedPackagesExt {@link DmfMessageConverter} always trust {@link #DMF_JSON_MODEL_PACKAGE}. If any additional packages + * shall be trusted provided here + */ + public DmfMessageConverter(final String... trustedPackagesExt) { + this(new JsonMapper(), trustedPackagesExt); } - public DmfMessageConverter(final JsonMapper jsonMapper, final String... trustedPackages) { - super(jsonMapper, trustedPackages.length == 0 ? new String[] { DMF_JSON_MODEL_PACKAGE } : trustedPackages); + /** + * Constructor with specified {@link JsonMapper} + * + * @param jsonMapper the {@link JsonMapper} to use for conversion + * @param trustedPackagesExt {@link DmfMessageConverter} always trust {@link #DMF_JSON_MODEL_PACKAGE}. If any additional packages + * shall be trusted provided here + */ + public DmfMessageConverter(final JsonMapper jsonMapper, final String... trustedPackagesExt) { + super( + jsonMapper, + trustedPackagesExt == null || trustedPackagesExt.length == 0 + ? new String[] { DMF_JSON_MODEL_PACKAGE } + : Stream.concat(Stream.of(DMF_JSON_MODEL_PACKAGE), Arrays.stream(trustedPackagesExt)) + .distinct() + .toArray(String[]::new)); } @Override