Использование XmlRootElement в JAXB, чтобы избежать корневого JAXBElement - PullRequest
1 голос
/ 01 декабря 2011

Я распаковываю сообщения, соответствующие схеме ниже, и хотел бы, чтобы возвращаемый корневой элемент был класса Bar.Вместо этого возвращаемый корневой элемент всегда является JAXBElement, содержащим имя 'foo' со значением, равным требуемому элементу Bar.

Я думаю, что XmlRootElement можно использовать для этого в файле привязок, но пока это не работает.Есть идеи?

<xsd:element name="foo" type="Bar"/>
<xsd:complexType name="Bar">
    <xsd:sequence>
        <xsd:element name="goo" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Вы можете настроить xsd:element с помощью jaxb:class, это создаст дополнительный класс для вашего элемента.Эту настройку можно выполнить с помощью привязок:

<jaxb:bindings node="xsd:element[@name='foo']">
    <jaxb:class>
</jaxb:bindings>
1 голос
/ 01 декабря 2011

Поскольку может быть много глобальных элементов, соответствующих глобальному сложному типу, JAXB impl не генерирует аннотацию @XmlRootElement для этих классов. Вы можете объявить элемент с анонимным сложным типом.

<xsd:element name="foo">
    <xsd:complexType>
        <xsd:sequence>
           <xsd:element name="goo" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
</xsd:element>

Когда метод unmarshal возвращает экземпляр JAXBElement, вы можете получить объект домена, вызвав getValue().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...