私は、デフォルトでいくつかのフォールバック値を処理するカスタム構成補間器をコモンズ構成に登録しようとしています。
これが補間器のコードです。
public class FallbackConfigurationInterpolator extends ConfigurationInterpolator {
Pattern p = Pattern.compile("\\d+$");
public FallbackConfigurationInterpolator() {
super();
}
@Override
public String lookup(String var) {
String value = super.lookup(var);
if (StringUtils.startsWith(value, "${") && endsWithDigits(var)) {
value = super.lookup(valueWithRemovedDigits(var));
}
return value;
}
private String valueWithRemovedDigits(String var) {
return var.replace("\\d+$", StringUtils.EMPTY);
}
private boolean endsWithDigits(String var) {
return p.matcher(var).matches();
}
}
これが私の構成ビルダーの外観です
public class CustomCommonsConfigurationBuilder extends DefaultConfigurationBuilder {
public CustomCommonsConfigurationBuilder() {
super();
}
public CustomCommonsConfigurationBuilder(String fileName) throws ConfigurationException {
super(fileName);
}
public CustomCommonsConfigurationBuilder(File file) {
super(file);
}
public CustomCommonsConfigurationBuilder(URL url) throws ConfigurationException {
super(url);
}
@Override
protected ConfigurationInterpolator createInterpolator() {
FallbackConfigurationInterpolator interpol = new FallbackConfigurationInterpolator();
interpol.setDefaultLookup(new StrLookup() {
@Override
public String lookup(String var) {
Object prop = resolveContainerStore(var);
return (prop != null) ? prop.toString() : null;
}
});
return interpol;
}
}
これが、構成ビルダーをインスタンス化する方法です。
@Before
public void setup() throws ConfigurationException {
System.setProperty("environment", "local");
config = (AbstractConfiguration) new CustomCommonsConfigurationBuilder("commons-configuration.xml")
.getConfiguration();
config.getSubstitutor().setEnableSubstitutionInVariables(true);
}
何らかの理由で、カスタム補間器のルックアップメソッドが呼び出されることはありません。カスタム補間器の登録に成功した場合、誰かが助けてくれますか?
前もって感謝します。