Я использую jaxb2-maven-plugin ver 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 Class я получаю boolean бесплатный fild, но мне нужно иметь Boolean. Я не могу редактировать XSD, потому что он является общедоступным. Кто-нибудь знает, как решить эту проблему без изменения схемы?
Причина boolean
типа заключается в том, что вы определили поле " Complimentary
как необязательное, с minOccurs=1
JAXB всегда создает поле с примитивным типом, поскольку оно не может быть нулевым, просто попробуйте использовать minOccurs=0
и вы увидеть разницу.
Чтобы контролировать это поведение, используйте <jxb:globalBindings optionalProperty="wrapper">
в вашем документе привязок.
jaxb2-maven-plugin
версии 1.5 является старой. Обновите до последней версии и посмотрите, есть ли у вас эта проблема.
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.3</version>
</dependency>