Разобрать в свойствах со значениями по умолчанию, используя Commons Digester
<properties>
<property name="p1">v1</property>
<property name="p2">v2</property>
</properties>
Я хочу разобрать это в Properties
объект с {"p1"="v1", "p2"="v2"}
, Я был в состоянии сделать это много, используя обычный дайджест.
forPattern("properties").createObject()
.ofType(Properties.class);
forPattern("properties/property")
.callMethod("put").withParamCount(2)
.withParamTypes(Object.class, Object.class).then()
.callParam().fromAttribute("name").ofIndex(0).then()
.callParam().ofIndex(1);
Кроме того, я также хотел пройти по умолчанию Properties
объект, который у меня есть. т.е. вместо new Properties()
, Мне нужно сделать new Properties(defaults)
создать экземпляр свойств. Я в курсе .usingConstructor(Properties.class).then()
но не нашел способ пройти существующий Properties
объект в качестве аргумента.
Я использую v3.3.2. Любая помощь с благодарностью
1 ответ
Решение
Ну, я понял, что это можно сделать с помощью FactoryCreateRule
class PropertiesFactory extends AbstractObjectCreationFactory<Properties> {
Properties defaultProperties;
public PropertiesFactory(Properties defaultProperties) {
super();
this.defaultProperties = defaultProperties;
}
@Override
public Properties createObject(Attributes attributes) throws Exception {
return new Properties(defaultProperties);
}
}
...
...
forPattern("properties").factoryCreate()
.usingFactory(new PropertiesFactory(defaultProperties));
forPattern("properties/property")
.callMethod("put").withParamCount(2)
.withParamTypes(Object.class, Object.class).then()
.callParam().fromAttribute("name").ofIndex(0).then()
.callParam().ofIndex(1);