This is an automated email from the ASF dual-hosted git repository.

struberg pushed a commit to branch johnzon-1.2.x
in repository https://gitbox.apache.org/repos/asf/johnzon.git

commit 07fe4b5ff1bda597cd470ff2d1dd47ea7c24b839
Author: Mark Struberg <[email protected]>
AuthorDate: Fri Dec 5 11:39:52 2025 +0100

    JOHNZON-420 use JsonBAdapter when converting back from array
---
 .../java/org/apache/johnzon/jsonb/AdapterTest.java | 24 ++++++++++++++++++++++
 .../apache/johnzon/mapper/MappingParserImpl.java   |  6 ++++++
 2 files changed, 30 insertions(+)

diff --git 
a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java 
b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java
index 840273f5..0617dd0f 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/AdapterTest.java
@@ -198,6 +198,23 @@ public class AdapterTest {
         assertEquals("42", adaptedBazCollection.collection.get(0).value);
     }
 
+    @Test
+    public void testArrayOfClassWithTypeAdapter() {
+        final Jsonb jsonb = JsonbBuilder.create(
+                new JsonbConfig()
+                        .setProperty("johnzon.readAttributeBeforeWrite", true)
+                        
.withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL) /* 
assertEquals() order */);
+
+        Baz[] bazs = new Baz[]{new Baz("A"), new Baz("B")};
+        final String bazsJson = jsonb.toJson(bazs);
+        assertEquals("[\"A\",\"B\"]", bazsJson);
+
+
+        // and the other way around:
+        final Baz[] bazs2 = jsonb.fromJson(bazsJson, Baz[].class);
+        assertEquals(2, bazs2.length);
+    }
+
     public static class BarCollection {
         @JsonbTypeAdapter(BarAdapter.class)
         public List<Bar> collection;
@@ -280,6 +297,13 @@ public class AdapterTest {
 
     @JsonbTypeAdapter(BazAdapter.class)
     public static class Baz {
+        public Baz() {
+        }
+
+        public Baz(String value) {
+            this.value = value;
+        }
+
         public String value;
     }
 
diff --git 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
index 711453d8..2f9673b7 100644
--- 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
+++ 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingParserImpl.java
@@ -1208,6 +1208,12 @@ public class MappingParserImpl implements MappingParser {
             }
             return adapter;
         }
+
+        final Mappings.ClassMapping classMapping = 
mappings.getClassMapping(aClass);
+        if (classMapping != null && classMapping.adapter != null) {
+            return classMapping.adapter;
+        }
+
         config.getNoParserAdapterTypes().add(aClass);
         return null;
     }

Reply via email to