2013-07-23 36 views
8

我有一個xsd註釋,我試圖把元帥變成一個java對象。我希望Java以BigDecimal的價值結束。我在xsd中輸入什麼信息才能做到這一點?我使用的是XJC Ant任務Java JaxB代,我如何從我的xsd中獲得bigDecimal?

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

回答

8

A JAXB (JSR-222)實現將從decimal類型生成java.math.BigDecimal(請參閱 JAXB 2.2規範中的表6-1)。

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模型(美孚)

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

我想通了這出。答案是使用binding.xjb類

綁定=

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

螞蟻 -

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

XSD =

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

這意味着什麼標記類型小數會變成到一個很大的小數,但在我的情況下,這是沒問題的。希望這可以幫助別人。

+1

一個JAXB實現將Ç爲'xs:decimal'類型創建'java.math.BigDecimal'屬性,不需要綁定文件:http://stackoverflow.com/a/17823855/383861 –

+1

我剛剛測試過這個,@BlaiseDoughan是正確的。我肯定過分考慮了這一點。謝謝! – spartikus