Я пытаюсь загрузить объект из XML с помощью XStream.По умолчанию XStream использует прямой доступ к полям.Таким образом, когда вы сопоставляете поле с именем 'roleAsString' с псевдонимом с именем 'role', оно возьмет значение из тега 'role' и попытается установить его непосредственно в поле 'roleAsString' в вашем классе.Это работает в большинстве случаев, но не в моем случае.
Вот XML, относящийся к вопросу: <principal name="admin" roles="role1, role2, role3">
Вот класс: <pre>
public class Principal {
private Set<String> roles = new HashSet<String>();
public Set<String> getRoles() {
return roles;
}</p>
<pre><code>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();
}
Я пытаюсь заставить XStream вызывать setRolesAsString при загрузке конфигурации из XML-файла, вместо того, чтобы пытаться подключиться напрямую к полю ролей.это с конвертером JavaBeanConverter, но я не могу заставить его работать.Код, который я использую для этого:
configParser.registerLocalConverter(Principal.class, "roles", new JavaBeanConverter(configParser.getMapper()) {
@Override
public boolean canConvert(@SuppressWarnings("rawtypes") Class clazz) {
return true;//should make XStream to always use this converter for that field.
}
});</p>
<p>configParser.aliasAttribute(Resource.class, "roles", "roles");
Есть идеи, где я ошибаюсь?
Спасибо, Стеф.