2013-07-23 18 views
8

Mam adnotację xsd, którą próbuję dostać do Marshal do obiektu java. Chciałbym, aby java skończyła z BigDecimalem ze względu na jego wartość. Co mam wprowadzić w xsd, aby to zrobić? Używam XJC ant zadaniaGenerowanie Java JaxB, Jak mogę uzyskać bigDecimal z mojego xsd?

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

Oto istotne xsd -

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

chciałbym skończyć z tym do wygenerowanej klasy -

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

Odpowiedz

8

implementacja JAXB (JSR-222) wygeneruje java.math.BigDecimal od rodzaju decimal (patrz tabela 6-1 w 2,2 opisie JAXB).

XML Schema (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 połączeń

xjc schema.xsd 

Java model (Foo) wdrożeniowe

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; 

    ... 

} 
1

wyobraziłem to na zewnątrz. Odpowiedź jest użycie klasy binding.xjb

wiązania =

<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> 

To nic nie znaczy oznaczone jako typ przecinku zmieni do dużego dziesiętnego, ale w moim przypadku to jest w porządku. Mam nadzieję, że to pomoże komuś innemu.

+1

JAXB will c potwierdź właściwość 'java.math.BigDecimal' dla typu' xs: decimal', nie wymaga pliku powiązania: http://stackoverflow.com/a/17823855/383861 –

+1

Właśnie to przetestowałem i @BlaiseDoughan jest poprawne. Przemyślałem to na pewno. Dzięki! – spartikus

Powiązane problemy