Я просто изучаю JAXB (Java Architecture для привязки XML). Прочитав несколько источников, в моем сознании возникло сомнение относительно JAXBElement
.
Oracle docs говорят:
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.
Ссылка здесь
Означает ли это, что JAXBElement
необходимо использовать, когда нет прямого сопоставления между определенным типом данных схемы и типом данных Java?
Далее, в одном из примеров кода, перечисленных ниже. который я последовал из здесь:
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);
который согласно этому источнику является оберткой для expense
object.
С другой стороны, мы не создаем обертки для объектов, извлеченных с помощью UserT user = factory.createUserT();
Итак, мои вопросы:
- В чем необходимость
JAXBElement
оболочки вокругexpense
? - когда использовать
JAXBElement
?