Repository: brooklyn-server Updated Branches: refs/heads/master d1ef42a1e -> 50826cbc2
Revert "Replace MultimapSerializer with jackson-datatype-guava library" This reverts commit 53778394ac9eee9d62fca9535f3c49b8f54f8adf. Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/cbc1b2c5 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/cbc1b2c5 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/cbc1b2c5 Branch: refs/heads/master Commit: cbc1b2c53842490e149b8fcd29706606dbc629ea Parents: 23f9a71 Author: Valentin Aitken <bos...@gmail.com> Authored: Thu Dec 1 13:46:17 2016 +0200 Committer: Valentin Aitken <bos...@gmail.com> Committed: Thu Dec 1 13:46:17 2016 +0200 ---------------------------------------------------------------------- core/pom.xml | 4 -- .../core/json/BrooklynObjectsJsonMapper.java | 6 +- .../util/core/json/MultimapSerializer.java | 64 ++++++++++++++++++++ karaf/features/src/main/feature/feature.xml | 1 - parent/pom.xml | 5 -- 5 files changed, 67 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cbc1b2c5/core/pom.xml ---------------------------------------------------------------------- diff --git a/core/pom.xml b/core/pom.xml index cda05c3..3a900d6 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -164,10 +164,6 @@ <artifactId>commons-lang3</artifactId> </dependency> <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-guava</artifactId> - </dependency> - <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cbc1b2c5/core/src/main/java/org/apache/brooklyn/util/core/json/BrooklynObjectsJsonMapper.java ---------------------------------------------------------------------- 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 37601a5..7e96457 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 @@ -20,7 +20,6 @@ import org.apache.brooklyn.api.mgmt.ManagementContext; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.datatype.guava.GuavaModule; public class BrooklynObjectsJsonMapper { public static ObjectMapper newMapper(ManagementContext mgmt) { @@ -29,7 +28,7 @@ public class BrooklynObjectsJsonMapper { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializerProvider(sp); - mapper.setVisibility(new PossiblyStrictPreferringFieldsVisibilityChecker()); + mapper.setVisibilityChecker(new PossiblyStrictPreferringFieldsVisibilityChecker()); SimpleModule mapperModule = new SimpleModule("Brooklyn", new Version(0, 0, 0, "ignored", null, null)); @@ -42,7 +41,8 @@ public class BrooklynObjectsJsonMapper { new BidiSerialization.TaskSerialization(mgmt).install(mapperModule); new BidiSerialization.ClassLoaderSerialization(mgmt).install(mapperModule); - mapper.registerModule(new GuavaModule()).registerModule(mapperModule); + mapperModule.addSerializer(new MultimapSerializer()); + mapper.registerModule(mapperModule); return mapper; } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cbc1b2c5/core/src/main/java/org/apache/brooklyn/util/core/json/MultimapSerializer.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/util/core/json/MultimapSerializer.java b/core/src/main/java/org/apache/brooklyn/util/core/json/MultimapSerializer.java new file mode 100644 index 0000000..d825e3e --- /dev/null +++ b/core/src/main/java/org/apache/brooklyn/util/core/json/MultimapSerializer.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.brooklyn.util.core.json; + +import java.io.IOException; +import java.util.Collection; +import java.util.Map; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import com.google.common.annotations.Beta; +import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; + +/** + * Provides a serializer for {@link Multimap} instances. + * <p> + * When Brooklyn's Jackson dependency is updated from org.codehaus.jackson:1.9.13 to + * com.fasterxml.jackson:2.3+ then this class should be replaced with a dependency on + * jackson-datatype-guava and a GuavaModule registered with Brooklyn's ObjectMapper. + * Check the guava version when doing the switch as it could be incompatible with the + * version used by Brooklyn. + */ +@Beta +public class MultimapSerializer extends StdSerializer<Multimap<?, ?>> { + + @SuppressWarnings({ "unchecked", "rawtypes" }) + protected MultimapSerializer() { + super((Class<Multimap<?, ?>>) (Class) Multimap.class); + } + + @Override + public void serialize(Multimap<?, ?> value, JsonGenerator jgen, SerializerProvider provider) throws IOException { + jgen.writeStartObject(); + writeEntries(value, jgen, provider); + jgen.writeEndObject(); + } + + private void writeEntries(Multimap<?, ?> value, JsonGenerator jgen, SerializerProvider provider) throws IOException { + for (Map.Entry<?, ? extends Collection<?>> entry : value.asMap().entrySet()) { + provider.findKeySerializer(provider.constructType(String.class), null) + .serialize(entry.getKey(), jgen, provider); + provider.defaultSerializeValue(Lists.newArrayList(entry.getValue()), jgen); + } + } +} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cbc1b2c5/karaf/features/src/main/feature/feature.xml ---------------------------------------------------------------------- diff --git a/karaf/features/src/main/feature/feature.xml b/karaf/features/src/main/feature/feature.xml index 3e6bb8f..5d4c919 100644 --- a/karaf/features/src/main/feature/feature.xml +++ b/karaf/features/src/main/feature/feature.xml @@ -195,7 +195,6 @@ <feature>cxf-jaxrs</feature> - <bundle dependency="true">mvn:com.fasterxml.jackson.datatype/jackson-datatype-guava/${fasterxml.jackson.version}</bundle> <bundle dependency="true">mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/${fasterxml.jackson.version}</bundle> <!-- should be deps of jax-rs-2.0 rest-api project --> http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/cbc1b2c5/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 5f3ffb6..ebac367 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -176,11 +176,6 @@ <artifactId>jetty-schemas</artifactId> <version>${jetty-schemas.version}</version> </dependency> - <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-guava</artifactId> - <version>${fasterxml.jackson.version}</version> - </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId>