From 6fe673a88837590a8fa0aa4a013831eb4597b4c2 Mon Sep 17 00:00:00 2001 From: Ivan Yakubenko <42006970+YakubenkoIv@users.noreply.github.com> Date: Thu, 6 Aug 2026 13:45:29 +0300 Subject: [PATCH] Fix unknown Sender ID (#84) Co-authored-by: Ivan Yakubenko --- .github/workflows/ci.yml | 3 +- .../writer/DefaultHeaderProvider.java | 7 +++-- .../sdmx30/DefaultSenderIdHolder.java | 31 +++++++++++++++++++ .../sdmx30/common/DefaultHeaderProvider.java | 7 +++-- 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 sdmx30-infomodel/src/main/java/com/epam/jsdmx/infomodel/sdmx30/DefaultSenderIdHolder.java diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7d17d00..39a8a53 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,8 +36,9 @@ jobs: path: ~/.gradle/wrapper key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} - name: Setup java - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} + distribution: 'temurin' - name: Build with gradle run: ./gradlew build \ No newline at end of file diff --git a/sdmx-json10/src/main/java/com/epam/jsdmx/json10/structure/writer/DefaultHeaderProvider.java b/sdmx-json10/src/main/java/com/epam/jsdmx/json10/structure/writer/DefaultHeaderProvider.java index 8046754..55d0b52 100644 --- a/sdmx-json10/src/main/java/com/epam/jsdmx/json10/structure/writer/DefaultHeaderProvider.java +++ b/sdmx-json10/src/main/java/com/epam/jsdmx/json10/structure/writer/DefaultHeaderProvider.java @@ -6,6 +6,7 @@ import java.util.Locale; import com.epam.jsdmx.infomodel.sdmx30.DefaultLocaleHolder; +import com.epam.jsdmx.infomodel.sdmx30.DefaultSenderIdHolder; import com.epam.jsdmx.infomodel.sdmx30.Party; import com.epam.jsdmx.serializer.sdmx30.common.Header; @@ -24,7 +25,7 @@ public Header provide() { header.setContentLanguages(getDefaultLocales()); header.setTest(false); header.setPrepared(Instant.now()); - header.setSender(generateUnknownParty()); + header.setSender(generateSender()); return header; } @@ -32,9 +33,9 @@ private String generateId() { return "IDREF" + RandomUtils.nextInt(1000, 9999); } - private Party generateUnknownParty() { + private Party generateSender() { return Party.builder() - .id("unknown") + .id(DefaultSenderIdHolder.INSTANCE.get()) .build(); } diff --git a/sdmx30-infomodel/src/main/java/com/epam/jsdmx/infomodel/sdmx30/DefaultSenderIdHolder.java b/sdmx30-infomodel/src/main/java/com/epam/jsdmx/infomodel/sdmx30/DefaultSenderIdHolder.java new file mode 100644 index 0000000..a827d76 --- /dev/null +++ b/sdmx30-infomodel/src/main/java/com/epam/jsdmx/infomodel/sdmx30/DefaultSenderIdHolder.java @@ -0,0 +1,31 @@ +package com.epam.jsdmx.infomodel.sdmx30; + +import org.apache.commons.lang3.StringUtils; + +/** + * Utility singleton class to hold the default Sender id for the library to be consumed + * by message header writers. The id is read from the environment variable + * SDMX_SENDER_ID and if not present, defaults to {@code "unknown"}. + */ +public class DefaultSenderIdHolder { + + public static final DefaultSenderIdHolder INSTANCE = new DefaultSenderIdHolder(); + + public static final String SENDER_ID_VARIABLE_NAME = "SDMX_SENDER_ID"; + + private static final String DEFAULT_SENDER_ID = "unknown"; + + private final String senderId; + + private DefaultSenderIdHolder() { + final String envSenderId = System.getenv(SENDER_ID_VARIABLE_NAME); + senderId = StringUtils.isEmpty(envSenderId) ? DEFAULT_SENDER_ID : envSenderId; + } + + /** + * Returns current value of the default Sender id. + */ + public String get() { + return senderId; + } +} diff --git a/sdmx30-serializer/src/main/java/com/epam/jsdmx/serializer/sdmx30/common/DefaultHeaderProvider.java b/sdmx30-serializer/src/main/java/com/epam/jsdmx/serializer/sdmx30/common/DefaultHeaderProvider.java index 0c3b145..3d0f83f 100644 --- a/sdmx30-serializer/src/main/java/com/epam/jsdmx/serializer/sdmx30/common/DefaultHeaderProvider.java +++ b/sdmx30-serializer/src/main/java/com/epam/jsdmx/serializer/sdmx30/common/DefaultHeaderProvider.java @@ -6,6 +6,7 @@ import java.util.Locale; import com.epam.jsdmx.infomodel.sdmx30.DefaultLocaleHolder; +import com.epam.jsdmx.infomodel.sdmx30.DefaultSenderIdHolder; import com.epam.jsdmx.infomodel.sdmx30.Party; import lombok.SneakyThrows; @@ -33,7 +34,7 @@ public Header provide() { header.setContentLanguages(getDefaultLocales()); header.setTest(false); header.setPrepared(Instant.now()); - header.setSender(generateUnknownParty()); + header.setSender(generateSenderParty()); return header; } @@ -41,9 +42,9 @@ private String generateId() { return "IDREF" + RandomUtils.nextInt(1000, 9999); } - private Party generateUnknownParty() { + private Party generateSenderParty() { return Party.builder() - .id("unknown") + .id(DefaultSenderIdHolder.INSTANCE.get()) .build(); }