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());
     }

Reply via email to