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

vavrtom pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git


The following commit(s) were added to refs/heads/main by this push:
     new beb9c09fd6 QPID-8719: [Broker-J] Set default features for json object 
mapper (#355)
beb9c09fd6 is described below

commit beb9c09fd663e3aec5f41c62aa8420b945e2b623
Author: Daniil Kirilyuk <[email protected]>
AuthorDate: Wed Dec 10 08:40:39 2025 +0100

    QPID-8719: [Broker-J] Set default features for json object mapper (#355)
---
 .../server/model/ConfiguredObjectJacksonModule.java     | 17 ++++++++++++++++-
 .../management/plugin/servlet/rest/MetaDataServlet.java |  7 +++----
 .../management/plugin/servlet/rest/RestServlet.java     |  3 ++-
 .../apache/qpid/tests/http/rest/model/CreateTest.java   |  3 +++
 .../org/apache/qpid/tests/http/rest/model/ReadTest.java |  7 +++++++
 5 files changed, 31 insertions(+), 6 deletions(-)

diff --git 
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java
 
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java
index df1a54a132..74347da4e1 100644
--- 
a/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java
+++ 
b/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObjectJacksonModule.java
@@ -28,10 +28,14 @@ import java.util.Set;
 import tools.jackson.core.JacksonException;
 import tools.jackson.core.JsonGenerator;
 import tools.jackson.core.Version;
+import tools.jackson.databind.DeserializationFeature;
+import tools.jackson.databind.MapperFeature;
 import tools.jackson.databind.SerializationFeature;
 import tools.jackson.databind.ValueSerializer;
 import tools.jackson.databind.ObjectMapper;
 import tools.jackson.databind.SerializationContext;
+import tools.jackson.databind.cfg.DateTimeFeature;
+import tools.jackson.databind.cfg.EnumFeature;
 import tools.jackson.databind.json.JsonMapper;
 import tools.jackson.databind.module.SimpleModule;
 
@@ -76,13 +80,24 @@ public class ConfiguredObjectJacksonModule extends 
SimpleModule
     {
         return JsonMapper.builder()
                 .addModule(forPersistence ? PERSISTENCE_INSTANCE : INSTANCE)
+                .enable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS)
+                .enable(MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS)
+                .disable(EnumFeature.READ_ENUMS_USING_TO_STRING)
+                .disable(EnumFeature.WRITE_ENUMS_USING_TO_STRING)
+                .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
                 .build();
     }
 
-    public static ObjectMapper newObjectMapper(final boolean forPersistence, 
final SerializationFeature serializationFeature)
+    public static ObjectMapper newObjectMapper(final boolean forPersistence,
+                                               final SerializationFeature 
serializationFeature)
     {
         return JsonMapper.builder()
                 .addModule(forPersistence ? PERSISTENCE_INSTANCE : INSTANCE)
+                .enable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS)
+                .enable(MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS)
+                .disable(EnumFeature.READ_ENUMS_USING_TO_STRING)
+                .disable(EnumFeature.WRITE_ENUMS_USING_TO_STRING)
+                .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
                 .enable(serializationFeature)
                 .build();
     }
diff --git 
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
 
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
index 3ab519a06a..c08d47e648 100644
--- 
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
+++ 
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java
@@ -38,11 +38,11 @@ import jakarta.servlet.http.HttpServletResponse;
 
 import tools.jackson.databind.ObjectMapper;
 import tools.jackson.databind.SerializationFeature;
-import tools.jackson.databind.json.JsonMapper;
 
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.ConfiguredObjectAttribute;
 import org.apache.qpid.server.model.ConfiguredObjectFinder;
+import org.apache.qpid.server.model.ConfiguredObjectJacksonModule;
 import org.apache.qpid.server.model.ConfiguredObjectOperation;
 import org.apache.qpid.server.model.ConfiguredObjectStatistic;
 import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry;
@@ -87,9 +87,8 @@ public class MetaDataServlet extends AbstractServlet
         }
 
         final OutputStream stream = getOutputStream(request, response);
-        ObjectMapper mapper = JsonMapper.builder()
-                .enable(SerializationFeature.INDENT_OUTPUT)
-                .build();
+        ObjectMapper mapper = ConfiguredObjectJacksonModule
+                .newObjectMapper(false, SerializationFeature.INDENT_OUTPUT);
         mapper.writeValue(stream, classToDataMap);
 
         response.setContentType("application/json");
