9

我有一个 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;
}
4

2 回答 2

9

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

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;

    ...

}
于 2013-07-24T01:41:05.500 回答
2

我想通了。答案是使用 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>

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

于 2013-07-24T00:47:21.690 回答