私はJaxbアンマーシャラーを使用して、xmppサーバーからJavaオブジェクトへの応答の一部をマッピングしています。私はObjectFactory.javaとpackage-info.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
}
。フィールドitem
はアンマーシャリングされておらず、mucUser.getItem()
はnullを返します。しかし、明示的に名前空間tst
をTest.javaの要素<item>
に追加し、MuchUser.javaを注釈@XmlElement(name = "item", namespace="tst")
を使用するように変更すると、正常に動作します。
しかし、私は自分の意志でその文字列を変更することはできません。これはプロトコルの一部です。
item
をMucUserクラスに正しくマップするにはどうすればよいですか?
ありがとうございます。 @MmlElement(name = "item"、namespace = "http://jabber.org/protocol/muc#user") '' 'に' 'MucUser.java'''のアノテーションを変更して起動しました期待通りに働く – Alexey