of());
-
+
@Override
- public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
+ public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
if (BidiSerialization.isStrictSerialization())
throw new JsonMappingException("Cannot serialize object containing "+value.getClass().getName()+" when strict serialization requested");
serializeFromError(jgen.getOutputContext(), null, value, jgen, provider);
}
- public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error, Object value, JsonGenerator jgen, SerializerProvider configurableSerializerProvider) throws JsonGenerationException, IOException {
+ public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error, Object value, JsonGenerator jgen, SerializerProvider configurableSerializerProvider) throws IOException {
if (log.isDebugEnabled())
log.debug("Recovering from json serialization error, serializing "+value+": "+error);
-
+
if (BidiSerialization.isStrictSerialization())
throw new JsonMappingException("Cannot serialize "
+ (ctxt!=null && !ctxt.inRoot() ? "object containing " : "")
+ value.getClass().getName()+" when strict serialization requested");
-
+
if (WARNED_CLASSES.add(value.getClass().getCanonicalName())) {
log.warn("Standard serialization not possible for "+value.getClass()+" ("+value+")", error);
}
@@ -73,12 +72,12 @@ public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error
// without this, when serializing the large (1.5M) Server json object from BrooklynJacksonSerializerTest creates invalid json,
// containing: "foo":false,"{"error":true,...
jgen.flush();
-
+
boolean createObject = !newCtxt.inObject() || newCtxt.getCurrentName()!=null;
if (createObject) {
jgen.writeStartObject();
}
-
+
if (allowEmpty(value.getClass())) {
// write nothing
} else {
@@ -99,16 +98,16 @@ public void serializeFromError(JsonStreamContext ctxt, @Nullable Exception error
jgen.writeFieldName("causedByError");
jgen.writeString(error.toString());
}
-
+
}
-
+
if (createObject) {
jgen.writeEndObject();
}
-
+
while (newCtxt!=null && !newCtxt.equals(ctxt)) {
if (jgen.getOutputContext().inArray()) { jgen.writeEndArray(); continue; }
- if (jgen.getOutputContext().inObject()) { jgen.writeEndObject(); continue; }
+ if (jgen.getOutputContext().inObject()) { jgen.writeEndObject(); continue; }
break;
}
diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java
deleted file mode 100644
index 1c2f8c180f..0000000000
--- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/MultimapSerializer.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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 org.codehaus.jackson.JsonGenerator;
-import org.codehaus.jackson.map.SerializerProvider;
-import org.codehaus.jackson.map.ser.std.SerializerBase;
-
-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.
- *
- * 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 SerializerBase> {
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected MultimapSerializer() {
- super((Class>) (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);
- }
- }
-}
diff --git a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java
index 502f0638e8..e47446752b 100644
--- a/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java
+++ b/brooklyn-server/rest/rest-server/src/main/java/org/apache/brooklyn/rest/util/json/PossiblyStrictPreferringFieldsVisibilityChecker.java
@@ -22,13 +22,14 @@
import java.lang.reflect.Member;
import java.lang.reflect.Method;
-import org.codehaus.jackson.annotate.JsonAutoDetect;
-import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
-import org.codehaus.jackson.annotate.JsonMethod;
-import org.codehaus.jackson.map.introspect.AnnotatedField;
-import org.codehaus.jackson.map.introspect.AnnotatedMember;
-import org.codehaus.jackson.map.introspect.AnnotatedMethod;
-import org.codehaus.jackson.map.introspect.VisibilityChecker;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.introspect.AnnotatedField;
+import com.fasterxml.jackson.databind.introspect.AnnotatedMember;
+import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
+import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
+
+import static com.fasterxml.jackson.annotation.JsonAutoDetect.*;
/** a visibility checker which disables getters, but allows private access,
* unless {@link BidiSerialization#isStrictSerialization()} is enabled in which case public fields or annotations must be used.
@@ -39,13 +40,13 @@
* causes infinite recursion)
**/
public class PossiblyStrictPreferringFieldsVisibilityChecker implements VisibilityChecker {
- VisibilityChecker>
+ VisibilityChecker>
vizDefault = new VisibilityChecker.Std(Visibility.NONE, Visibility.NONE, Visibility.NONE, Visibility.ANY, Visibility.ANY),
vizStrict = new VisibilityChecker.Std(Visibility.NONE, Visibility.NONE, Visibility.NONE, Visibility.PUBLIC_ONLY, Visibility.PUBLIC_ONLY);
@Override public PossiblyStrictPreferringFieldsVisibilityChecker with(JsonAutoDetect ann) { throw new UnsupportedOperationException(); }
@Override public PossiblyStrictPreferringFieldsVisibilityChecker with(Visibility v) { throw new UnsupportedOperationException(); }
- @Override public PossiblyStrictPreferringFieldsVisibilityChecker withVisibility(JsonMethod method, Visibility v) { throw new UnsupportedOperationException(); }
+ @Override public PossiblyStrictPreferringFieldsVisibilityChecker withVisibility(PropertyAccessor method, Visibility v) { throw new UnsupportedOperationException(); }
@Override public PossiblyStrictPreferringFieldsVisibilityChecker withGetterVisibility(Visibility v) { throw new UnsupportedOperationException(); }
@Override public PossiblyStrictPreferringFieldsVisibilityChecker withIsGetterVisibility(Visibility v) { throw new UnsupportedOperationException(); }
@Override public PossiblyStrictPreferringFieldsVisibilityChecker withSetterVisibility(Visibility v) { throw new UnsupportedOperationException(); }
diff --git a/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml b/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml
index 1c44b025d7..ae98ff61ca 100644
--- a/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml
+++ b/brooklyn-server/rest/rest-server/src/main/webapp/WEB-INF/web.xml
@@ -91,7 +91,7 @@
io.swagger.jaxrs.listing.SwaggerSerializers;
org.apache.brooklyn.rest.util.FormMapProvider;
- org.codehaus.jackson.jaxrs.JacksonJsonProvider;
+ com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
org.apache.brooklyn.rest.resources.ActivityResource;
org.apache.brooklyn.rest.resources.ApidocResource;
org.apache.brooklyn.rest.resources.ApplicationResource;
diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java
index 7e9c910c29..8708fb194b 100644
--- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java
+++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/domain/ApplicationTest.java
@@ -41,7 +41,7 @@
public class ApplicationTest {
final EntitySpec entitySpec = new EntitySpec("Vanilla Java App", "org.apache.brooklyn.entity.java.VanillaJavaApp",
- ImmutableMap.of(
+ ImmutableMap.of(
"initialSize", "1",
"creationScriptUrl", "http://my.brooklyn.io/storage/foo.sql"));
@@ -50,20 +50,15 @@ public class ApplicationTest {
.locations(ImmutableSet.of("/v1/locations/1"))
.build();
- final ApplicationSummary application = new ApplicationSummary(null, applicationSpec, Status.STARTING, null);
+ final Map links = ImmutableMap.of(
+ "self", URI.create("/v1/applications/" + applicationSpec.getName()),
+ "entities", URI.create("fixtures/entity-summary-list.json"));
+ final ApplicationSummary application = new ApplicationSummary("myapp_id", applicationSpec, Status.STARTING, links);
@SuppressWarnings("serial")
@Test
public void testSerializeToJSON() throws IOException {
- ApplicationSummary application1 = new ApplicationSummary("myapp_id", applicationSpec, Status.STARTING, null) {
- @Override
- public Map getLinks() {
- return ImmutableMap.of(
- "self", URI.create("/v1/applications/" + applicationSpec.getName()),
- "entities", URI.create("fixtures/entity-summary-list.json"));
- }
- };
- assertEquals(asJson(application1), jsonFixture("fixtures/application.json"));
+ assertEquals(asJson(application), jsonFixture("fixtures/application.json"));
}
@Test
diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
index a8748a74c1..3f42c8d591 100644
--- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
+++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/DescendantsTest.java
@@ -37,8 +37,6 @@
import org.apache.brooklyn.rest.testing.mocks.RestMockSimpleEntity;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.text.StringEscapes;
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
@@ -63,7 +61,7 @@ public class DescendantsTest extends BrooklynRestResourceTest {
build();
@Test
- public void testDescendantsInSimpleDeployedApplication() throws InterruptedException, TimeoutException, JsonGenerationException, JsonMappingException, UniformInterfaceException, ClientHandlerException, IOException {
+ public void testDescendantsInSimpleDeployedApplication() throws InterruptedException, TimeoutException, UniformInterfaceException, ClientHandlerException, IOException {
ClientResponse response = clientDeploy(simpleSpec);
assertTrue(response.getStatus()/100 == 2, "response is "+response);
Application application = Iterables.getOnlyElement( getManagementContext().getApplications() );
diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java
index d6857fb544..1c091da5f5 100644
--- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java
+++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/resources/EntityResourceTest.java
@@ -38,14 +38,14 @@
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.http.HttpAsserts;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java
index e63a2397b5..45aec4ab86 100644
--- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java
+++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestApiTest.java
@@ -26,10 +26,10 @@
import org.apache.brooklyn.core.mgmt.ManagementContextInjectable;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
-import org.codehaus.jackson.map.ObjectMapper;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeMethod;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java
index c644643168..b94e73c185 100644
--- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java
+++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/testing/BrooklynRestResourceTest.java
@@ -28,7 +28,6 @@
import javax.ws.rs.core.MediaType;
-import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
@@ -43,6 +42,7 @@
import org.apache.brooklyn.util.repeat.Repeater;
import org.apache.brooklyn.util.time.Duration;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.spi.inject.Errors;
diff --git a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java
index 7a255a32bf..9542eda085 100644
--- a/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java
+++ b/brooklyn-server/rest/rest-server/src/test/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonSerializerTest.java
@@ -28,9 +28,6 @@
import org.apache.http.client.HttpClient;
import org.apache.http.client.utils.URIBuilder;
-import org.codehaus.jackson.annotate.JsonProperty;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.eclipse.jetty.server.Server;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,6 +49,9 @@
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.Strings;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;