【问题标题】:Java JaxB generation, How do I get a bigDecimal from my xsd?Java JaxB 生成,如何从我的 xsd 中获取 bigDecimal?
【发布时间】:2013-07-23 06:40:57
【问题描述】:

我有一个 xsd 注释,我正试图将 Marshal 转换为 java 对象。我希望 java 以 BigDecimal 结束它的价值。我在 xsd 中输入什么来使它做到这一点?我正在使用一个 xjc 蚂蚁任务

<xjc schema="my.xsd" destdir="generated" header="false" extension="true" />

这里是相关的xsd——

<complexType name="Size">
    <attribute name="height" type="BigDecimal"></attribute> <!-- this is wrong-->
</complexType>

我想为生成的类结束这个 -

public class Size { 
@XmlAttribute(name = "height")
    protected BigDecimal height;
}

【问题讨论】:

    标签: java xml jaxb xsd bigdecimal


    【解决方案1】:

    我想通了。答案是使用 binding.xjb 类

    绑定 =

    <jxb:javaType 
         name="java.math.BigDecimal" 
         xmlType="xs:decimal"/>
    

    蚂蚁-

    <xjc schema="my.xsd" destdir="generated" binding="myBinding.xjb" header="false" extension="true" />
    

    xsd =

    <attribute name="height" type="decimal"></attribute>
    

    这意味着任何标记为十进制类型的东西都会变成一个大十进制,但在我的情况下没关系。希望这对其他人有帮助。

    【讨论】:

    • JAXB 实现将为xs:decimal 类型创建一个java.math.BigDecimal 属性,不需要绑定文件:stackoverflow.com/a/17823855/383861
    • 我刚刚对此进行了测试,@BlaiseDoughan 是正确的。我肯定想多了。谢谢!
    【解决方案2】:

    JAXB (JSR-222) 实现将从 decimal 类型生成 java.math.BigDecimal(参见表 6-1 JAXB 2.2 规范)。

    XML 架构 (schema.xsd)

    <?xml version="1.0" encoding="UTF-8"?>
    <schema 
        xmlns="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.example.org/schema" 
        xmlns:tns="http://www.example.org/schema" 
        elementFormDefault="qualified">
    
        <element name="foo">
            <complexType>
                <sequence>
                    <element name="bar" type="decimal"/>
                </sequence>
            </complexType>
        </element>
    
    </schema>
    

    XJC 通话

    xjc schema.xsd
    

    Java 模型(Foo)

    package org.example.schema;
    
    import java.math.BigDecimal;
    import javax.xml.bind.annotation.*;
    
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {"bar"})
    @XmlRootElement(name = "foo")
    public class Foo {
    
        @XmlElement(required = true)
        protected BigDecimal bar;
    
        ...
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      相关资源
      最近更新 更多