fix #474 : evalue value without groovy

This commit is contained in:
Kaoru FUZITA 2016-04-11 13:44:15 +09:00
parent d5ee67e99b
commit 35ff9c83de
2 changed files with 58 additions and 9 deletions

View file

@ -30,6 +30,7 @@ import org.codelibs.fess.helper.CrawlingInfoHelper;
import org.codelibs.fess.helper.SystemHelper;
import org.codelibs.fess.mylasta.direction.FessConfig;
import org.codelibs.fess.util.ComponentUtil;
import org.codelibs.fess.util.GroovyUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -114,16 +115,11 @@ public abstract class AbstractDataStoreImpl implements DataStore {
return StringUtil.EMPTY;
}
try {
final Object value = new GroovyShell(new Binding(paramMap)).evaluate(template);
if (value == null) {
return null;
}
return value;
} catch (final Exception e) {
logger.warn("Invalid value format: " + template + " => " + paramMap, e);
return null;
if (paramMap.containsKey(template)) {
return paramMap.get(template);
}
return GroovyUtil.evaluate(template, paramMap);
}
protected long getReadInterval(final Map<String, String> paramMap) {

View file

@ -0,0 +1,53 @@
/*
* Copyright 2012-2016 CodeLibs Project and the Others.
*
* Licensed 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.codelibs.fess.util;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import groovy.lang.Binding;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyShell;
public final class GroovyUtil {
private static final Logger logger = LoggerFactory.getLogger(GroovyUtil.class);
private GroovyUtil() {
// nothing
}
public static <T> Object evaluate(final String template, final Map<String, T> paramMap) {
final GroovyShell groovyShell = new GroovyShell(new Binding(paramMap));
try {
return groovyShell.evaluate(template);
} catch (final Exception e) {
logger.warn("Failed to evalue groovy script: " + template + " => " + paramMap, e);
return null;
} finally {
final GroovyClassLoader loader = groovyShell.getClassLoader();
// StreamUtil.of(loader.getLoadedClasses()).forEach(c -> {
// try {
// GroovySystem.getMetaClassRegistry().removeMetaClass(c);
// } catch (Throwable t) {
// logger.warn("Failed to delete " + c, t);
// }
// });
loader.clearCache();
}
}
}