You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2019/04/01 21:06:39 UTC
[geode] branch feature/GEODE-6574-cms-list-members updated: remove
the runtime config and configure the json mapper to be able to deserialize
json string without type info.
This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch feature/GEODE-6574-cms-list-members
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-6574-cms-list-members by this push:
new 650c757 remove the runtime config and configure the json mapper to be able to deserialize json string without type info.
650c757 is described below
commit 650c7572747d39f58331b6cf883c85720cd9040c
Author: Jinmei Liao <ji...@pivotal.io>
AuthorDate: Mon Apr 1 14:05:58 2019 -0700
remove the runtime config and configure the json mapper to be able to deserialize json string without type info.
---
.../integrationTest/resources/assembly_content.txt | 2 --
geode-common/build.gradle | 1 +
.../geode/util/internal/GeodeJsonMapper.java | 27 ++++++++++++++--------
.../cli/converters/PoolPropertyConverter.java | 7 ++----
.../api/LocatorClusterManagementService.java | 3 +--
.../cli/converters/ConfigPropertyConverter.java | 7 ++----
.../cli/functions/DataCommandFunction.java | 5 ++--
.../cache/configuration/RegionConfigTest.java | 3 ++-
.../geode/cache/configuration/CacheElement.java | 6 ++++-
.../management/api/ClusterManagementResult.java | 8 +++----
.../management/configuration/MemberConfig.java | 3 ++-
.../configuration/RuntimeCacheElement.java | 26 ---------------------
.../management/internal/cli/domain/ClassName.java | 9 +++-----
.../configuration/CacheElementJsonMappingTest.java | 18 +++++----------
.../webapp/WEB-INF/geode-management-servlet.xml | 1 +
15 files changed, 48 insertions(+), 78 deletions(-)
diff --git a/geode-assembly/src/integrationTest/resources/assembly_content.txt b/geode-assembly/src/integrationTest/resources/assembly_content.txt
index 9d583ad..9b8a35f 100644
--- a/geode-assembly/src/integrationTest/resources/assembly_content.txt
+++ b/geode-assembly/src/integrationTest/resources/assembly_content.txt
@@ -706,8 +706,6 @@ javadoc/org/apache/geode/management/client/package-frame.html
javadoc/org/apache/geode/management/client/package-summary.html
javadoc/org/apache/geode/management/client/package-tree.html
javadoc/org/apache/geode/management/configuration/MemberConfig.html
-javadoc/org/apache/geode/management/configuration/RegionRuntimeConfig.html
-javadoc/org/apache/geode/management/configuration/RuntimeCacheElement.html
javadoc/org/apache/geode/management/configuration/package-frame.html
javadoc/org/apache/geode/management/configuration/package-summary.html
javadoc/org/apache/geode/management/configuration/package-tree.html
diff --git a/geode-common/build.gradle b/geode-common/build.gradle
index 6a2ed39..9bf17b1 100755
--- a/geode-common/build.gradle
+++ b/geode-common/build.gradle
@@ -19,6 +19,7 @@ apply from: "${project.projectDir}/../gradle/publish.gradle"
dependencies {
compile(platform(project(':boms:geode-all-bom')))
+ compile('com.fasterxml.jackson.core:jackson-databind')
testCompile('junit:junit')
testCompile('org.assertj:assertj-core')
}
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/RegionRuntimeConfig.java b/geode-common/src/main/java/org/apache/geode/util/internal/GeodeJsonMapper.java
similarity index 51%
rename from geode-management/src/main/java/org/apache/geode/management/configuration/RegionRuntimeConfig.java
rename to geode-common/src/main/java/org/apache/geode/util/internal/GeodeJsonMapper.java
index d57591c..7fd8f91 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/RegionRuntimeConfig.java
+++ b/geode-common/src/main/java/org/apache/geode/util/internal/GeodeJsonMapper.java
@@ -13,18 +13,25 @@
* the License.
*/
-package org.apache.geode.management.configuration;
+package org.apache.geode.util.internal;
-import org.apache.geode.cache.configuration.RegionConfig;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
-public class RegionRuntimeConfig extends RegionConfig implements RuntimeCacheElement {
- private int entryCount;
-
- public int getEntryCount() {
- return entryCount;
- }
+/**
+ * helper class for creating various json mappers used by Geode Project
+ */
+public class GeodeJsonMapper {
- public void setEntryCount(int entryCount) {
- this.entryCount = entryCount;
+ /**
+ * @return a jackson json mapper that allows single quotes and is able to deserialize json
+ * string without @JsonTypeInfo if base class is a concrete implementation.
+ */
+ public static ObjectMapper getMapper() {
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
+ mapper.configure(MapperFeature.USE_BASE_TYPE_AS_DEFAULT_IMPL, true);
+ return mapper;
}
}
diff --git a/geode-connectors/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java b/geode-connectors/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
index d99709c..6127a18 100644
--- a/geode-connectors/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
+++ b/geode-connectors/src/main/java/org/apache/geode/management/internal/cli/converters/PoolPropertyConverter.java
@@ -17,13 +17,13 @@ package org.apache.geode.management.internal.cli.converters;
import java.io.IOException;
import java.util.List;
-import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.shell.core.Completion;
import org.springframework.shell.core.Converter;
import org.springframework.shell.core.MethodTarget;
import org.apache.geode.connectors.jdbc.internal.cli.CreateDataSourceCommand;
+import org.apache.geode.util.internal.GeodeJsonMapper;
/***
* Converter for CreateDataSourceCommand's --pool-properties option.
@@ -32,10 +32,7 @@ import org.apache.geode.connectors.jdbc.internal.cli.CreateDataSourceCommand;
public class PoolPropertyConverter
implements Converter<CreateDataSourceCommand.PoolProperty> {
- private static final ObjectMapper mapper = new ObjectMapper();
- static {
- mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
- }
+ private static final ObjectMapper mapper = GeodeJsonMapper.getMapper();
@Override
public boolean supports(Class<?> type, String optionContext) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java b/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
index 318b4fe..511cc3f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
@@ -38,7 +38,6 @@ import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.api.ClusterManagementResult;
import org.apache.geode.management.api.ClusterManagementService;
import org.apache.geode.management.configuration.MemberConfig;
-import org.apache.geode.management.configuration.RuntimeCacheElement;
import org.apache.geode.management.internal.cli.CliUtil;
import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
import org.apache.geode.management.internal.cli.functions.UpdateCacheFunction;
@@ -154,7 +153,7 @@ public class LocatorClusterManagementService implements ClusterManagementService
@Override
public ClusterManagementResult list(CacheElement filter) {
ConfigurationManager manager = managers.get(filter.getClass());
- List<RuntimeCacheElement> listResults = manager.list(filter, null);
+ List<CacheElement> listResults = manager.list(filter, null);
ClusterManagementResult result = new ClusterManagementResult();
result.setResult(listResults);
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java
index 8a17f3c..adff1ea 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/converters/ConfigPropertyConverter.java
@@ -17,7 +17,6 @@ package org.apache.geode.management.internal.cli.converters;
import java.io.IOException;
import java.util.List;
-import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.shell.core.Completion;
import org.springframework.shell.core.Converter;
@@ -25,6 +24,7 @@ import org.springframework.shell.core.MethodTarget;
import org.apache.geode.annotations.Immutable;
import org.apache.geode.cache.configuration.JndiBindingsType;
+import org.apache.geode.util.internal.GeodeJsonMapper;
/***
* Added converter to enable auto-completion for index-type
@@ -34,10 +34,7 @@ public class ConfigPropertyConverter
implements Converter<JndiBindingsType.JndiBinding.ConfigProperty> {
@Immutable
- private static final ObjectMapper mapper = new ObjectMapper();
- static {
- mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
- }
+ private static final ObjectMapper mapper = GeodeJsonMapper.getMapper();
@Override
public boolean supports(Class<?> type, String optionContext) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
index 3da2b6a..95c4caa 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
@@ -59,6 +58,7 @@ import org.apache.geode.management.internal.cli.i18n.CliStrings;
import org.apache.geode.management.internal.cli.util.JsonUtil;
import org.apache.geode.pdx.JSONFormatter;
import org.apache.geode.pdx.PdxInstance;
+import org.apache.geode.util.internal.GeodeJsonMapper;
/**
* @since GemFire 7.0
@@ -586,8 +586,7 @@ public class DataCommandFunction implements InternalFunction {
Object resultObject;
try {
- ObjectMapper mapper = new ObjectMapper();
- mapper.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES);
+ ObjectMapper mapper = GeodeJsonMapper.getMapper();
resultObject = mapper.readValue(string, klass);
} catch (IOException e) {
throw new IllegalArgumentException(
diff --git a/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java b/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java
index 3948abe..62dd8c3 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java
@@ -27,6 +27,7 @@ import org.junit.Test;
import org.apache.geode.cache.RegionShortcut;
import org.apache.geode.internal.config.JAXBService;
+import org.apache.geode.util.internal.GeodeJsonMapper;
public class RegionConfigTest {
@@ -76,7 +77,7 @@ public class RegionConfigTest {
@Test
public void correctJsonAndXml() throws Exception {
String json = "{\"name\":\"test\", \"type\":\"REPLICATE\"}";
- ObjectMapper mapper = new ObjectMapper();
+ ObjectMapper mapper = GeodeJsonMapper.getMapper();
regionConfig = mapper.readValue(json, RegionConfig.class);
assertThat(regionConfig.getName()).isEqualTo("test");
assertThat(regionConfig.getType()).isEqualTo("REPLICATE");
diff --git a/geode-management/src/main/java/org/apache/geode/cache/configuration/CacheElement.java b/geode-management/src/main/java/org/apache/geode/cache/configuration/CacheElement.java
index 1144d0a..6ab7173 100644
--- a/geode-management/src/main/java/org/apache/geode/cache/configuration/CacheElement.java
+++ b/geode-management/src/main/java/org/apache/geode/cache/configuration/CacheElement.java
@@ -20,9 +20,13 @@ package org.apache.geode.cache.configuration;
import java.io.Serializable;
import java.util.List;
-import org.apache.geode.lang.Identifiable;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.apache.geode.annotations.Experimental;
+import org.apache.geode.lang.Identifiable;
+@Experimental
+@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")
public interface CacheElement extends Identifiable<String>, Serializable {
static <T extends CacheElement> boolean exists(List<T> list, String id) {
diff --git a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementResult.java b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementResult.java
index 53351ce..2f61e8d 100644
--- a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementResult.java
+++ b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementResult.java
@@ -21,7 +21,7 @@ import java.util.Map;
import com.fasterxml.jackson.annotation.JsonIgnore;
-import org.apache.geode.management.configuration.RuntimeCacheElement;
+import org.apache.geode.cache.configuration.CacheElement;
public class ClusterManagementResult {
@@ -58,7 +58,7 @@ public class ClusterManagementResult {
private StatusCode statusCode = StatusCode.OK;
private String statusMessage;
- private List<RuntimeCacheElement> result = new ArrayList<>();
+ private List<CacheElement> result = new ArrayList<>();
public ClusterManagementResult() {}
@@ -108,11 +108,11 @@ public class ClusterManagementResult {
return statusCode;
}
- public List<RuntimeCacheElement> getResult() {
+ public List<CacheElement> getResult() {
return result;
}
- public void setResult(List<RuntimeCacheElement> result) {
+ public void setResult(List<CacheElement> result) {
this.result = result;
}
}
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java b/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java
index 5ddc856..174d79a 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java
+++ b/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java
@@ -18,10 +18,11 @@ package org.apache.geode.management.configuration;
import java.util.List;
import org.apache.geode.annotations.Experimental;
+import org.apache.geode.cache.configuration.CacheElement;
import org.apache.geode.management.api.RestfulEndpoint;
@Experimental
-public class MemberConfig implements RuntimeCacheElement, RestfulEndpoint {
+public class MemberConfig implements CacheElement, RestfulEndpoint {
private static final long serialVersionUID = -6262538068604902018L;
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/RuntimeCacheElement.java b/geode-management/src/main/java/org/apache/geode/management/configuration/RuntimeCacheElement.java
deleted file mode 100644
index 0d0b6b6..0000000
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/RuntimeCacheElement.java
+++ /dev/null
@@ -1,26 +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.geode.management.configuration;
-
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-import org.apache.geode.annotations.Experimental;
-import org.apache.geode.cache.configuration.CacheElement;
-
-@Experimental
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")
-public interface RuntimeCacheElement extends CacheElement {
-}
diff --git a/geode-management/src/main/java/org/apache/geode/management/internal/cli/domain/ClassName.java b/geode-management/src/main/java/org/apache/geode/management/internal/cli/domain/ClassName.java
index 362a4ce..8510c81 100644
--- a/geode-management/src/main/java/org/apache/geode/management/internal/cli/domain/ClassName.java
+++ b/geode-management/src/main/java/org/apache/geode/management/internal/cli/domain/ClassName.java
@@ -21,10 +21,11 @@ import java.util.Objects;
import java.util.Properties;
import java.util.regex.Pattern;
-import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
+import org.apache.geode.util.internal.GeodeJsonMapper;
+
/**
* This is mostly used for Gfsh command options that need to specify a className for instantiation.
*
@@ -35,11 +36,7 @@ public class ClassName<T> implements Serializable {
private String className = "";
private Properties initProperties = new Properties();
- private static ObjectMapper mapper = new ObjectMapper();
-
- static {
- mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
- }
+ private static ObjectMapper mapper = GeodeJsonMapper.getMapper();
// used to remove a Declarable through gfsh command
// e.g. alter region --name=regionA --cache-loader=''
diff --git a/geode-management/src/test/java/org/apache/geode/cache/configuration/CacheElementJsonMappingTest.java b/geode-management/src/test/java/org/apache/geode/cache/configuration/CacheElementJsonMappingTest.java
index c3acfa5..297fd47 100644
--- a/geode-management/src/test/java/org/apache/geode/cache/configuration/CacheElementJsonMappingTest.java
+++ b/geode-management/src/test/java/org/apache/geode/cache/configuration/CacheElementJsonMappingTest.java
@@ -20,25 +20,19 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.List;
-import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.BeforeClass;
import org.junit.Test;
import org.apache.geode.management.api.ClusterManagementResult;
import org.apache.geode.management.configuration.MemberConfig;
-import org.apache.geode.management.configuration.RegionRuntimeConfig;
-import org.apache.geode.management.configuration.RuntimeCacheElement;
+import org.apache.geode.util.internal.GeodeJsonMapper;
public class CacheElementJsonMappingTest {
- private static ObjectMapper mapper;
- static {
- mapper = new ObjectMapper();
- mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
- }
+ private static ObjectMapper mapper = GeodeJsonMapper.getMapper();
private static MemberConfig member;
- private static RegionRuntimeConfig region;
+ private static RegionConfig region;
@BeforeClass
public static void beforeClass() throws Exception {
@@ -46,7 +40,7 @@ public class CacheElementJsonMappingTest {
member.setId("server");
member.setPid("123");
- region = new RegionRuntimeConfig();
+ region = new RegionConfig();
region.setName("test");
}
@@ -56,7 +50,7 @@ public class CacheElementJsonMappingTest {
System.out.println(json);
assertThat(json).contains("class").contains("\"name\":\"test\"");
- RegionConfig config = mapper.readValue(json, RegionRuntimeConfig.class);
+ RegionConfig config = mapper.readValue(json, RegionConfig.class);
assertThat(config.getName()).isEqualTo(region.getName());
}
@@ -73,7 +67,7 @@ public class CacheElementJsonMappingTest {
@Test
public void serializeResult() throws Exception {
ClusterManagementResult result = new ClusterManagementResult();
- List<RuntimeCacheElement> elements = new ArrayList<>();
+ List<CacheElement> elements = new ArrayList<>();
elements.add(region);
elements.add(member);
result.setResult(elements);
diff --git a/geode-web-management/src/main/webapp/WEB-INF/geode-management-servlet.xml b/geode-web-management/src/main/webapp/WEB-INF/geode-management-servlet.xml
index 22cae8e..a2cc948 100644
--- a/geode-web-management/src/main/webapp/WEB-INF/geode-management-servlet.xml
+++ b/geode-web-management/src/main/webapp/WEB-INF/geode-management-servlet.xml
@@ -65,6 +65,7 @@
<array>
<util:constant static-field="com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_COMMENTS"/>
<util:constant static-field="com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES"/>
+ <util:constant static-field="com.fasterxml.jackson.databind.MapperFeature.USE_BASE_TYPE_AS_DEFAULT_IMPL"/>
<util:constant static-field="com.fasterxml.jackson.databind.DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT"/>
</array>
</property>