Форматирование вывода XML/изменение Transformer в apache commons-configurations2

Я пытаюсь перейти со старой конфигурации commons на commons-configuration2, но у меня возникают проблемы с форматированием вывода XML с отступом при использовании нового построителя конфигураций.

Раньше я делал вот так, работало нормально.

XMLConfiguration configuration = new XMLConfiguration()
{
    @Override
    protected Transformer createTransformer()
        throws ConfigurationException
    {
        Transformer transformer = super.createTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("http://xml.apache.org/xslt}indent-amount", "4");
        return transformer;
    }
};

Но в commons-configurations2 вы используете ConfigurationBuilder для получения экземпляра XMLConfiguration, который удаляет возможность создания подкласса XMLConfiguration, например, так:

XMLConfiguration configuration = configurations
        .xmlBuilder(new File("config.xml"))
        .getConfiguration();

Есть ли другой способ настройки преобразователя XMLConfiguration?

Спасибо!


person langen    schedule 11.10.2017    source источник


Ответы (1)


Вот как я это решил.

Создайте новый класс, расширяющий XMLConfiguration:

public class PrettyXMLConfiguration
    extends XMLConfiguration
{
    @Override
    protected Transformer createTransformer()
        throws ConfigurationException
    {
        Transformer transformer = super.createTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(
            "{http://xml.apache.org/xslt}indent-amount", "4");
        return transformer;
    }
}

Вместо этого создайте XMLConfiguration следующим образом:

XMLConfiguration builder = new Configurations()
        .fileBasedBuilder(PrettyXMLConfiguration.class, new File("config.xml"))
        .getConfiguration();

или еще проще:

XMLConfiguration builder = new Configurations()
    .fileBased(PrettyXMLConfiguration.class, new File("config.xml"));
person langen    schedule 11.10.2017