如何在生成的JAXB类中构造XSD以使用原始包装而不是原始类型?

时间:2017-08-24 09:17:37

标签: java xml xsd jaxb

我的XSD中有以下属性:

<xs:attribute name="fromFraction" type="xs:float" use="optional" default="0.0"/>

我从这个XSD生成类,并且属性创建为float,然后我不能在没有此类的属性的情况下编组XML(据我所知,在这种情况下,它总是有一些值这将被编组)。

如何在绑定期间更改XSD以创建Float类型,因此我可以在此字段中使用null(因此在编组时可以省略它)?

或许有一种更好的方法可以在结果XML不存在时从该结果中删除该属性?

2 个答案:

答案 0 :(得分:1)

据此:http://reast.net/2009/08/jaxb-generating-primitive-type-getters/ 及其参考:http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/jaxb/vendorCustomizations.html#serializable

你应该把它添加到你的XSD:

<xs:annotation>
   <xs:appinfo>
      <jaxb:globalBindings>
          <xjc:serializable uid="12343"/>
      </jaxb:globalBindings>
   </xs:appinfo>
</xs:annotation>

答案 1 :(得分:1)

我在用于生成类的 binding.xjb 文件中有以下行:

<jxb:globalBindings optionalProperty="primitive"/>

当我删除它时,生成的类包含正确的原始包装器,就像我想要的那样。