2017-01-10 1 views
0

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?

Antwort

0

In Ihrem XML legen Sie den Standard-Namespace im 'x' Element fest. Contained-Elemente verwenden diesen Namespace. Artikel sollte daher den gleichen Namespace wie Mcuser verwenden

+0

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

Verwandte Themen