Apache Commons: обработка списка в CompositeConfiguration

У меня есть два файла конфигурации:

override.xml looks like this ...
<paths>
 <path>1</path>
 <path>2</path>
 <path>3</path>
</paths> 
<numbers>
 <number>100</number>
 <number>200</number>
</numbers>

default.xml looks like this ...
<paths>
 <path>4</path>
 <path>5</path>
 <path>6</path>
</paths>
<alphabets>
 <alphabet>A</alphabet>
 <alphabet>B</alphabet>
</alphabets>

Я использую CompositeConfiguration. Сначала добавьте override.xml, а затем default.xml.

When I do a getList("paths.path") on the CompositeConfiguration, I get back 1,2,3,4,5,6. 

Это говорит мне, что я возвращаю значения как из override.xml, так и из default.xml. Есть ли способ вернуть значения только из override.xml только потому, что он переопределяет значения default.xml?

В то же время, если бы я сделал getList("numbers.number"), я бы ожидал, что будет возвращено 100 200. GetList("alphabets.alphabet") для возврата A,B.


person Adam    schedule 17.02.2016    source источник


Ответы (1)


Объединение содержимого списка — это поведение по умолчанию для getList of CompositeConfiguration. Вам нужно использовать CombinedConfiguration с соответствующим NodeCombiner. Для вашего варианта использования подходит OverrideCombiner. Образец кода :

XMLConfiguration x1 = new XMLConfiguration();
....
XMLConfiguration x2 = new XMLConfiguration();
....
CombinedConfiguration config = new CombinedConfiguration(new OverrideCombiner());
config.addConfiguration(x1);
config.addConfiguration(x2);

Здесь список, определенный в конфигурации x1, возвращается, когда вы выполняете config.getList("numbers.number")

person linkcrux    schedule 22.11.2016