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

为什么有时JAXB映射到JAXBElement?

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

为什么有时JAXB映射到JAXBElement?

在对象模型中没有足够信息的用例中,使用JAXBElement保留元素名称/命名空间。最常见的情况是取代基:

与替代组:

<?xml version="1.0" encoding="UTF-8"?><xs:schema     xmlns:xs="http://www.w3.org/2001/XMLSchema"     targetNamespace="http://www.example.org"     xmlns="http://www.example.org"     elementFormDefault="qualified">    <xs:element name="root">        <xs:complexType> <xs:sequence>     <xs:element ref="anElement"/> </xs:sequence>        </xs:complexType>    </xs:element>    <xs:element name="anElement" type="xs:string"/>    <xs:element name="aSubstituteElement" type="xs:string" substitutionGroup="anElement"/></xs:schema>

将产生:

package org.example;import javax.xml.bind.JAXBElement;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "", propOrder = {    "anElement"})@XmlRootElement(name = "root")public class Root {    @XmlElementRef(name = "anElement", namespace = "http://www.example.org", type = JAXBElement.class)    protected JAXBElement<String> anElement;    public JAXBElement<String> getAnElement() {        return anElement;    }    public void setAnElement(JAXBElement<String> value) {        this.anElement = ((JAXBElement<String> ) value);    }}

没有替代组:

如果删除替换组:

<?xml version="1.0" encoding="UTF-8"?><xs:schema     xmlns:xs="http://www.w3.org/2001/XMLSchema"     targetNamespace="http://www.example.org"     xmlns="http://www.example.org"     elementFormDefault="qualified">    <xs:element name="root">        <xs:complexType> <xs:sequence>     <xs:element ref="anElement"/> </xs:sequence>        </xs:complexType>    </xs:element>    <xs:element name="anElement" type="xs:string"/></xs:schema>

将生成以下类:

package org.example;import javax.xml.bind.annotation.*;@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "", propOrder = {    "anElement"})@XmlRootElement(name = "root")public class Root {    @XmlElement(required = true)    protected String anElement;    public String getAnElement() {        return anElement;    }    public void setAnElement(String value) {        this.anElement = value;    }}

解组时还可能会得到一个JAXBElement,请比较以下示例:

  • 没有任何JAXB元数据,结果将包装在JAXBElement中
  • 使用@XmlRootElement消除了根级别JAXBElement


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

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

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