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는 1 대신 2가됩니다. 코드를 디버깅 할 때 Digester는 생성자 매개 변수로 "null"을 가진 2 개의 추가 객체를 만들었습니다.
<roles>
<role name="m1" machine="mymachine" />
</roles>
생성자의 인수가 null인지 확인하는 코드가 있으면 모든 종류의 문제가 발생합니다.
내 역할 클래스의 정의는 다음과 같습니다 ... 제가 질문 3 세입니다 참조
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++;
}
}
또한 매개 변수로 null로만 호출되는 내 개체 생성자 beeing에 문제가있는 동안 digester 3.2에서이 동작을 발견했습니다. 두 번 부르는 것이 정상적인 지 알았습니까? 또한 잘못된 매개 변수로 호출 된 생성자 beeing에 문제가 있습니까? – gsnerf