在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個額外的帶有「null」作爲構造參數的對象。
<roles>
<role name="m1" machine="mymachine" />
</roles>
這將導致各種問題,如果我有代碼檢查,如果構造函數的參數爲null。
我的角色類的定義是:
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++;
}
}
我也注意到這與消化器3.2的行爲,同時試圖繞過一些問題與我的對象構造函數beeing只調用null作爲參數。你有沒有發現是否調用兩次是正常的?你有沒有問題與你的構造函數調用錯誤的參數? – gsnerf 2013-10-29 13:28:32