Поколение 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, превратится в большой десятичный, но в моем случае это нормально. Надеюсь, это поможет кому-то еще.