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]