编程语言
首页 > 编程语言> > java – 使用fractionDigits对BigDecimal进行JAXB编组

java – 使用fractionDigits对BigDecimal进行JAXB编组

作者:互联网

所以这是我的问题.我给了一个我生成的XML文件应符合的XSD.使用org.apache.cxf.cxf-xjc-plugin maven插件和外部绑定文件生成源代码.但是当我在尝试编组我的对象时,生成的XML不符合我的要求.

我的XSD包含以下内容:

<xsd:element maxOccurs="1" minOccurs="0" name="amount">
  <xsd:simpleType>
    <xsd:restriction base="xsd:decimal">
      <xsd:totalDigits value="13" />
      <xsd:fractionDigits value="2" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>
...
<xsd:element maxOccurs="1" minOccurs="0" name="rate">
  <xsd:simpleType>
    <xsd:restriction base="xsd:decimal">
      <xsd:totalDigits value="8" />
      <xsd:fractionDigits value="5" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>

生成的XML片段如下所示:

<amount>109.5</amount>
...
<rate>10.25</rate>

虽然我期待它是:

<amount>109.50</amount>
...
<rate>10.25000</rate>

有没有办法以干净的方式解决这个问题?

我不希望为每个totalDigits,fractionDigits组合编写几个适配器.由于XSD可能会发生变化,因此我希望保持生成的源代码不变.

解决方法:

您需要在此用例中使用XmlAdapter.下面是一个示例绑定文件,可帮助您生成它们.该逻辑将包含在DecimalFormatter类中,该类包含所有不同所需格式的方法.

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">
    <jxb:bindings schemaLocation="schema.xsd">
        <jxb:bindings node="//xs:element[@name='amount']">
            <jxb:property>
                <jxb:baseType>
                    <jxb:javaType name="java.math.BigDecimal"
                        parseMethod="org.example.DecimalFormatter.parseDecimal"
                        printMethod="org.example.DecimalFormatter.printDecimal_2Places" />
                </jxb:baseType>
            </jxb:property>
        </jxb:bindings>
        <jxb:bindings node="//xs:element[@name='rate']">
            <jxb:property>
                <jxb:baseType>
                    <jxb:javaType name="java.math.BigDecimal"
                        parseMethod="org.example.DecimalFormatter.parseDecimal"
                        printMethod="org.example.DecimalFormatter.printDecimal_5Places" />
                </jxb:baseType>
            </jxb:property>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

欲获得更多信息

> http://blog.bdoughan.com/2011/08/xml-schema-to-java-generating.html

标签:xjc,java,jaxb,xsd,cxf-xjc-plugin
来源: https://codeday.me/bug/20191008/1870734.html