Как заставить setListDelimiter Конфигурации Commons работать? - PullRequest
2 голосов
/ 24 февраля 2012

Я хотел бы использовать альтернативный разделитель списка в конфигурации Apache Commons. Однако, несмотря на то, что я пробовал очень много разных способов доступа к объекту конфигурации и установки его разделителя списка, я никогда не смогу заставить его фактически использовать что-либо, кроме запятого по умолчанию.

Я использую Commons Configuration version 1.8.0 с Java 1.6.0_29 в Mac OS X.

EDIT:

Мне нужно загрузить файл определения конфигурации XML, который устанавливает четырехуровневый набор источников конфигурации:

  <configuration>
      <system/>
      <properties fileName="top.properties"/>
      <properties fileName="bop.properties"/>
      <properties fileName="fop.properties"/>
  </configuration>

... который я поставляю конструктору DefaultConfigurationBuilder:

  val configBuilder = new DefaultConfigurationBuilder(configURL)

Я пробовал обе перегрузки getConfiguration в результате DefaultConfigurationBuilder. Версия с нулевым аргументом объявляется как возвращающая Configuration, а не подкласс AbstractConfiguration (хотя она может быть приведена к AbstractConfiguration), а Configuration даже не определяет setListDelimiter.

Не могли бы вы уточнить, как, учитывая эти требования, я могу получить контроль над разделителем списка?

FOLLOW-UP:

Звонок AbstractConfiguration.setDefaultListDelimiter(listDelim) решил для меня проблему.

Рэндалл Шульц

1 Ответ

1 голос
/ 24 февраля 2012

Чтобы изменить разделитель списка для одного объекта конфигурации, используйте метод setListDelimiter().

Чтобы изменить разделитель списка для всех конфигураций, используйте статический метод setDefaultListDelimiter().

Изменение разделителя повлияет только на новые параметры конфигурации.Так что либо refresh() вашей конфигурации, либо загрузите файл конфигурации только после установки разделителя списка.

Пример

ListDelimiterDemo.java

import org.apache.commons.configuration.AbstractFileConfiguration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;


public class ListDelimiterDemo {

    public static void main(String[] args) throws ConfigurationException {
        AbstractFileConfiguration config = new PropertiesConfiguration();
        config.setListDelimiter('|');
        config.load("config.properties");

        for (Object listItem : config.getList("myprop")) {
            System.out.println(listItem);
        }
    }
}

config.properties:

myprop=hello|world|!

Печать:

hello
world
!
...