You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/06/28 13:54:17 UTC
[brooklyn-server] 01/03: fixes for jackson 2.13 upgrade -- more custom serializers
This is an automated email from the ASF dual-hosted git repository.
heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit ddb083d106da8f0ac783b065191255be1c8dd7b8
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Tue Jun 28 14:20:12 2022 +0100
fixes for jackson 2.13 upgrade -- more custom serializers
use our common type serialization for REST API, and also enable DateTimeModule.
this fixes problem where date/time classes in JSON output would break serialization.
(previously these were serialized as beans and so they worked; now they aren't serialized and so break)
---
core/pom.xml | 4 ++++
.../util/core/json/BrooklynObjectsJsonMapper.java | 8 ++++++-
locations/container/pom.xml | 3 +--
pom.xml | 5 +++++
.../util/json/BrooklynJacksonSerializerTest.java | 26 +++++++++++++++++-----
5 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/core/pom.xml b/core/pom.xml
index 65cda3515a..17a98bd09f 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -163,6 +163,10 @@
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jsr310</artifactId>
+ </dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/json/BrooklynObjectsJsonMapper.java b/core/src/main/java/org/apache/brooklyn/util/core/json/BrooklynObjectsJsonMapper.java
index a6b12aceed..19f2368d00 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/json/BrooklynObjectsJsonMapper.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/json/BrooklynObjectsJsonMapper.java
@@ -15,6 +15,8 @@
*/
package org.apache.brooklyn.util.core.json;
+import com.fasterxml.jackson.datatype.jsr310.JSR310Module;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
import org.apache.brooklyn.core.resolve.jackson.CommonTypesSerialization;
@@ -36,6 +38,9 @@ public class BrooklynObjectsJsonMapper {
mapper.setSerializerProvider(sp);
mapper.setVisibility(new PossiblyStrictPreferringFieldsVisibilityChecker());
+ mapper.registerModule(new JavaTimeModule());
+ CommonTypesSerialization.apply(mapper, mgmt);
+
SimpleModule mapperModule = new SimpleModule("Brooklyn", new Version(0, 0, 0, "ignored", null, null));
new BidiSerialization.ManagementContextSerialization(mgmt).install(mapperModule);
@@ -50,9 +55,10 @@ public class BrooklynObjectsJsonMapper {
mapperModule.addSerializer(Duration.class, new DurationSerializer());
mapperModule.addSerializer(new MultimapSerializer());
- new CommonTypesSerialization.ByteArrayObjectStreamSerialization().apply(mapperModule);
+ //new CommonTypesSerialization.ByteArrayObjectStreamSerialization().apply(mapperModule);
mapper.registerModule(mapperModule);
+
return mapper;
}
}
diff --git a/locations/container/pom.xml b/locations/container/pom.xml
index b1d9b59b5b..6bf2ada563 100644
--- a/locations/container/pom.xml
+++ b/locations/container/pom.xml
@@ -59,10 +59,9 @@
</exclusions>
</dependency>
<dependency>
- <!-- needed for above, but wanted at the same version of jackson we use elsewhere in brooklyn -->
+ <!-- needed for above, but at version we declare in root pom -->
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
- <version>${fasterxml.jackson.version}</version>
</dependency>
<!--
diff --git a/pom.xml b/pom.xml
index 418f30717f..8c8793d0dd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -559,6 +559,11 @@
<artifactId>jackson-databind</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jsr310</artifactId>
+ <version>${fasterxml.jackson.version}</version>
+ </dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java
index cd06895886..40d3b8f00b 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java
@@ -310,18 +310,28 @@ public class BrooklynJacksonSerializerTest {
public void testLinkedListSerialization() throws Exception {
LinkedList<Object> ll = new LinkedList<Object>();
ll.add(1); ll.add("two");
- String result = checkSerializesAs(ll, null);
+ String result = checkSerializes(ll);
log.info("LLIST json is: "+result);
Assert.assertFalse(result.contains("error"), "Shouldn't have had an error, instead got: "+result);
Assert.assertEquals(Strings.collapseWhitespace(result, ""), "[1,\"two\"]");
}
+ @Test
+ public void testInstantSerialization() throws Exception {
+ Instant x = Instant.now().minusSeconds(5);
+ String xs = checkSerializes(x);
+ log.info("Instant json is: "+xs);
+ Assert.assertFalse(xs.contains("error"), "Shouldn't have had an error, instead got: "+xs);
+ Instant x2 = checkSerializesAs(x, Instant.class);
+ Asserts.assertEquals(x2, x);
+ }
+
@Test
public void testMultiMapSerialization() throws Exception {
Multimap<String, Integer> m = MultimapBuilder.hashKeys().arrayListValues().build();
m.put("bob", 24);
m.put("bob", 25);
- String result = checkSerializesAs(m, null);
+ String result = checkSerializes(m);
log.info("multimap serialized as: " + result);
Assert.assertFalse(result.contains("error"), "Shouldn't have had an error, instead got: "+result);
Assert.assertEquals(Strings.collapseWhitespace(result, ""), "{\"bob\":[24,25]}");
@@ -329,7 +339,7 @@ public class BrooklynJacksonSerializerTest {
@Test
public void testUserHostAndPortSerialization() throws Exception {
- String result = checkSerializesAs(UserAndHostAndPort.fromParts("testHostUser", "1.2.3.4", 22), null);
+ String result = checkSerializes(UserAndHostAndPort.fromParts("testHostUser", "1.2.3.4", 22));
log.info("UserHostAndPort serialized as: " + result);
Assert.assertFalse(result.contains("error"), "Shouldn't have had an error, instead got: "+result);
Assert.assertEquals(Strings.collapseWhitespace(result, ""), "{\"user\":\"testHostUser\",\"hostAndPort\":{\"host\":\"1.2.3.4\",\"port\":22,\"hasBracketlessColons\":false}}");
@@ -338,7 +348,7 @@ public class BrooklynJacksonSerializerTest {
@Test
public void testSupplierSerialization() throws Exception {
ByteArrayOutputStream x = Streams.byteArrayOfString("x");
- String result = checkSerializesAs(Strings.toStringSupplier(x), null);
+ String result = checkSerializes(Strings.toStringSupplier(x));
log.info("SUPPLIER json is: "+result);
Assert.assertFalse(result.contains("error"), "Shouldn't have had an error, instead got: "+result);
}
@@ -346,7 +356,7 @@ public class BrooklynJacksonSerializerTest {
@Test
public void testByteArrayOutputStreamSerialization() throws Exception {
ByteArrayOutputStream x = Streams.byteArrayOfString("x");
- String result = checkSerializesAs(x, null);
+ String result = checkSerializes(x);
log.info("BAOS json is: "+result);
Assert.assertFalse(result.contains("error"), "Shouldn't have had an error, instead got: "+result);
ByteArrayOutputStream x2 = checkSerializesAs(x, ByteArrayOutputStream.class);
@@ -355,7 +365,7 @@ public class BrooklynJacksonSerializerTest {
@Test
public void testWrappedStreamSerialization() throws Exception {
- String result = checkSerializesAs(BrooklynTaskTags.tagForStream("TEST", Streams.byteArrayOfString("x")), null);
+ String result = checkSerializes(BrooklynTaskTags.tagForStream("TEST", Streams.byteArrayOfString("x")));
log.info("WRAPPED STREAM json is: "+result);
Assert.assertFalse(result.contains("error"), "Shouldn't have had an error, instead got: "+result);
}
@@ -535,6 +545,10 @@ public class BrooklynJacksonSerializerTest {
}
}
+ protected String checkSerializes(Object x) {
+ return checkSerializesAs(x, null);
+ }
+
@SuppressWarnings("unchecked")
protected <T> T checkSerializesAs(Object x, Class<T> type) {
ManagementContext mgmt = LocalManagementContextForTests.newInstance();