В Digester странное поведение, что я не могу окутать голову.Digester 3 дважды вызывает конструкторы при создании объектов
У меня есть следующий код, который называют конструктор «роль» объекта всякий раз, когда он сталкиваются с «ролей/роль» узел во входном XML:
AbstractRulesModule loader = (new AbstractRulesModule() {
protected void configure() {
forPattern("roles/role").createObject().ofType(Role.class)
.usingConstructor(String.class, String.class).then()
.callParam().fromAttribute("machine").ofIndex(0);
forPattern("roles/role").callParam().fromAttribute("name")
.ofIndex(1);
forPattern("roles/role").setNext("add");
}
});
Digester digester = DigesterLoader.newLoader(loader).newDigester();
List<Role> roles = new ArrayList<>();
digester.push(roles);
digester.parse(new File("c:/RoleMapping.xml"));
System.out.println(roles);
System.out.println(Role.count);
Каждый раз, когда конструктор роль, называется, Role.count увеличивается. Как ни странно, после выполнения приведенного выше кода в отношении следующего xml, Role.count равен 2 вместо 1. Когда я отлаживаю код, кажется, что Digester попытался создать 2 дополнительных объекта с «нулем» в качестве параметров конструктора.
<roles>
<role name="m1" machine="mymachine" />
</roles>
Это привело бы к любой проблеме, если у меня есть проверка кода, если аргументы конструктора равны нулю.
Определение моего класса Роли является:
public class Role {
private String machine;
private String name;
static int count = 0;
public Role(String machine, String name) {
this.machine = machine;
this.name = name;
count++;
}
}
Я также заметил это поведение с digester 3.2, пытаясь найти некоторые проблемы с моими конструкторами объектов, которые вызываются только с нулевыми параметрами. Вы узнали, нормально ли звонить дважды? Также были ли у вас какие-либо проблемы с вызовом вашего конструктора с неисправными параметрами? – gsnerf