2013-07-23 6 views
8

Ich habe eine xsd Annotation, die ich versuche, Marshal in ein Java-Objekt zu bekommen. Ich möchte, dass das Java mit BigDecimal für seinen Wert endet. Was gebe ich in das xsd ein, um es zu machen? Ich verwende eine xjc Ant-TaskJava JaxB Generation, Wie bekomme ich ein BigDecimal von meinem Xsd?

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

Hier ist der relevante xsd -

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

Ich möchte mit dieser für die generierte Klasse am Ende -

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

Antwort

8

A JAXB (JSR-222) Implementierung wird ein java.math.BigDecimal vom decimal Typ (siehe Tabelle 6-1 in der JAXB 2.2-Spezifikation) erzeugen.

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 Anruf

xjc schema.xsd 

Java Model (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; 

    ... 

} 
1

ich dies dachte, aus. Die Antwort ist ein binding.xjb Klasse

Bindung =

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

Ameise zu verwenden -

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

xsd =

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

Das bedeutet als Typ dezimal etwas markiert schaltet in eine große Dezimalzahl, aber in meinem Fall ist das in Ordnung. Hoffe das hilft jemand anderem.

+1

A JAXB Umsetzung wird c reate eine 'java.math.BigDecimal' Eigenschaft für den' xs: decimal' Typ, keine verbindliche Datei erforderlich: http://StackOverflow.com/a/17823855/383861 –

+1

Ich habe das gerade getestet und @BlaiseDoughan ist korrekt. Ich überlegte das mit Sicherheit. Vielen Dank! – spartikus