/** * Converts a map of config (key, value) pairs to a map of strings where each value * is converted to a string. This method should be used with care since it stores * actual password values to String. Values from this map should never be used in log entries. */ public static Map<String, String> convertToStringMapWithPasswordValues(Map<String, ?> configs) { Map<String, String> result = new HashMap<>(); for (Map.Entry<String, ?> entry : configs.entrySet()) { Object value = entry.getValue(); String strValue; if (value instanceof Password) strValue = ((Password) value).value(); else if (value instanceof List) strValue = convertToString(value, Type.LIST); else if (value instanceof Class) strValue = convertToString(value, Type.CLASS); else strValue = convertToString(value, null); if (strValue != null) result.put(entry.getKey(), strValue); } return result; }
@Override public String convertToString(final Object value) { final Object parsed = parseValue(value); return ConfigDef.convertToString(parsed, key.type); }
private Map<String, String> getKsqlConfigPropsWithSecretsObfuscated() { final Map<String, String> props = new HashMap<>(); originalsWithPrefix(KSQL_FUNCTIONS_PROPERTY_PREFIX, false) .forEach((key, value) -> props.put(key, "[hidden]")); configDef(ConfigGeneration.CURRENT).names().stream() .filter(key -> !SSL_CONFIG_NAMES.contains(key)) .forEach( key -> props.put(key, ConfigDef.convertToString(values().get(key), typeOf(key)))); return Collections.unmodifiableMap(props); }
protected String getConfigValue(ConfigKey key, String headerName) { switch (headerName) { case "Name": return key.name; case "Description": return key.documentation; case "Type": return key.type.toString().toLowerCase(Locale.ROOT); case "Default": if (key.hasDefault()) { if (key.defaultValue == null) return "null"; String defaultValueStr = convertToString(key.defaultValue, key.type); if (defaultValueStr.isEmpty()) return "\"\""; else return defaultValueStr; } else return ""; case "Valid Values": return key.validator != null ? key.validator.toString() : ""; case "Importance": return key.importance.toString().toLowerCase(Locale.ROOT); default: throw new RuntimeException("Can't find value for header '" + headerName + "' in " + key.name); } }
@Test public void testConvertValueToStringDouble() { assertEquals("3.125", ConfigDef.convertToString(3.125, Type.DOUBLE)); assertNull(ConfigDef.convertToString(null, Type.DOUBLE)); }
@Test public void testConvertValueToStringString() { assertEquals("foobar", ConfigDef.convertToString("foobar", Type.STRING)); assertNull(ConfigDef.convertToString(null, Type.STRING)); }
@Test public void testConvertValueToStringList() { assertEquals("a,bc,d", ConfigDef.convertToString(Arrays.asList("a", "bc", "d"), Type.LIST)); assertNull(ConfigDef.convertToString(null, Type.LIST)); }
@Test public void testConvertValueToStringBoolean() { assertEquals("true", ConfigDef.convertToString(true, Type.BOOLEAN)); assertNull(ConfigDef.convertToString(null, Type.BOOLEAN)); }
@Test public void testConvertValueToStringShort() { assertEquals("32767", ConfigDef.convertToString(Short.MAX_VALUE, Type.SHORT)); assertNull(ConfigDef.convertToString(null, Type.SHORT)); }
@Test public void testConvertValueToStringLong() { assertEquals("9223372036854775807", ConfigDef.convertToString(Long.MAX_VALUE, Type.LONG)); assertNull(ConfigDef.convertToString(null, Type.LONG)); }
@Test public void testConvertValueToStringInt() { assertEquals("2147483647", ConfigDef.convertToString(Integer.MAX_VALUE, Type.INT)); assertNull(ConfigDef.convertToString(null, Type.INT)); }
@Test public void testConvertValueToStringClass() throws ClassNotFoundException { String actual = ConfigDef.convertToString(ConfigDefTest.class, Type.CLASS); assertEquals("org.apache.kafka.common.config.ConfigDefTest", actual); // Additionally validate that we can look up this class by this name assertEquals(ConfigDefTest.class, Class.forName(actual)); assertNull(ConfigDef.convertToString(null, Type.CLASS)); }
@Test public void testConvertValueToStringPassword() { assertEquals(Password.HIDDEN, ConfigDef.convertToString(new Password("foobar"), Type.PASSWORD)); assertEquals("foobar", ConfigDef.convertToString("foobar", Type.PASSWORD)); assertNull(ConfigDef.convertToString(null, Type.PASSWORD)); }
@Test public void testConvertValueToStringNestedClass() throws ClassNotFoundException { String actual = ConfigDef.convertToString(NestedClass.class, Type.CLASS); assertEquals("org.apache.kafka.common.config.ConfigDefTest$NestedClass", actual); // Additionally validate that we can look up this class by this name assertEquals(NestedClass.class, Class.forName(actual)); }
private static ConfigValueInfo convertConfigValue(ConfigValue configValue, Type type) { String value = ConfigDef.convertToString(configValue.value(), type); List<String> recommendedValues = new LinkedList<>(); if (type == Type.LIST) { for (Object object: configValue.recommendedValues()) { recommendedValues.add(ConfigDef.convertToString(object, Type.STRING)); } } else { for (Object object : configValue.recommendedValues()) { recommendedValues.add(ConfigDef.convertToString(object, type)); } } return new ConfigValueInfo(configValue.name(), value, recommendedValues, configValue.errorMessages(), configValue.visible()); }
private static ConfigKeyInfo convertConfigKey(ConfigKey configKey) { String name = configKey.name; Type type = configKey.type; String typeName = configKey.type.name(); boolean required = false; String defaultValue; if (ConfigDef.NO_DEFAULT_VALUE.equals(configKey.defaultValue)) { defaultValue = null; required = true; } else { defaultValue = ConfigDef.convertToString(configKey.defaultValue, type); } String importance = configKey.importance.name(); String documentation = configKey.documentation; String group = configKey.group; int orderInGroup = configKey.orderInGroup; String width = configKey.width.name(); String displayName = configKey.displayName; List<String> dependents = configKey.dependents; return new ConfigKeyInfo(name, typeName, required, defaultValue, importance, documentation, group, orderInGroup, width, displayName, dependents); }