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

MOXY中的JAXB继承

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

MOXY中的JAXB继承

从您发布的日志消息中,我可以看到您正在使用MOXy的外部映射文档(请参阅http://blog.bdoughan.com/2010/12/extending-
jaxb-representing-
annotations.html

)。有两种不同的方式来映射继承的属性。


选项#1-映射属于父级的继承属性

默认情况下,字段/属性需要映射到它所属的类中。由于MOXy在包级别限制了外部映射文档,因此您将需要为

A
和单独的映射文档
B

Forum10874711 / a / binding1.xml

<?xml version="1.0"?><xml-bindings    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"    package-name="forum10874711.a">    <java-types>        <java-type name="A"> <java-attributes>     <xml-element java-attribute="fieldOfClassA" name="field-of-class-a"/> </java-attributes>        </java-type>    </java-types></xml-bindings>

Forum10874711 / b / binding1.xml

<?xml version="1.0"?><xml-bindings    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"    package-name="forum10874711.b">    <java-types>        <java-type name="B"> <xml-root-element/> <java-attributes>     <xml-element java-attribute="fieldOfClassB" name="field-of-class-b"/> </java-attributes>        </java-type>    </java-types></xml-bindings>

Forum10874711 / b / jaxb.properties

要将MOXy指定为JAXB实现,您需要

jaxb.properties
使用以下条目添加一个与域模型相同的包中调用的文件。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

演示版

package forum10874711;import java.util.*;import javax.xml.bind.*;import org.eclipse.persistence.jaxb.JAXBContextFactory;import forum10874711.b.B;public class Demo1 {    public static void main(String[] args) throws Exception {        Map<String, Object> properties = new HashMap<String, Object>(1);        List<String> metadata = new ArrayList<String>(2);        metadata.add("forum10874711/a/binding1.xml");        metadata.add("forum10874711/b/binding1.xml");        properties.put(JAXBContextFactory.ECLIPSElink_OXM_XML_KEY, metadata);        JAXBContext jc = JAXBContext.newInstance(new Class[] {B.class}, properties);        B b = new B();        b.setFieldOfClassA("foo");        b.setFieldOfClassB(123);        Marshaller marshaller = jc.createMarshaller();        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);        marshaller.marshal(b, System.out);    }}

输出量

<?xml version="1.0" encoding="UTF-8"?><b>   <field-of-class-a>foo</field-of-class-a>   <field-of-class-b>123</field-of-class-b></b>

选项#2-映射属于子级的继承属性

父类

A' can be marked
@XmlTransient
this will allow us to map the inheritedfields/properties on the childclass
B`(请参阅http://blog.bdoughan.com/2011/06/ignoring-inheritance-with-
xmltransient.html
)。

Forum10874711 / a / binding2.xml

<?xml version="1.0"?><xml-bindings    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"    package-name="forum10874711.a">    <java-types>        <java-type name="A" xml-transient="true"/>    </java-types></xml-bindings>

Forum10874711 / b / binding2.xml

<?xml version="1.0" encoding="UTF-8"?><xml-bindings    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"    package-name="forum10874711.b">    <java-types>        <java-type name="B"> <xml-root-element/> <java-attributes>     <xml-element java-attribute="fieldOfClassA" name="field-of-class-a"/>     <xml-element java-attribute="fieldOfClassB" name="field-of-class-b"/> </java-attributes>        </java-type>    </java-types></xml-bindings>

演示版

package forum10874711;import java.util.*;import javax.xml.bind.*;import org.eclipse.persistence.jaxb.JAXBContextFactory;import forum10874711.b.B;public class Demo2 {    public static void main(String[] args) throws Exception {        Map<String, Object> properties = new HashMap<String, Object>(1);        List<String> metadata = new ArrayList<String>(2);        metadata.add("forum10874711/a/binding2.xml");        metadata.add("forum10874711/b/binding2.xml");        properties.put(JAXBContextFactory.ECLIPSElink_OXM_XML_KEY, metadata);        JAXBContext jc = JAXBContext.newInstance(new Class[] {B.class}, properties);        B b = new B();        b.setFieldOfClassA("foo");        b.setFieldOfClassB(123);        Marshaller marshaller = jc.createMarshaller();        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);        marshaller.marshal(b, System.out);    }}

输出量

<?xml version="1.0" encoding="UTF-8"?><b>   <field-of-class-a>foo</field-of-class-a>   <field-of-class-b>123</field-of-class-b></b>


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

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

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