栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用JAXB和Any进行序列化

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用JAXB和Any进行序列化

下面我将演示 JAXB(JSR-222)

any
用一个例子:

有效载荷

any
属性用注释
@XmlAnyElement(lax=true)
。这意味着对于该属性,如果某个元素通过
@XmlRootElement
或与一个类关联,
@XmlElementDecl
则如果没有将该元素设置为的实例,则将使用相应对象的实例来填充该属性
org.w3c.dom.Element

package forum13941747;import java.util.List;import javax.xml.bind.annotation.*;@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "Payload", propOrder = {    "any"})public class Payload {    @XmlAnyElement(lax = true)    protected List<Object> any;}

oo

以下是带有注释的类的示例

@XmlRootElement

package forum13941747;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class Foo {}

酒吧

下面是一个没有

@XmlRootElement
注释的类的示例。在此用例中,我们将
@XmlElementDecl
在带有的工厂类(通常称为
ObjectFactory
)上使用注释
@XmlRegistry

package forum13941747;public class Bar {}

对象工厂

下面是

@XmlElementDecl
Bar
该类指定注释的示例。

package forum13941747;import javax.xml.bind.JAXBElement;import javax.xml.bind.annotation.*;import javax.xml.namespace.QName;@XmlRegistrypublic class ObjectFactory {    @XmlElementDecl(name="bar")    public JAXBElement<Bar> createBar(Bar bar) {        return new JAXBElement<Bar>(new QName("bar"), Bar.class, bar);    }}

input.xml

以下是我们用于此示例的输入文档。有3个元素对应于该

any
属性。第一个对应于类
@XmlRootElement
上的注释
Foo
。第二个对应于该类的
@XmlElementDecl
注释,
Bar
第三个不对应于任何域类。

<?xml version="1.0" encoding="UTF-8"?><payload>    <foo/>    <bar/>    <other/></payload>

演示版

在下面的演示代码中,我们将解组输入文档,然后在结果

any
属性中输出对象的类,然后将
payload
对象编组回XML。

package forum13941747;import java.io.File;import javax.xml.bind.*;public class Demo {    public static void main(String[] args) throws Exception {        JAXBContext jc = JAXBContext.newInstance(Payload.class, Foo.class, ObjectFactory.class);        Unmarshaller unmarshaller = jc.createUnmarshaller();        File xml = new File("src/forum13941747/input.xml");        Payload payload = (Payload) unmarshaller.unmarshal(xml);        for(Object o : payload.any) { System.out.println(o.getClass());        }        Marshaller marshaller = jc.createMarshaller();        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);        marshaller.marshal(payload, System.out);    }}

输出量

以下是运行演示代码的输出。请注意与

any
属性中的对象相对应的类。该
foo
元素成为实例
Foo
类。该
bar
元素成为实例
JAXBElement
持有的一个实例
Bar
。该
other
元素成为了一个实例
org.w3c.dom.Element

class forum13941747.Fooclass javax.xml.bind.JAXBElementclass com.sun.org.apache.xerces.internal.dom.ElementNSImpl<?xml version="1.0" encoding="UTF-8" standalone="yes"?><payload>    <foo/>    <bar/>    <other/></payload>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号