所以这是我的问题。给了我生成的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>
想要查询更多的信息
问题内容: 我正在构建一系列链接的类,我希望它们的实例能够编组到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,无法找出原因。 问题答案: 您需要使用