Компилятор JAXB привязывает xs:boolean к логическому Java вместо логического класса-оболочки

Я использую jaxb2-maven-plugin версии 1.5 для создания классов Java из XSD в моем проекте. Мой XSD выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ClientRQ">
    <xs:complexType>
      <xs:sequence>	  
        <xs:element type="xs:string" name="ClientID" minOccurs="1" maxOccurs="1"/>
        <xs:element type="xs:boolean" name="Complimentary" minOccurs="1" maxOccurs="1"/> 
      </xs:sequence>
      <xs:attribute type="xs:string" name="Version"/>
      <xs:attribute type="xs:dateTime" name="TimeStamp"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

После десериализации в класс Java я получаю булевское дополнительное поле, но мне нужно иметь логическое значение. Я не могу редактировать XSD, потому что он общедоступен. Кто-нибудь знает, как решить эту проблему, не меняя схему?


person tarasg    schedule 20.09.2016    source источник


Ответы (2)


jaxb2-maven-plugin версия 1.5 устарела. Обновите до последней версии и посмотрите, есть ли у вас эта проблема.

<dependency>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxb2-maven-plugin</artifactId>
    <version>2.3</version>
</dependency>
person ulab    schedule 22.09.2016

Причина типа boolean заключается в том, что вы определили поле Complimentary как необязательное, с minOccurs=1 JAXB всегда создает поле с примитивным типом, поскольку оно не может быть нулевым, просто попробуйте использовать minOccurs=0, и вы увидите разницу.

Чтобы управлять этим поведением, используйте <jxb:globalBindings optionalProperty="wrapper"> в документе привязок.

person buræquete    schedule 02.08.2018