Jas*_*per 6 java xsd jaxb xjc cxf-xjc-plugin
所以这是我的问题.我给了一个我生成的XML文件应符合的XSD.使用org.apache.cxf.cxf-xjc-pluginmaven插件和外部绑定文件,我生成源代码.但是当我在尝试编组我的对象时,生成的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>
Run Code Online (Sandbox Code Playgroud)
生成的XML片段如下所示:
<amount>109.5</amount>
...
<rate>10.25</rate>
Run Code Online (Sandbox Code Playgroud)
虽然我期待它是:
<amount>109.50</amount>
...
<rate>10.25000</rate>
Run Code Online (Sandbox Code Playgroud)
有没有办法以干净的方式解决这个问题?
我不想为每一个写几个适配器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>
Run Code Online (Sandbox Code Playgroud)
欲获得更多信息