gpt4 book ai didi

java - 为什么以及何时在 JAXB 中需要 JAXBElement?

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:21 28 4
gpt4 key购买 nike

我正在学习 JAXB(用于 XML 绑定(bind)的 Java 体系结构)。通过一些资料阅读,我对 JAXBElement 产生了一个疑问。 .

Oracle 文档说:

When XML element information can not be inferred by the derived Java representation of the XML content, a JAXBElement object is provided. This object has methods for getting and setting the object name and object value. Link here

这是否意味着JAXBElement当 Schema 定义的数据类型和 Java 数据类型之间没有直接映射时需要使用吗?

此外,在下面列出的代码示例之一中。我从here关注的:

 ObjectFactory factory = new ObjectFactory();

UserT user = factory.createUserT();
user.setUserName("Sanaulla");
ItemT item = factory.createItemT();
item.setItemName("Seagate External HDD");
item.setPurchasedOn("August 24, 2010");
item.setAmount(new BigDecimal("6776.5"));

ItemListT itemList = factory.createItemListT();
itemList.getItem().add(item);

ExpenseT expense = factory.createExpenseT();// we get expense object here
expense.setUser(user);
expense.setItems(itemList);

JAXBContext context = JAXBContext.newInstance("generated");
JAXBElement<ExpenseT> element = factory.createExpenseReport(expense);//why is this required
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty("jaxb.formatted.output",Boolean.TRUE);
marshaller.marshal(element,System.out);

使用 ExpenseT expense = factory.createExpenseT();我们能够得到 ExpenseT对象。

再次在代码中,如果我们看到,我们创建

JAXBElement<ExpenseT> element = factory.createExpenseReport(expense);
根据this sourceexpense 的包装器对象。
另一方面,我们不为使用
UserT user = factory.createUserT();检索到的对象创建包装器。

所以我的问题是:

  1. 需要什么JAXBElement包装 expense
  2. 何时使用JAXBElement

最佳答案

有一些需要 JAXBElement 的用例:

  1. 一个元素既是 nillable="true" 又是 minOccurs="0"。在这种情况下,映射字段/属性上的 null 是什么意思?当属性为 JAXBElement 时,空值表示该元素不存在,JAXBElement 包装 null 表示带有 xsi:nil="true"< 的 XML 元素
  2. 有 2 个具有相同命名复杂类型的全局元素。由于在 JAXB 类中对应于复杂类型,因此需要一种方法来捕获遇到的根元素。有关详细信息,请参阅此 article我写了。
  3. 有一个选择结构,其中 foobar 元素可以出现并且它们是同一类型。这里需要一个 JAXBElement,因为仅仅遇到一个 String 值不足以指示应编码哪个元素。
  4. 在包含属性的文档中遇到带有 xsi:nil 的元素。在此示例中,与该元素对应的对象仍可解码以保存属性值,但 JAXBElement 仍可指示该元素为空。

关于java - 为什么以及何时在 JAXB 中需要 JAXBElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396375/

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