From b8827f9ef2d1a260c32f7fa0f74d1a36f1a17d58 Mon Sep 17 00:00:00 2001 From: "ken.lj" Date: Fri, 8 Mar 2019 11:38:57 +0800 Subject: [PATCH] [Dubbo-3367] Fail to parse config text with white space (#3590) --- .../common/config/ConfigurationUtils.java | 6 +-- .../dubbo/common/utils/StringUtils.java | 4 ++ .../common/config/ConfigurationUtilsTest.java | 42 +++++++++++++++++++ .../dubbo/common/utils/StringUtilsTest.java | 8 ++++ .../apache/dubbo/config/AbstractConfig.java | 2 +- 5 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java index 572296c18d0..e2431f20d24 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java @@ -38,7 +38,7 @@ public class ConfigurationUtils { public static int getServerShutdownTimeout() { int timeout = Constants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT; Configuration configuration = Environment.getInstance().getConfiguration(); - String value = configuration.getString(Constants.SHUTDOWN_WAIT_KEY); + String value = StringUtils.trim(configuration.getString(Constants.SHUTDOWN_WAIT_KEY)); if (value != null && value.length() > 0) { try { @@ -47,7 +47,7 @@ public static int getServerShutdownTimeout() { // ignore } } else { - value = configuration.getString(Constants.SHUTDOWN_WAIT_SECONDS_KEY); + value = StringUtils.trim(configuration.getString(Constants.SHUTDOWN_WAIT_SECONDS_KEY)); if (value != null && value.length() > 0) { try { timeout = Integer.parseInt(value) * 1000; @@ -64,7 +64,7 @@ public static String getProperty(String property) { } public static String getProperty(String property, String defaultValue) { - return Environment.getInstance().getConfiguration().getString(property, defaultValue); + return StringUtils.trim(Environment.getInstance().getConfiguration().getString(property, defaultValue)); } public static Map parseProperties(String content) throws IOException { diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java index a5ef54b3cbc..a351346ef1a 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/StringUtils.java @@ -789,4 +789,8 @@ public static String toArgumentString(Object[] args) { } return buf.toString(); } + + public static String trim(String str) { + return str == null ? null : str.trim(); + } } diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java new file mode 100644 index 00000000000..89da34c26d1 --- /dev/null +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/config/ConfigurationUtilsTest.java @@ -0,0 +1,42 @@ +/* + * 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.dubbo.common.config; + +import org.apache.dubbo.common.Constants; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +/** + * + */ +public class ConfigurationUtilsTest { + + @Test + public void testGetServerShutdownTimeout () { + System.setProperty(Constants.SHUTDOWN_WAIT_KEY, " 10000"); + Assertions.assertEquals(10000, ConfigurationUtils.getServerShutdownTimeout()); + System.clearProperty(Constants.SHUTDOWN_WAIT_KEY); + } + + @Test + public void testGetProperty () { + System.setProperty(Constants.SHUTDOWN_WAIT_KEY, " 10000"); + Assertions.assertEquals("10000", ConfigurationUtils.getProperty(Constants.SHUTDOWN_WAIT_KEY)); + System.clearProperty(Constants.SHUTDOWN_WAIT_KEY); + } +} diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java index 51e648cba27..384c957bb23 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/StringUtilsTest.java @@ -287,4 +287,12 @@ public void testToArgumentString() throws Exception { assertThat(s, containsString("0,")); assertThat(s, containsString("{\"enabled\":true}")); } + + @Test + public void testTrim() { + assertEquals("left blank", StringUtils.trim(" left blank")); + assertEquals("right blank", StringUtils.trim("right blank ")); + assertEquals("bi-side blank", StringUtils.trim(" bi-side blank ")); + + } } \ No newline at end of file diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java index 59dd13d8e41..a40bfc3a2e5 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java @@ -557,7 +557,7 @@ public void refresh() { for (Method method : methods) { if (ClassHelper.isSetter(method)) { try { - String value = compositeConfiguration.getString(extractPropertyName(getClass(), method)); + String value = StringUtils.trim(compositeConfiguration.getString(extractPropertyName(getClass(), method))); // isTypeMatch() is called to avoid duplicate and incorrect update, for example, we have two 'setGeneric' methods in ReferenceConfig. if (StringUtils.isNotEmpty(value) && ClassHelper.isTypeMatch(method.getParameterTypes()[0], value)) { method.invoke(this, ClassHelper.convertPrimitive(method.getParameterTypes()[0], value));