首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Jaxb生成的ObjectFactory?

如何使用Jaxb生成的ObjectFactory?
EN

Stack Overflow用户
提问于 2013-01-19 06:02:30
回答 1查看 8.8K关注 0票数 3

我使用Jaxb来生成Java类。我的模式定义了以下元素:

代码语言:javascript
复制
<xs:complexType name="AutomobileType" abstract="true">
    <xs:sequence>
        <xs:element name="Color" type="core:ColorName"/>
        <xs:element name="Weight" type="core:PoundsWeightType"/>
        <xs:element name="Fuel" type="Fuel"/>
        <xs:element name="NumDoors" type="xs:nonNegativeInteger"/>
        <xs:element name="NumCylinders">
            <xs:simpleType>
                <xs:restriction base="xs:int">
                    <xs:minInclusive value="1"/>
                    <xs:maxInclusive value="12"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:sequence>
</xs:complexType>    
<xs:element name="Automobile" type="AutomobileType"/>

正如你所看到的,我有一个元素叫做汽车。

Jaxb创建类和用于创建汽车实例的ObjectFactory。让我困惑的是创建汽车实例的方法如下:

代码语言:javascript
复制
public JAXBElement<AutomobileType> createAutomobile(AutomobileType value)

为什么createAutomobile方法有一个参数?我该如何使用这个方法?

我尝试了以下几点:

代码语言:javascript
复制
ObjectFactory objectFactory = new ObjectFactory();
objectFactory.createAutomobile(new Automobile());

但是这不能编译,因为汽车类是抽象的,因此我不能创建一个实例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-19 06:38:39

还有另一种方法:

代码语言:javascript
复制
 public AutomobileType createAutomobileType();

在JAXB中,xsd:complexType "AutomobileType“构造映射同名的类。它是指相当于该XML模式类型的数据结构。

JAXBElement<>是一个(参数化)包装器类型,它将java对象与元素名称和命名空间关联起来,这就是为什么它的构造函数除了元素名称空间和元素名称之外,还在构造函数中接受一个AutomobileType对象作为参数。生成的ObjectFactory“createAutomobile(.)”只是一个方便的方法来包装构造函数,从XML模式硬编码您的名称空间和元素名称。

虽然这种二分法一开始并不都是直截了当的,但考虑一下,您可以使用另一个名称来处理另一个元素。

它们在结构上是等价的,但元素名称则不同。您将有另一个ObjectFactory方法“createMotorcycle(.)”。

您可以创建一个未命名的automobileType对象,用于构建xml元素的内容,然后告诉JAXB它应该表示为哪个XML元素。

我建议您阅读有关这个主题的JAXB文档。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14411641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档