繁体   English   中英

将XML转换为带有JAXB注释的类

[英]Converting an XML to a JAXB Annotated Class

我试图将下面的XML转换为带有JAXB注释的类,但是我在考虑一个在XML根内重复元素的解决方案时遇到麻烦。

   <addresses xmlns='http://jabber.org/protocol/address'>
       <address type='to' jid='hildjj@jabber.org/Work' />
       <address type='cc' jid='jer@jabber.org/Home' />
   </addresses>

我有一个映射到XML的类,我希望在构造函数中传递的列表中的每个项目,在XML根元素“地址”中形成具有属性“类型”和“ jid”的元素“地址”。

@XmlRootElement(name = "addresses", namespace = "http://jabber.org/protocol/address")
@XmlAccessorType(XmlAccessType.FIELD)
public class Addresses {

    @XmlElement
    private List<String> address;

    private Addresses() {
        // Private no-args default constructor for JAXB.
    }

    public Addresses(List<String> address) {
        this.address = address;
    }
}

例如,如果我在实例化对象时传递一个列表(“ User1”,“ User2”,“ User3”),则生成的XML将如下所示:

   <addresses xmlns='http://jabber.org/protocol/address'>
       <address type='to' jid='User1' />
       <address type='to' jid='User2' />
       <address type='to' jid='User3' />
   </addresses>

我设法通过创建两个类Address和Addresses实现了这一点。 Addresses根元素将使用“地址”类的列表作为元素输入。

@XmlRootElement(name = "addresses", namespace = "http://jabber.org/protocol/address")
@XmlAccessorType(XmlAccessType.FIELD)
public class Addresses {

    @XmlElement
    private List<Address> address; //List of type address

    private Addresses() {
        // Private no-args default constructor for JAXB.
    }

    public Addresses(List<String> address) {
        this.address = address;
    }
}

这是具有“ to”和“ jid”属性的地址类。 它在构造函数中采用String类型的输入jid。

@XmlRootElement(name = "address")
@XmlAccessorType(XmlAccessType.FIELD)
public class Address {

    @XmlAttribute
    private String to = 'to';

    @XmlAttribute
    private String jid;

    private Address() {
        // Private no-args default constructor for JAXB.
    }

    public Address(String jid) {
        this.jid = jid;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM