我在一个基于狂妄自大的项目中有一套单元测试,每当我尝试从IDE中导入测试套件时,我都会得到下面的堆栈跟踪,说明发生了一个java.lang.StackOverflowError
。
Error:Hybris Model Source Generating Compiler: Error: java.lang.StackOverflowError
java.lang.StackOverflowError
at java.util.regex.Pattern.range(Pattern.java:2635)
at java.util.regex.Pattern.clazz(Pattern.java:2564)
at java.util.regex.Pattern.sequence(Pattern.java:2065)
at java.util.regex.Pattern.expr(Pattern.java:1998)
at java.util.regex.Pattern.compile(Pattern.java:1698)
at java.util.regex.Pattern.<init>(Pattern.java:1351)
at java.util.regex.Pattern.compile(Pattern.java:1028)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:589)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
at de.hybris.bootstrap.config.ConfigUtil.expandProperty(ConfigUtil.java:603)
这是de.hybris.bootstrap.config.ConfigUtil.expandProperty
的代码
private static void expandProperty(String value, PlatformConfig platformConfig, Properties props, String key) {
String replacement = "";
int lastIndex = 0;
Pattern pattern = Pattern.compile("\\$\\{[^\\}]*\\}");
Matcher matcher = pattern.matcher(value);
for(String newKey = null; matcher.find(); lastIndex = matcher.end()) {
replacement = replacement + value.substring(lastIndex, matcher.start());
newKey = matcher.group().substring(2, matcher.group().length() - 1);
String newValue = platformConfig.getSystemConfig().getDir(newKey);
if (newValue == null) {
newValue = props.getProperty(newKey);
if (newValue != null && newValue.contains("${")) {
expandProperty(newValue, platformConfig, props, newKey);
newValue = props.getProperty(newKey);
}
}
if (newValue == null) {
replacement = replacement + matcher.group();
} else {
replacement = replacement + newValue;
}
}
if (lastIndex < value.length()) {
replacement = replacement + value.substring(lastIndex, value.length());
}
if (key != null) {
props.put(key, replacement);
}
}
发布于 2019-06-06 02:47:20
如果您仔细查看您的功能的这一部分:
if (newValue == null) {
newValue = props.getProperty(newKey);
if (newValue != null && newValue.contains("${")) {
expandProperty(newValue, platformConfig, props, newKey);
newValue = props.getProperty(newKey);
}
}
如果newValue == null
为真,newValue != null && newValue.contains("${")
为真,则
expandProperty(newValue, platformConfig, props, newKey);
将被执行,并再次使用相同的值调用expandProperty
,再次执行expandProperty(newValue, platformConfig, props, newKey);
,即生成对同一函数的无限调用,并触发expandProperty(newValue, platformConfig, props, newKey);
异常。
希望这个好消息
https://stackoverflow.com/questions/56461456
复制