XStream - 使用属性设置器而不是直接字段访问

时间:2011-06-14 05:47:33

标签: javabeans xstream getter-setter

我正在尝试使用XStream从XML加载对象。 默认情况下,XStream似乎使用直接字段访问。因此,当您将名为“rolesAsString”的字段映射到名为“roles”的别名时,它将从“roles”标记中获取值,并尝试将其直接设置为您类中的“rolesAsString”字段。这在大多数情况下都适用,但不适用于我的情况。

以下是与该问题相关的XML:

<principal name="admin" roles="role1, role2, role3">

这是班级:

public class Principal {
    private Set<String> roles = new HashSet<String>();
    public Set<String> getRoles() {
        return roles;
    }

public void setRolesAsString(String roles) {
    for (String role : roles.split(",")) {
        role = role.trim();
        if (!"".equals(role)) { //ignore empty string roles
            this.roles.add(role);
        }
    }
}

public String getRolesAsString() {
    StringBuilder result = new StringBuilder();
    boolean first = true;
    for (String role : roles) {
        if (first) {
            first = false;
        } else {
            result.append(", ");
        }
        result.append(role);
    }
    return result.toString();
}

我在尝试从xml文件加载配置时调用setRolesAsString,而不是尝试直接连接到角色字段。

我已尝试使用JavaBeanConverter转换器,但我无法使其工作。我正在使用的代码是: public void setRolesAsString(String roles) { for (String role : roles.split(",")) { role = role.trim(); if (!"".equals(role)) { //ignore empty string roles this.roles.add(role); } } } public String getRolesAsString() { StringBuilder result = new StringBuilder(); boolean first = true; for (String role : roles) { if (first) { first = false; } else { result.append(", "); } result.append(role); } return result.toString(); }

我知道我在哪里出错了吗?

谢谢, 燕姿。

0 个答案:

没有答案