Repository: brooklyn-server Updated Branches: refs/heads/master 1a9781546 -> 0a5f3e11c
Downgrade jackson2 version from 2.7.0. to 2.4.5 - remove usage of jackson-datatype-guava for incompatibility of guava Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/5ccb6bfb Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/5ccb6bfb Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/5ccb6bfb Branch: refs/heads/master Commit: 5ccb6bfb59652fb170feb0830b9031a64480bdfa Parents: 5b01f8f Author: Andrea Turli <andrea.tu...@gmail.com> Authored: Thu Feb 11 12:49:15 2016 +0100 Committer: Andrea Turli <andrea.tu...@gmail.com> Committed: Thu Feb 11 19:50:42 2016 +0100 ---------------------------------------------------------------------- karaf/features/src/main/feature/feature.xml | 1 - pom.xml | 3 +- rest/rest-server/pom.xml | 4 -- .../util/json/BrooklynJacksonJsonProvider.java | 6 +- .../rest/util/json/MultimapSerializer.java | 62 ++++++++++++++++++++ 5 files changed, 66 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5ccb6bfb/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 19d439e..0b22046 100644 --- a/karaf/features/src/main/feature/feature.xml +++ b/karaf/features/src/main/feature/feature.xml @@ -181,7 +181,6 @@ <bundle dependency="true">mvn:com.sun.jersey/jersey-core/${jersey.version}</bundle> <bundle dependency="true">mvn:com.sun.jersey/jersey-servlet/${jersey.version}</bundle> - <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> </feature> http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5ccb6bfb/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index c1e2003..c41c691 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ <slf4j.version>1.6.6</slf4j.version> <!-- used for java.util.logging jul-to-slf4j interception --> <guava.version>17.0</guava.version> <xstream.version>1.4.7</xstream.version> - <fasterxml.jackson.version>2.7.0</fasterxml.jackson.version> <!-- more recent jackson, but not compatible with old annotations! --> + <fasterxml.jackson.version>2.4.5</fasterxml.jackson.version> <!-- more recent jackson, but not compatible with old annotations! --> <jersey.version>1.19</jersey.version> <httpclient.version>4.4.1</httpclient.version> <commons-lang3.version>3.3.2</commons-lang3.version> @@ -148,7 +148,6 @@ <maxmind.version>0.8.1</maxmind.version> <jna.version>4.0.0</jna.version> <winrm4j.version>0.3.1</winrm4j.version> - <!-- Transitive dependencies, declared explicitly to avoid version mismatch --> <clojure.version>1.4.0</clojure.version> <zookeeper.version>3.3.4</zookeeper.version> http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5ccb6bfb/rest/rest-server/pom.xml ---------------------------------------------------------------------- diff --git a/rest/rest-server/pom.xml b/rest/rest-server/pom.xml index 9b36f69..06c137b 100644 --- a/rest/rest-server/pom.xml +++ b/rest/rest-server/pom.xml @@ -95,10 +95,6 @@ <artifactId>slf4j-api</artifactId> </dependency> <dependency> - <groupId>com.fasterxml.jackson.datatype</groupId> - <artifactId>jackson-datatype-guava</artifactId> - </dependency> - <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/5ccb6bfb/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java ---------------------------------------------------------------------- diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java index f6d2a08..08265c7 100644 --- a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java +++ b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java @@ -35,7 +35,6 @@ import org.slf4j.LoggerFactory; 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; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; public class BrooklynJacksonJsonProvider extends JacksonJsonProvider implements ManagementContextInjectable { @@ -141,7 +140,7 @@ public class BrooklynJacksonJsonProvider extends JacksonJsonProvider implements 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")); @@ -149,7 +148,8 @@ public class BrooklynJacksonJsonProvider extends JacksonJsonProvider implements new BidiSerialization.EntitySerialization(mgmt).install(mapperModule); new BidiSerialization.LocationSerialization(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/5ccb6bfb/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java ---------------------------------------------------------------------- diff --git a/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java new file mode 100644 index 0000000..c264e22 --- /dev/null +++ b/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java @@ -0,0 +1,62 @@ +/* + * 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.rest.util.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. + */ +@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); + } + } +}