<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。 非常感谢任何帮助
答案 0 :(得分:0)
我发现这可以使用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);