用自定义替换默认配置Iterpolator

时间:2012-09-28 19:25:35

标签: apache-commons-config

我一直在尝试在公共配置中注册自定义配置插补器,默认情况下会处理一些回退值。

这是插补器的代码。

   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);
    }

由于某种原因,我的自定义插补器中的查找方法永远不会被调用。如果您成功注册自定义插补器,有人可以帮忙吗?

先谢谢。

0 个答案:

没有答案