ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 创建JAXB对象的正确方法

2019-07-03 11:50:14  阅读:173  来源: 互联网

标签:java jaxb


我注意到jaxb编译器xjc生成的ObjectFactory类.我读了一些关于它的目的.

我想知道什么是创建jaxb对象的正确方法,因为我的目的我根本不需要这个类.即使是普通的构造函数,我是否应该总是使用ObjectFactory,或者我可以通过普通的构造函数构建对象(什么工作正常)?

编辑:添加示例:

我需要创建IpAddress的实例

这是工厂方法:

  public IpAddress createIpAddress() {
        return new IpAddress();
    }

是不是更好IpAddress ia = new IpAddress()

要么

IpAddress ia = objectFactory.createIpdAddress()

解决方法:

如果使用ObjectFactory创建域对象的实例或在JAXB 2 (JSR-222)中使用零arg构造函数,则创建的实例之间没有区别.在JAXB 1 (JSR-031)而不是POJO中,JAXB会使用特定于供应商的impl类来创建接口,然后是ObjectFactory需要创建实例.

有时候域对象需要包装在JAXBElement的实例中,ObjectFactory包含执行此操作的有用方法(参见:http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html).

JAXB最终需要ObjectFactory来包含它所包含的元数据.在处理类时,JAXB将遍历传递依赖项.在ObjectFactory上使用create方法提供了一个JAXB可以用来处理整个模型的元数据的类.

UPDATE

Ok. So best-practice-wise what would be the proper approach? (see my
example pls)

这真的取决于.我个人更喜欢使用构造函数.我在下面有一个例子来演示这两种方法.

XML Schema

下面是我用来创建Java模型的XML Schema.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
    <xs:element name="root" type="root"/>
    <xs:complexType name="root">
        <xs:sequence>
            <xs:element name="foo">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="bar" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

演示代码

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;

public class Demo {

    public static void main(String[] args) {
        // Using Constructors
        Root.Foo foo1 = new Root.Foo();
        foo1.setBar("Hello");
        Root root1 = new Root();
        root1.setFoo(foo1);
        JAXBElement<Root> jaxbElement1 = new JAXBElement<Root>(new QName("root"), Root.class, root1);


        // Using ObjectFactory
        ObjectFactory objectFactory = new ObjectFactory();
        Root.Foo foo2 = objectFactory.createRootFoo();
        foo2.setBar("World");
        Root root2 = objectFactory.createRoot();
        root2.setFoo(foo2);
        JAXBElement<Root> jaxbElement2 = objectFactory.createRoot(root2);
    }

}

标签:java,jaxb
来源: https://codeday.me/bug/20190703/1366234.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有