gpt4 book ai didi

jaxb - 如何使用Jaxb生成的ObjectFactory?

转载 作者:行者123 更新时间:2023-12-01 14:18:43 25 4
gpt4 key购买 nike

我正在使用 Jaxb 生成 Java 类。我的架构定义了以下元素:

<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 创建了我用来创建 Automobile 实例的类和 ObjectFactory。令我困惑的是创建 Automobile 实例的方法如下:

public JAXBElement<AutomobileType> createAutomobile(AutomobileType value)

为什么 createAutomobile 方法有参数?如何使用此方法?

我尝试了以下方法:

ObjectFactory objectFactory = new ObjectFactory();
objectFactory.createAutomobile(new Automobile());

但这不会编译,因为 Automobile 类是抽象的,因此我无法创建实例。

最佳答案

还有一个方法:

 public AutomobileType createAutomobileType();

在 JAXB 中,xsd:complexType“AutomobileType”构造映射同名类。它是与该 XML 模式类型等效的数据结构。

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

虽然一开始这种二分法并不是很直接,但考虑到您可以使用另一个名称来拥有另一个元素

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

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

我强烈建议您阅读有关该主题的 JAXB 文档。

关于jaxb - 如何使用Jaxb生成的ObjectFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14411641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com