2013-07-23 15 views
8

Ho un'annotazione xsd che sto cercando di raggiungere Marshal in un oggetto java. Vorrei che java finisse con BigDecimal per il suo valore. Cosa devo inserire in xsd per farlo fare? Sto usando un compito formica xjcGenerazione Java JaxB, Come ottengo un bigDecimal dal mio xsd?

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

Ecco l'rilevante XSD -

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

Vorrei finire con questo per la classe generata -

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

risposta

8

Un JAXB (JSR-222) implementazione genererà un java.math.BigDecimal dal tipo decimal (vedi Tabella 6-1 nella specifica JAXB 2.2).

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

xjc schema.xsd 

Java Model (Foo) implementazione

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

ho pensato che questo su. La risposta è quella di utilizzare una classe binding.xjb

vincolante =

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

formica -

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

xsd =

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

Questo significa qualcosa contrassegnato come tipo decimale si accende in un grande decimale, ma nel mio caso va bene. Spero che questo aiuti qualcun altro.

+1

Un JAXB volontà c reate una proprietà 'java.math.BigDecimal' per il tipo' xs: decimal', nessun file obbligatorio richiesto: http://stackoverflow.com/a/17823855/383861 –

+1

Ho appena provato questo e @BlaiseDoughan è corretto. Ho pensato troppo a questo. Grazie! – spartikus

Problemi correlati