【问题标题】:JAXB compiler is binding xs:boolean to Java boolean instead of Boolean wrapper classJAXB 编译器将 xs:boolean 绑定到 Java boolean 而不是 Boolean 包装类
【发布时间】:2016-09-20 13:57:48
【问题描述】:

我在我的项目中使用 jaxb2-maven-plugin 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 类后,我收到 boolean compatible 字段,但我需要 Boolean我无法编辑 XSD,因为它是公开的。有谁知道如何在不改变方案的情况下解决这个问题?

【问题讨论】:

    标签: java jaxb jaxb2-maven-plugin


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      boolean 类型的原因是,您将字段 Complimentary 定义为非可选的,而 minOccurs=1 JAXB 始终使用原始类型创建字段,因为它不能为空,请尝试使用minOccurs=0 你会看到不同。

      要控制此行为,请在绑定文档中使用 &lt;jxb:globalBindings optionalProperty="wrapper"&gt;

      【讨论】:

        猜你喜欢
        • 2012-10-13
        • 2011-08-08
        • 1970-01-01
        • 2013-09-18
        • 2018-08-16
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 2017-05-05
        相关资源
        最近更新 更多