XStream - использование установщика свойств вместо прямого доступа к полю - PullRequest
2 голосов
/ 14 июня 2011

Я пытаюсь загрузить объект из 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");

Есть идеи, где я ошибаюсь?

Спасибо, Стеф.

...