diff --git 
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
 
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
index 439544b7f8..3502bfbecd 100644
--- 
a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
+++ 
b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
@@ -293,7 +293,8 @@ public class RestServlet extends AbstractServlet
                                                                       response,
                                                                       
getManagementConfiguration()))
         {
-            ObjectMapper mapper = 
ConfiguredObjectJacksonModule.newObjectMapper(false, 
SerializationFeature.INDENT_OUTPUT);
+            ObjectMapper mapper = ConfiguredObjectJacksonModule
+                    .newObjectMapper(false, 
SerializationFeature.INDENT_OUTPUT);
             mapper.writeValue(stream, formattedResponse);
         }
     }
diff --git 
a/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/CreateTest.java
 
b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/CreateTest.java
index 25581282f0..e22e37e62a 100644
--- 
a/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/CreateTest.java
+++ 
b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/CreateTest.java
@@ -26,6 +26,7 @@ import static jakarta.servlet.http.HttpServletResponse.SC_OK;
 import static 
org.apache.qpid.server.management.plugin.servlet.rest.AbstractServlet.SC_UNPROCESSABLE_ENTITY;
 import static org.hamcrest.CoreMatchers.endsWith;
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -58,6 +59,8 @@ public class CreateTest extends HttpTestBase
         final Map<String, Object> queue = getHelper().getJsonAsMap(queueUrl);
 
         assertThat(queue.get(ConfiguredObject.NAME), is(equalTo("myqueue")));
+        assertThat(queue.get(ConfiguredObject.CREATED_TIME), 
is(instanceOf(Long.class)));
+        assertThat(queue.get(ConfiguredObject.LAST_UPDATED_TIME), 
is(instanceOf(Long.class)));
     }
 
     @Test
diff --git 
a/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/ReadTest.java
 
b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/ReadTest.java
index 1afb187da4..99067d4cc4 100644
--- 
a/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/ReadTest.java
+++ 
b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/rest/model/ReadTest.java
@@ -24,6 +24,7 @@ import static 
jakarta.servlet.http.HttpServletResponse.SC_CREATED;
 import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND;
 import static jakarta.servlet.http.HttpServletResponse.SC_OK;
 import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -78,6 +79,8 @@ public class ReadTest extends HttpTestBase
         final Map<String, Object> queue = getHelper().getJsonAsMap(QUEUE1_URL);
         assertThat(queue.get(ConfiguredObject.NAME), is(equalTo(QUEUE1_NAME)));
         assertThat(queue.get(ConfiguredObject.ID), is(notNullValue()));
+        assertThat(queue.get(ConfiguredObject.CREATED_TIME), 
is(instanceOf(Long.class)));
+        assertThat(queue.get(ConfiguredObject.LAST_UPDATED_TIME), 
is(instanceOf(Long.class)));
     }
 
     @Test
@@ -92,6 +95,8 @@ public class ReadTest extends HttpTestBase
         final Map<String, Object> queue = 
getHelper().getJsonAsSingletonList(QUEUE1_URL + 
"?singletonModelObjectResponseAsList=true");
         assertThat(queue.get(ConfiguredObject.NAME), is(equalTo(QUEUE1_NAME)));
         assertThat(queue.get(ConfiguredObject.ID), is(notNullValue()));
+        assertThat(queue.get(ConfiguredObject.CREATED_TIME), 
is(instanceOf(Long.class)));
+        assertThat(queue.get(ConfiguredObject.LAST_UPDATED_TIME), 
is(instanceOf(Long.class)));
     }
 
     @Test
@@ -117,6 +122,8 @@ public class ReadTest extends HttpTestBase
         final Map<String, Object> queue = list.get(0);
         assertThat(queue.get(ConfiguredObject.NAME), is(equalTo(QUEUE1_NAME)));
         assertThat(queue.get(ConfiguredObject.ID), is(notNullValue()));
+        assertThat(queue.get(ConfiguredObject.CREATED_TIME), 
is(instanceOf(Long.class)));
+        assertThat(queue.get(ConfiguredObject.LAST_UPDATED_TIME), 
is(instanceOf(Long.class)));
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to