Я использую jaxb unmarshaller для сопоставления части ответа с сервера xmpp на java-объект.@XmlElement имеет значение null, когда он не имеет пространства имен
Test.java
public class Test {
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(MucUser.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
ByteArrayInputStream bais = new ByteArrayInputStream((
"<x xmlns='http://jabber.org/prot" +
"ocol/muc#user'><item role='moderator'" +
" affiliation='owner'/></x>").getBytes());
MucUser mucUser = (MucUser) unmarshaller.unmarshal(bais);
System.out.println(mucUser.getItem());
}
}
MucUser.java
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(namespace = "http://jabber.org/protocol/muc#user", name = "x")
public class MucUser {
@XmlElement(name = "item")
private Item item;
// getter and setter without annotations
}
Item.java
@XmlAccessorType(XmlAccessType.FIELD)
public class Item {
@XmlAttribute(name = "role")
private String role;
@XmlAttribute(name = "affiliation")
private String affiliation;
// getters and setters without annotations
}
Я не использую ObjectFactory.java и package-info.java. Поле item
не получает unmarshalled, и mucUser.getItem()
возвращает null. Но когда я явно добавляю пространство имен tst
в элемент <item>
в Test.java и модифицирую MucUser.java для использования аннотации @XmlElement(name = "item", namespace="tst")
, он отлично работает!
Однако я не могу изменить эту строку своей волей, это часть протокола.
Как правильно отобразить item
в моем классе MucUser?
Спасибо. Я модифицировал аннотацию в '' '' MucUser.java''' '' @XmlElement (name = "item", namespace = "http://jabber.org/protocol/muc#user") '' 'и начал работать как ожидалось. – Alexey