当前位置: 首页 > 面试题库 >

JAXB使用fractionDigits为BigDecimal编组

轩辕炎彬
2023-03-14
问题内容

所以这是我的问题。给了我生成的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>

生成的XML片段如下所示:

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

当我期望它是:

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

有没有一种方法可以彻底解决此问题?

我不想为每一个写几个适配器totalDigitsfractionDigits组合。由于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


 类似资料:
  • 问题内容: 我正在构建一系列链接的类,我希望它们的实例能够编组到XML,以便可以将它们保存到文件中并在以后再次读取。 目前,我正在使用以下代码作为测试用例: XML输出为: 元素为空是否有原因?我希望它包含日期(即)的字符串表示形式。为此,我是否需要编写自己的代码? 输出为: 问题答案: 您将必须创建一个这样的: 并使用 另请参阅是否要在程序包级别定义适配器。

  • 问题内容: 我正在尝试创建一个非常简单的REST服务器。我只是有一个测试方法,它将返回字符串列表。这是代码: 它给出以下错误: 我希望JAXB对诸如String,Integer等简单类型具有默认设置。我想不是。这是我的想象: 使这种方法最简单的方法是什么? 问题答案: 我使用@LiorH的示例并将其扩展为: 注意,它使用泛型,因此您可以将其与String之外的其他类一起使用。现在,应用程序代码很简

  • 问题内容: 我在代码中遇到问题。 当我在本地(http:// localhost:8080 / home / rest / parameter / )上运行应用程序时,出现以下错误。我的主要要求是在xml上的UI上显示所有信息。 org.jboss.resteasy.spi.UnhandledException:com.sun.xml.bind.v2.runtime.IllegalAnnotati

  • 有没有可能创建jaxb编组器,它可以自动将数字签名添加到xml内容中。 例如,如果我有一个定义为: 我的xml由marshaller生成,看起来像: 我希望它看起来像: 我希望有办法通过马歇尔做到这一点?如果没有,也许还有其他简单的方法来签署xml? 提前致谢

  • 这是我的xml,需要把它转换成Java。我使用了jaxb 并抛出以下异常javax.xml.bind.unmarshalException:意外元素(URI:“http://www.ae.com/event/load”,local:“order”)。需要的元素为<{}LM:order>

  • 问题内容: 我们正在整理来自http://xmlgw.companieshouse.gov.uk/的回复。这是发送给马歇尔的文本: CoSearchItem的模型如下: NameSearch模型具有以下结构: 该软件包具有以下注释: 解组从第一完成提取从一个更大的,内部的产品清单。但是,当我们解析xml时,CoSearchItem中的所有字段都设置为null,无法找出原因。 问题答案: 您需要使用