[java] В чем смысл классов ObjectFactory JAXB 2?



Answers

Как отметил @Chris, иногда JAXB не может работать с POJO, потому что схема не может быть точно сопоставлена ​​с Java. В этих случаях JAXBElement оболочки JAXBElement необходимы для предоставления дополнительной информации о типе.

Есть два конкретных примера, с которыми я столкнулся, где это распространено.

  • Если вы хотите @XmlRootElement объект класса, который не имеет аннотации @XmlRootElement . По умолчанию XJC генерирует только @XmlRootElement для некоторых элементов, а не для других. Точная логика для этого немного сложна, но вы можете заставить XJC генерировать дополнительные классы @XmlRootElement используя «простой режим привязки»,

  • Когда ваша схема использует группы заместителей. Это довольно продвинутое использование схемы, но XJC переводит группы подстановки на Java, сильно используя обертки JAXBElement .

Таким образом, в XJC-сгенерированной объектной модели, которая сильно использует JAXBElement (по какой-либо причине), вам нужен способ создания этих экземпляров JAXBElement . Созданный ObjectFactory - самый простой способ сделать это. Вы можете сами их построить, но это неудобно и подвержено ошибкам.

Question

Я новичок в использовании JAXB, и я использовал xjc JAXB 2.1.3 для создания набора классов из моей XML-схемы. Помимо создания класса для каждого элемента в моей схеме, он создал класс ObjectFactory.

Кажется, что мне ничего не мешает прямому экземпляру элементов, например

MyElement element = new MyElement();

в то время как учебники, похоже, предпочитают

MyElement element = new ObjectFactory().createMyElement();

Если я посмотрю на ObjectFactory.java, я вижу:

public MyElement createMyElement() {
    return new MyElement();
}

так в чем дело? Почему я должен даже поддерживать класс ObjectFactory? Я предполагаю, что он также будет перезаписан, если я буду перекомпилировать из измененной схемы.




Related



Tags

java java   jaxb