Search before reporting
Motivation
It is extremely inefficient to convert Object by using json String.
This action just like using JSON.stringify and JSON.parse to deep clone in JavaScript instead of lodash.
package org.apache.pulsar.client.impl.conf;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.pulsar.common.util.ObjectMapperFactory;
/**
* Utils for loading configuration data.
*/
public final class ConfigurationDataUtils {
public static ObjectMapper create() {
ObjectMapper mapper = ObjectMapperFactory.create();
// forward compatibility for the properties may go away in the future
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, false);
mapper.setSerializationInclusion(Include.NON_NULL);
return mapper;
}
private static final ObjectMapper MAPPER = create();
private ConfigurationDataUtils() {}
public static <T> T loadData(Map<String, Object> config,
T existingData,
Class<T> dataCls) {
try {
String existingConfigJson = MAPPER.writeValueAsString(existingData);
Map<String, Object> existingConfig = MAPPER.readValue(existingConfigJson, Map.class);
Map<String, Object> newConfig = new HashMap<>();
newConfig.putAll(existingConfig);
newConfig.putAll(config);
String configJson = MAPPER.writeValueAsString(newConfig);
return MAPPER.readValue(configJson, dataCls);
} catch (IOException e) {
throw new RuntimeException("Failed to load config into existing configuration data", e);
}
}
}
Solution
Replace writeValueAsString and readValue with convertValue
Alternatives
No response
Anything else?
No response
Are you willing to submit a PR?
Search before reporting
Motivation
It is extremely inefficient to convert Object by using json String.
This action just like using
JSON.stringifyandJSON.parseto deep clone in JavaScript instead oflodash.Solution
Replace
writeValueAsStringandreadValuewithconvertValueAlternatives
No response
Anything else?
No response
Are you willing to submit a PR?