Я пытаюсь использовать конфигурацию Apache Commons в groovy script для чтения значений из простого файла свойств и заполнения XML-шаблона этими значениями из этот файл. Цель этого примера - запустить несколько экземпляров Tomcat с настройками, заданными в файлах свойств. Несмотря на чудовищность инфраструктуры Apache Commons Configuration, она была выбрана из-за ее способности читать/писать/проверять различные типы конфигурации прямо из коробки.Как сохранить конфигурацию xml, заполненную значениями из файла свойств в Apache Commons Конфигурация не может сохранить
Шаблон представляет собой кусок server.xml TOMCAT в:
<?xml version='1.0' encoding='utf-8'?>
<Server port="${tomcat.server.port}" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="${tomcat.http.port}"
address="${tomcat.http.ip}"/>
<Engine jvmRoute="${tomcat.jvmroute}"/>
</Service>
</Server>
И файл свойств (скажем tomcat.properties):
application=someapp
tomcat.server.port=8087
tomcat.http.port=8088
tomcat.jvmroute=${application}
я использую DefaultConfigurationBuilder объединить эти файлы в конфигурации. Файл определений создается динамически. Код:
import groovy.xml.MarkupBuilder
import org.apache.commons.configuration.*
String configurationDefinition = "tomcat.configuration.xml"
File configurationDefinitionFile = new File(configurationDefinition)
FileWriter configurationDefinitionWriter = new FileWriter(configurationDefinitionFile)
MarkupBuilder fileList = new MarkupBuilder(configurationDefinitionWriter)
fileList.configuration() {
properties(fileName:'tomcat.properties')
xml(fileName:'server.xml')
}
configurationDefinitionWriter.close()
DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
builder.setFile(configurationDefinitionFile);
Configuration propertiesConfig = builder.getConfiguration(true);
//propertiesConfig.getKeys().each { propertyName ->
// println("$propertyName = ${propertiesConfig.getString(propertyName)}")
//}
XMLConfiguration conf = (XMLConfiguration)propertiesConfig.getConfiguration(1)
//conf.getKeys().each { propertyName ->
// println("$propertyName = ${conf.getString(propertyName)}")
//}
conf.save("server_parsed.xml")
Сохраненный файл совпадает с server.xml выше. например with port = "$ {tomcat.server.port}" Есть ли способ сохранить его со значениями из файла свойств?
Рекомендую вам переписать этот вопрос. Интересно немного рассказать о вашем случае использования, но мы, возможно, сможем вам помочь, если вы создадите простой, воспроизводимый пример и покажете его нам. Создайте крошечный XML-файл с одним или двумя элементами, крошечным файлом свойств и покажите нам [MCVE] (http://stackoverflow.com/help/mcve), которые мы можем скопировать/скомпилировать/выполнить, чтобы увидеть проблему. –
@ Дункан, спасибо вам за совет. Я обновил свой вопрос. –