我使用Jaxb unmarshaller将xmpp服务器的部分响应映射到java对象。
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
未被取消编组,mucUser.getItem()
返回null。但是当我明确地将名称空间tst
添加到Test.java中的元素<item>
并修改MucUser.java以使用注释@XmlElement(name = "item", namespace="tst")
时,它可以正常工作!
但是,我不能按照我的意愿修改该字符串,它是协议的一部分。
如何在MucUser类中正确映射item
?
答案 0 :(得分:0)
在XML中,您要在'x'元素中设置默认命名空间。包含的元素使用此命名空间。因此,Item应使用与Mcuser相同的命名空间