Отсутствующие классы JAXB из XMLschema.xsd - PullRequest
0 голосов
/ 26 апреля 2010

Я работаю над определителем схемы xml и использую JAXB с XMLSchema.xsd. У меня проблемы с JAXB, потому что я не получаю классы для всех элементов верхнего уровня. Например для

<xs:element name="maxLength" id="maxLength" type="xs:numFacet"> 

Я не получаю класс MaxLength или что-то в этом роде. Существует только NumFacet.

Кто-нибудь еще испытал это и мог бы помочь мне?

Ура, XLR

Ответы [ 2 ]

0 голосов
/ 27 апреля 2010

JAXB не будет генерировать класс для всего, что уже имеет тип, и вам он не нужен.

Если вы демонтируете глобальный элемент, такой как ваш элемент maxLength, JAXB вернет вам JAXBElement, обертывающий тип NumFacet. Как то так:

JAXBElement<?> root = unmarshaller.unmarshal(myStream);
NumFacet value = (NumFacet) root.getValue();

Есть другие методы в JAXBElement, чтобы узнать, каково было имя элемента, и т. Д.

0 голосов
/ 26 апреля 2010

Насколько я помню, jaxb, компилятор схемы xjc создает классы для каждого сложного типа данной схемы. Таким образом, если вы хотите иметь класс MaxLength, вы должны добавить в свою схему объявление сложного типа:

<xs:complexType name="MaxLength"><br> <xs:attribute name="value" type="xs:int"/><br> </xs:complexType><br> <xs:element name="MyMaxLength" type="MaxLength"/>

Теперь вы должны получить класс MaxLength с переменной-членом значение типа integer.

...