This is an automated email from the ASF dual-hosted git repository.
piotr pushed a commit to branch non_string_header_key
in repository https://gitbox.apache.org/repos/asf/iggy.git
The following commit(s) were added to refs/heads/non_string_header_key by this
push:
new 29a9201f1 Fix java user headers serializer
29a9201f1 is described below
commit 29a9201f1e22873034e4c1a4cdcc77e7a10ab0b5
Author: spetz <[email protected]>
AuthorDate: Thu Jan 29 21:10:45 2026 +0100
Fix java user headers serializer
---
.../message/{HeaderValue.java => HeaderEntry.java} | 6 +++++-
.../main/java/org/apache/iggy/message/HeaderKey.java | 10 ++++++++++
.../java/org/apache/iggy/message/HeaderKind.java | 17 +++++++++++++++++
.../java/org/apache/iggy/message/HeaderValue.java | 16 +++++++++++++++-
.../main/java/org/apache/iggy/message/Message.java | 20 ++++++++++++++++++++
5 files changed, 67 insertions(+), 2 deletions(-)
diff --git
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderValue.java
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderEntry.java
similarity index 81%
copy from
foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderValue.java
copy to
foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderEntry.java
index 3714dd27e..cec217546 100644
---
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderValue.java
+++
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderEntry.java
@@ -19,4 +19,8 @@
package org.apache.iggy.message;
-public record HeaderValue(HeaderKind kind, String value) {}
+/**
+ * Represents a single header entry with key and value.
+ * Used for JSON serialization/deserialization of user headers.
+ */
+public record HeaderEntry(HeaderKey key, HeaderValue value) {}
diff --git
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKey.java
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKey.java
index a42ae1478..ad65857a9 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKey.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKey.java
@@ -19,10 +19,20 @@
package org.apache.iggy.message;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
+import java.util.Base64;
public record HeaderKey(HeaderKind kind, byte[] value) {
+ @JsonCreator
+ public static HeaderKey fromJson(@JsonProperty("kind") HeaderKind kind,
@JsonProperty("value") String base64Value) {
+ byte[] decodedValue = Base64.getDecoder().decode(base64Value);
+ return new HeaderKey(kind, decodedValue);
+ }
+
public static HeaderKey fromString(String val) {
if (val.isEmpty() || val.length() > 255) {
throw new IllegalArgumentException("Value has incorrect size, must
be between 1 and 255");
diff --git
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKind.java
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKind.java
index 23ef5d114..fe1bf2ebf 100644
---
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKind.java
+++
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderKind.java
@@ -19,21 +19,38 @@
package org.apache.iggy.message;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
public enum HeaderKind {
+ @JsonProperty("raw")
Raw(1),
+ @JsonProperty("string")
String(2),
+ @JsonProperty("bool")
Bool(3),
+ @JsonProperty("int8")
Int8(4),
+ @JsonProperty("int16")
Int16(5),
+ @JsonProperty("int32")
Int32(6),
+ @JsonProperty("int64")
Int64(7),
+ @JsonProperty("int128")
Int128(8),
+ @JsonProperty("uint8")
Uint8(9),
+ @JsonProperty("uint16")
Uint16(10),
+ @JsonProperty("uint32")
Uint32(11),
+ @JsonProperty("uint64")
Uint64(12),
+ @JsonProperty("uint128")
Uint128(13),
+ @JsonProperty("float32")
Float32(14),
+ @JsonProperty("float64")
Float64(15);
private final int code;
diff --git
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderValue.java
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderValue.java
index 3714dd27e..90b3bf053 100644
---
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderValue.java
+++
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/HeaderValue.java
@@ -19,4 +19,18 @@
package org.apache.iggy.message;
-public record HeaderValue(HeaderKind kind, String value) {}
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+
+public record HeaderValue(HeaderKind kind, String value) {
+ @JsonCreator
+ public static HeaderValue fromJson(
+ @JsonProperty("kind") HeaderKind kind, @JsonProperty("value")
String base64Value) {
+ byte[] decodedValue = Base64.getDecoder().decode(base64Value);
+ String stringValue = new String(decodedValue, StandardCharsets.UTF_8);
+ return new HeaderValue(kind, stringValue);
+ }
+}
diff --git
a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/Message.java
b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/Message.java
index 5efd22e2f..e389c252c 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/Message.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/message/Message.java
@@ -19,12 +19,32 @@
package org.apache.iggy.message;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
import java.math.BigInteger;
+import java.util.Base64;
import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public record Message(MessageHeader header, byte[] payload, Map<HeaderKey,
HeaderValue> userHeaders) {
+ @JsonCreator
+ public static Message fromJson(
+ @JsonProperty("header") MessageHeader header,
+ @JsonProperty("payload") String base64Payload,
+ @JsonProperty("user_headers") List<HeaderEntry> userHeadersList) {
+ byte[] decodedPayload = Base64.getDecoder().decode(base64Payload);
+ Map<HeaderKey, HeaderValue> headersMap = new HashMap<>();
+ if (userHeadersList != null) {
+ for (HeaderEntry entry : userHeadersList) {
+ headersMap.put(entry.key(), entry.value());
+ }
+ }
+ return new Message(header, decodedPayload, headersMap);
+ }
+
public static Message of(String payload) {
return of(payload, Collections.emptyMap());
}