2017-01-20 9 views
0

Я смущен этими двумя аспектами JAXB.JAXBC контекст контекста vs @XMLSeeAlso

Насколько я понимаю, при передаче имени разделенных двоеточиями пакетов в качестве контекстного пути к методу JAXBContext JAXB JAXB добавит все классы под этими пакетами к своей области, которые будут использоваться в таких операциях, как marshall/unmarshall/validate .. .и т.д.

Аннотации @XmlSeeAlso инструктируют JAXBContext связывать классы. Все примеры, которые я видел, используют эту аннотацию, чтобы указать только ее дочерние классы (я не мог понять, почему на самом деле).

Ниже приведены мои вопросы:

1- Может @XmlSeeAlso быть опущена, если классы, указанные в аннотаций находятся в пакетах, переданных JAXBContext newInstance метод?

2- Если это верно, то почему мы должны это аннотация в первом места, где мы можем просто передать все пакеты, содержащих классы, мы должны функции newInstance ?

3- Если выше не так, мы можем использовать только пакеты, содержащие верхние классы уровня, передаваемые в newInstance, и использовать аннотацию @XmlSeeAlso ссылаться на все детей этих классов?

+0

Конструктор пути пакета требует наличия объекта ObjectFactory или файла jaxb.index. Они предоставляются бесплатно, если вы компилируете из xsds, но вам больно поддерживать, если вы занимаетесь рукоделием. '@ XmlSeeAlso' поддерживает использование jaxb только для аннотаций. – teppic

ответ

1

1- Может @XmlSeeAlso быть опущена, если классы, указанные в аннотаций находятся в пакетах, переданных JAXBContext newInstance метод?

да, @XmlSeeAlso используется для указания JAXBContext искать классы, которые иначе не нагружены newInstance(). Чтобы сообщить JAXBContext об используемых подклассах, вы можете указать @XmlSeeAlso или передать все подклассы в методе newInstance.

2- Если это верно, то почему мы должны это аннотация в первом месте, где мы можем просто передать все пакеты, содержащие классов мы должны функциям newInstance?

@XmlSeeAlso подход используется в основном, когда вы создаете классы JAXB самостоятельно. Когда вы используете подход XSD-> JAXB, то со всеми пакетами, разделенными :.

+0

звучит разумно .. спасибо – KAD