2017-01-10 8 views
0

Я использую 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?

ответ

0

В вашем XML вы задаете пространство имен по умолчанию в элементе «x». Содержащиеся элементы используют это пространство имен. Поэтому элемент должен использовать те же пространства имен, что и Mcuser

+0

Спасибо. Я модифицировал аннотацию в '' '' MucUser.java''' '' @XmlElement (name = "item", namespace = "http://jabber.org/protocol/muc#user") '' 'и начал работать как ожидалось. – Alexey