Поколение Java JaxB, как получить bigDecimal из моего xsd?

у меня есть xsd-аннотация, которую я пытаюсь Маршалировать в объект 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;
}

2 ответов


A JAXB (JSR-222) реализация будет генерировать java.math.BigDecimal С decimal тип (см. таблицу 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;

    ...

}

я понял это. Ответ заключается в использовании привязки.xjb класс

привязка =

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

ant -

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

xsd =

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

это означает, что все, помеченное как тип decimal, превратится в большой десятичный, но в моем случае это нормально. Надеюсь, это поможет кому-то еще.