Ich benutze Jaxb unmarshaller, um einen Teil der Antwort von xmpp Server auf Java-Objekt zuzuordnen.@XmlElement ist null, wenn es keinen Namespace hat
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
}
Ich benutze ObjectFactory.java und package-info.java nicht. Feld item
wird nicht abgemagert, und mucUser.getItem()
gibt null zurück. Aber wenn ich explizit Namespace tst
zu Element <item>
in Test.java hinzufügen und MucUser.java ändern, um Annotation @XmlElement(name = "item", namespace="tst")
zu verwenden, funktioniert es gut!
Allerdings kann ich diese Zeichenfolge nicht nach meinem Willen ändern, es ist ein Teil des Protokolls.
Wie sollte ich item
in meiner MucUser-Klasse richtig zuordnen?
Vielen Dank. Ich habe die Annotation in '' 'MucUser.java''' in' '@XmlElement (name =" item ", namespace =" http://jabber.org/protocol/muc#user ")' '' geändert und es wurde gestartet wie erwartet arbeiten. – Alexey