diff --git a/framework/fel/java/fel-core/src/main/java/modelengine/fel/core/template/support/DefaultStringTemplate.java b/framework/fel/java/fel-core/src/main/java/modelengine/fel/core/template/support/DefaultStringTemplate.java
index 168a84eb4..f4c0764f3 100644
--- a/framework/fel/java/fel-core/src/main/java/modelengine/fel/core/template/support/DefaultStringTemplate.java
+++ b/framework/fel/java/fel-core/src/main/java/modelengine/fel/core/template/support/DefaultStringTemplate.java
@@ -1,14 +1,15 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved.
- * This file is a part of the ModelEngine Project.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
+/*
+ * Copyright (c) 2024-2025 Huawei Technologies Co., Ltd. All rights reserved.
+ * This file is a part of the ModelEngine Project.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ */
package modelengine.fel.core.template.support;
import modelengine.fel.core.template.StringTemplate;
import modelengine.fitframework.inspection.Validation;
import modelengine.fitframework.merge.ConflictResolutionPolicy;
+import modelengine.fitframework.parameterization.ParameterizationMode;
import modelengine.fitframework.parameterization.ParameterizedString;
import modelengine.fitframework.parameterization.ParameterizedStringResolver;
import modelengine.fitframework.parameterization.ResolvedParameter;
@@ -28,7 +29,7 @@
*/
public class DefaultStringTemplate implements StringTemplate {
private static final ParameterizedStringResolver FORMATTER =
- ParameterizedStringResolver.create("{{", "}}", '\\', false);
+ ParameterizedStringResolver.create("{{", "}}", '\\', ParameterizationMode.LENIENT_STRICT_PARAMETERS);
private final ParameterizedString parameterizedString;
diff --git a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/template/BulkStringTemplateTest.java b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/template/BulkStringTemplateTest.java
index e8447d240..9a7d33b42 100644
--- a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/template/BulkStringTemplateTest.java
+++ b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/template/BulkStringTemplateTest.java
@@ -1,15 +1,16 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved.
- * This file is a part of the ModelEngine Project.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
+/*
+ * Copyright (c) 2024-2025 Huawei Technologies Co., Ltd. All rights reserved.
+ * This file is a part of the ModelEngine Project.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ */
package modelengine.fel.core.template;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.assertj.core.api.Assertions.catchThrowableOfType;
import modelengine.fel.core.template.support.DefaultBulkStringTemplate;
+import modelengine.fitframework.parameterization.StringFormatException;
import modelengine.fitframework.util.MapBuilder;
import org.junit.jupiter.api.DisplayName;
@@ -80,7 +81,8 @@ void giveMissValueThenThrowException() {
List
*
* VariableResolver resolver = VariableResolver.create("${", "}", '/'); // 得到一个解析器
* String source = "My name is ${name}."; // 表示原始字符串
- * Map<String, String> params = MapBuilder.get().put("name", "梁济时").build(); // 参数映射
+ * Map<String, String> params = MapBuilder.get().put("name", "Tom").build(); // 参数映射
* VariableResolvingResult result = resolver.resolve(source, params); // 解析字符串
* String resolved = result.getResolvedString(); // 得到解析后的字符串
*
@@ -27,9 +27,10 @@
* 实例作为静态变量,以降低内存开销。
*
* @author 梁济时
+ * @author 季聿阶
* @see ParameterizedString
* @see ResolvedParameter
- * @since 1.0
+ * @since 2020-07-24
*/
public interface ParameterizedStringResolver {
/**
@@ -70,13 +71,11 @@ public interface ParameterizedStringResolver {
* @param suffix 表示变量的后缀的 {@link String}。
* @param escapeCharacter 表示转义字符的 {@code char}。
* @return 表示新实例化的解析工具的 {@link ParameterizedStringResolver}。
- * @throws IllegalArgumentException {@code prefix} 为 {@code null} 或空字符串。
- * @throws IllegalArgumentException {@code suffix} 为 {@code null} 或空字符串。
- * @throws IllegalArgumentException {@code prefix} 中包含 {@code escapeCharacter}。
- * @throws IllegalArgumentException {@code suffix} 中包含 {@code escapeCharacter}。
+ * @throws IllegalArgumentException 当变量前缀或后缀为 {@code null} 或空字符串时,或当变量前缀或后缀中包含了转义字符时,或当
+ * {@code mode} 为 {@code null} 时。
*/
static ParameterizedStringResolver create(String prefix, String suffix, char escapeCharacter) {
- return new DefaultParameterizedStringResolver(prefix, suffix, escapeCharacter, true);
+ return new DefaultParameterizedStringResolver(prefix, suffix, escapeCharacter, ParameterizationMode.STRICT);
}
/**
@@ -87,12 +86,29 @@ static ParameterizedStringResolver create(String prefix, String suffix, char esc
* @param escapeCharacter 表示转义字符的 {@code char}。
* @param isStrict 表示是否采用严格校验模式的 {@code boolean}。
* @return 表示新实例化的解析工具的 {@link ParameterizedStringResolver}。
- * @throws IllegalArgumentException {@code prefix} 为 {@code null} 或空字符串。
- * @throws IllegalArgumentException {@code suffix} 为 {@code null} 或空字符串。
- * @throws IllegalArgumentException {@code prefix} 中包含 {@code escapeCharacter}。
- * @throws IllegalArgumentException {@code suffix} 中包含 {@code escapeCharacter}。
+ * @throws IllegalArgumentException 当变量前缀或后缀为 {@code null} 或空字符串时,或当变量前缀或后缀中包含了转义字符时,或当
+ * {@code mode} 为 {@code null} 时。
*/
static ParameterizedStringResolver create(String prefix, String suffix, char escapeCharacter, boolean isStrict) {
- return new DefaultParameterizedStringResolver(prefix, suffix, escapeCharacter, isStrict);
+ return new DefaultParameterizedStringResolver(prefix,
+ suffix,
+ escapeCharacter,
+ isStrict ? ParameterizationMode.STRICT : ParameterizationMode.LENIENT_EMPTY);
+ }
+
+ /**
+ * 使用变量的前缀、后缀及转义字符实例化一个 {@link ParameterizedStringResolver} 的默认实现。
+ *
+ * @param prefix 表示变量的前缀的 {@link String}。
+ * @param suffix 表示变量的后缀的 {@link String}。
+ * @param escapeCharacter 表示转义字符的 {@code char}。
+ * @param mode 表示描述参数解析模式的 {@link ParameterizationMode}。
+ * @return 描述新实例化的解析工具的 {@link ParameterizedStringResolver}。
+ * @throws IllegalArgumentException 当变量前缀或后缀为 {@code null} 或空字符串时,或当变量前缀或后缀中包含了转义字符时,或当
+ * {@code mode} 为 {@code null} 时。
+ */
+ static ParameterizedStringResolver create(String prefix, String suffix, char escapeCharacter,
+ ParameterizationMode mode) {
+ return new DefaultParameterizedStringResolver(prefix, suffix, escapeCharacter, mode);
}
}
diff --git a/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/StringFormatException.java b/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/StringFormatException.java
index ee71f392a..1fb7c80dc 100644
--- a/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/StringFormatException.java
+++ b/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/StringFormatException.java
@@ -1,8 +1,8 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved.
- * This file is a part of the ModelEngine Project.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
+/*
+ * Copyright (c) 2024-2025 Huawei Technologies Co., Ltd. All rights reserved.
+ * This file is a part of the ModelEngine Project.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ */
package modelengine.fitframework.parameterization;
@@ -10,7 +10,7 @@
* 当发现参数化字符串的格式错误,或参数未提供时引发的异常。
*
* @author 梁济时
- * @since 1.0
+ * @since 2020-07-24
*/
public class StringFormatException extends IllegalArgumentException {
/**
diff --git a/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/support/DefaultParameterizedString.java b/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/support/DefaultParameterizedString.java
index b6b906dc6..3fef204da 100644
--- a/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/support/DefaultParameterizedString.java
+++ b/framework/fit/java/fit-util/src/main/java/modelengine/fitframework/parameterization/support/DefaultParameterizedString.java
@@ -1,11 +1,12 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) 2024 Huawei Technologies Co., Ltd. All rights reserved.
- * This file is a part of the ModelEngine Project.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
+/*
+ * Copyright (c) 2024-2025 Huawei Technologies Co., Ltd. All rights reserved.
+ * This file is a part of the ModelEngine Project.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ */
package modelengine.fitframework.parameterization.support;
+import modelengine.fitframework.parameterization.ParameterizationMode;
import modelengine.fitframework.parameterization.ParameterizedString;
import modelengine.fitframework.parameterization.ParameterizedStringResolver;
import modelengine.fitframework.parameterization.ResolvedParameter;
@@ -20,7 +21,6 @@
import java.util.Comparator;
import java.util.List;
import java.util.Map;
-import java.util.function.BiFunction;
import java.util.stream.Collectors;
/**
@@ -31,29 +31,25 @@
* @since 2020-07-24
*/
class DefaultParameterizedString implements ParameterizedString {
- private static final BiFunction