JAXB编译器将xs:boolean绑定到Java boolean而不是Boolean包装类

时间:2016-09-20 13:57:49

标签: java jaxb jaxb2-maven-plugin

我正在使用jaxb2-maven-plugin ver 1.5在我的项目中从XSD生成Java类。我的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 complimentary fild,但我需要 Boolean 我无法编辑XSD ,因为它是公开的。有没有人知道如何在不改变方案的情况下解决这个问题?

2 个答案:

答案 0 :(得分:1)

boolean类型的原因是,您使用Complimentary将字段minOccurs=1定义为非可选事实,因为JAXB不能使用原始类型来创建该字段null,只需尝试使用minOccurs=0,您就会发现区别。

要控制此行为,请在绑定文档中使用<jxb:globalBindings optionalProperty="wrapper">

答案 1 :(得分:0)

jaxb2-maven-plugin版本1.5已过时。更新到最新版本,看看是否还有这个问题。

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