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 5dd7b3cc6061d632c8f96acf63225024beffe726 Author: Alex Heneveld <[email protected]> AuthorDate: Sat Aug 14 02:12:37 2021 +0100 remove exploratory jackson stuff that isn't needed --- .../jackson/ObjectReferencingSerialization.java | 63 +----------- .../BrooklynMiscJacksonSerializationTest.java | 114 --------------------- 2 files changed, 3 insertions(+), 174 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/ObjectReferencingSerialization.java b/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/ObjectReferencingSerialization.java index 27005c1..465380b 100644 --- a/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/ObjectReferencingSerialization.java +++ b/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/ObjectReferencingSerialization.java @@ -2,7 +2,6 @@ package org.apache.brooklyn.core.resolve.jackson; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.DeserializationContext; @@ -20,7 +19,6 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import java.io.IOException; -import java.util.Map; import org.apache.brooklyn.core.resolve.jackson.BrooklynJacksonSerializationUtils.ConfigurableBeanDeserializerModifier; import org.apache.brooklyn.util.text.Identifiers; import org.slf4j.Logger; @@ -28,6 +26,9 @@ import org.slf4j.LoggerFactory; public class ObjectReferencingSerialization { + // some other explorations of approaches, including object id, are in the git history; + // but this seemed the best as object id was harder to use for all bean types + private static final Logger LOG = LoggerFactory.getLogger(ObjectReferencingSerialization.class); public ObjectMapper useMapper(ObjectMapper mapper) { @@ -37,22 +38,9 @@ public class ObjectReferencingSerialization { .addDeserializerWrapper( d -> new ObjectReferencingJsonDeserializer(d, backingMap) ).apply(mapper); - -// mapper.registerModule(new SimpleModule() -// .addSerializer(Object.class, new ObjectReferenceSerializer(backingMap)) -// .addDeserializer(Object.class, new ObjectReferenceDeserializer(backingMap)) -// ); return mapper; } - - static class ObjectReference { - String id; - public ObjectReference() {} - public ObjectReference(String id) { this.id = id; } - } - - static class ObjectReferenceSerializer extends StdSerializer<Object> { private final BiMap<String, Object> backingMap; @@ -75,19 +63,6 @@ public class ObjectReferencingSerialization { } gen.writeObjectRef(id); - -// serializers.findValueSerializer(Map.class, null).serializeWithType(MutableMap.of("@ref", id), gen, serializers, -// serializers.findTypeSerializer(serializers.constructType(Object.class))); - } - } - - static class ObjectReferenceDeserializer extends JsonDeserializer<Object> { - public ObjectReferenceDeserializer(Map<String, Object> backingMap) { - } - - @Override - public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { - return null; } } @@ -136,37 +111,5 @@ public class ObjectReferencingSerialization { return nestedDeserialize.apply(jp, ctxt); } } -// -// public static class ObjectReferencingDeserializerFactory extends BeanDeserializerFactory { -// protected ObjectReferencingDeserializerFactory(DeserializerFactoryConfig config) { -// super(config); -// } -// -// public static ObjectReferencingDeserializerFactory extending(DeserializerFactory factory) { -// if (factory == null) return new ObjectReferencingDeserializerFactory(null); -// if (factory instanceof ObjectReferencingDeserializerFactory) return (ObjectReferencingDeserializerFactory) factory; -// if (factory instanceof BeanDeserializerFactory) return new ObjectReferencingDeserializerFactory( ((BeanDeserializerFactory) factory).getFactoryConfig() ); -// throw new IllegalStateException("Cannot extend "+factory); -// } -// @Override -// public ObjectReferencingDeserializerFactory withConfig(DeserializerFactoryConfig config) { -// if (_factoryConfig == config) return this; -// return new ObjectReferencingDeserializerFactory(config); -// } -// -// // --- our special behaviour -// -// -// @Override -// protected BeanDeserializerBuilder constructBeanDeserializerBuilder(DeserializationContext ctxt, BeanDescription beanDesc) { -// return new BeanDeserializerBuilder(beanDesc, ctxt) { -// { -// _objectIdReader = new ObjectIdReader() { -// -// }; -// } -// }; -// } -// } } diff --git a/core/src/test/java/org/apache/brooklyn/core/resolve/jackson/BrooklynMiscJacksonSerializationTest.java b/core/src/test/java/org/apache/brooklyn/core/resolve/jackson/BrooklynMiscJacksonSerializationTest.java index 1a609b9..281ad6b 100644 --- a/core/src/test/java/org/apache/brooklyn/core/resolve/jackson/BrooklynMiscJacksonSerializationTest.java +++ b/core/src/test/java/org/apache/brooklyn/core/resolve/jackson/BrooklynMiscJacksonSerializationTest.java @@ -18,23 +18,7 @@ */ package org.apache.brooklyn.core.resolve.jackson; -import com.fasterxml.jackson.annotation.JsonIdentityInfo; -import com.fasterxml.jackson.annotation.ObjectIdGenerator; -import com.fasterxml.jackson.annotation.ObjectIdGenerator.IdKey; -import com.fasterxml.jackson.annotation.ObjectIdGenerators.StringIdGenerator; -import com.fasterxml.jackson.annotation.ObjectIdResolver; -import com.fasterxml.jackson.databind.DeserializationConfig; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.KeyDeserializer; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationConfig; -import com.fasterxml.jackson.databind.cfg.HandlerInstantiator; -import com.fasterxml.jackson.databind.cfg.MapperConfig; -import com.fasterxml.jackson.databind.introspect.Annotated; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.databind.jsontype.TypeIdResolver; -import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder; import com.fasterxml.jackson.dataformat.yaml.YAMLMapper; import com.google.common.reflect.TypeToken; import java.util.Map; @@ -83,104 +67,6 @@ public class BrooklynMiscJacksonSerializationTest implements MapperTestFixture { } } - public static class AllBeansIdentityHandler extends HandlerInstantiator { - @Override - public JsonDeserializer<?> deserializerInstance(DeserializationConfig config, Annotated annotated, Class<?> deserClass) { - return null; - } - @Override - public KeyDeserializer keyDeserializerInstance(DeserializationConfig config, Annotated annotated, Class<?> keyDeserClass) { - return null; - } - @Override - public JsonSerializer<?> serializerInstance(SerializationConfig config, Annotated annotated, Class<?> serClass) { - return null; - } - @Override - public TypeResolverBuilder<?> typeResolverBuilderInstance(MapperConfig<?> config, Annotated annotated, Class<?> builderClass) { - return null; - } - @Override - public TypeIdResolver typeIdResolverInstance(MapperConfig<?> config, Annotated annotated, Class<?> resolverClass) { - return null; - } - - @Override - public ObjectIdGenerator<?> objectIdGeneratorInstance(MapperConfig<?> config, Annotated annotated, Class<?> implClass) { - return new StringIdGenerator(); - } - - @Override - public ObjectIdResolver resolverIdGeneratorInstance(MapperConfig<?> config, Annotated annotated, Class<?> implClass) { - return new MapBasedInstanceResolver(); - } - } - - static class MapBasedInstanceResolver implements ObjectIdResolver { - - Map<IdKey,Object> objectsById = MutableMap.of(); - - @Override - public void bindItem(IdKey id, Object pojo) { - objectsById.put(id, pojo); - } - - @Override - public Object resolveId(IdKey id) { - Object result = objectsById.get(id); - if (result!=null) return result; - // seems to happen for YAMLMapper, it doesn't call bindItem - LOG.warn("No object recorded for ID "+id+"; returning null during deserialization"); - return null; - } - - @Override - public ObjectIdResolver newForDeserialization(Object context) { - return this; - } - - @Override - public boolean canUseFor(ObjectIdResolver resolverType) { - return true; - } - } - - @JsonIdentityInfo(property="@object_id", generator=StringIdGenerator.class, resolver= MapBasedInstanceResolver.class) - static class ObjWithIdentityInfoAnnotation extends ObjWithoutIdentityInfoAnnotation {} - - @Test - public void testHowObjectIdAndReferences() throws Exception { - mapper = - BeanWithTypeUtils.applyCommonMapperConfig( - JsonMapper.builder().build() - - // YAML doesn't seem to call "bindItem" whereas JSON mapper does -// YAMLMapper.builder(). -//// configure(YAMLGenerator.Feature.USE_NATIVE_OBJECT_ID, true). -// build() - - , null, false, null, true) - ; -// mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); - - ObjWithIdentityInfoAnnotation f1 = new ObjWithIdentityInfoAnnotation(); f1.foo = "1"; - ObjWithIdentityInfoAnnotation f2 = new ObjWithIdentityInfoAnnotation(); f2.foo = "2"; - String out = ser(MutableMap.of("a", f1, "b", f2, "c", f1)); - LOG.info("Result of "+ JavaClassNames.niceClassAndMethod()+": "+out); - - Map in = deser(out, -// Map.class - new TypeToken<Map<String, ObjWithIdentityInfoAnnotation>>() {} - ); - ObjWithIdentityInfoAnnotation a = (ObjWithIdentityInfoAnnotation)in.get("a"); - ObjWithIdentityInfoAnnotation b = (ObjWithIdentityInfoAnnotation)in.get("b"); - ObjWithIdentityInfoAnnotation c = (ObjWithIdentityInfoAnnotation)in.get("c"); - Asserts.assertTrue(a.foo.equals(c.foo), "expected same foo value for a and c - "+a+" != "+c); - Asserts.assertTrue(!b.foo.equals(c.foo), "expected different foo value for a and b"); - Asserts.assertTrue(a == c, "expected same instance for a and c - "+a+" != "+c); - Asserts.assertTrue(a != b, "expected different instance for a and b"); - } - @Test public void testCustomHandlerForReferences() throws Exception { mapper = new ObjectReferencingSerialization().useMapper(
