2013-07-23 12 views
8

Marshal'a bir java nesnesine gitmeye çalıştığım xsd ek açıklamalarım var. Java'nın değeri için BigDecimal ile bitmesini istiyorum. Bunu yapmak için xsd'ye ne girerim? Bir XJC karınca görevi İşteJava JaxB jenerasyonu, xsd sayfamdan bigDecimal'i nasıl alabilirim?

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

kullanıyorum alakalı xsd olduğunu -

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

ben oluşturulan sınıf için bu ile bitirmek istiyorum -

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

cevap

8

bir JAXB (JSR-222) uygulaması ( JAXB 2.2 tarifnamede Tablo 6-1) decimal türünden bir java.math.BigDecimal üretecektir.

XML Şeması (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 Çağrı

xjc schema.xsd 

Java Modeli (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

Bunu anladım dışarı. Bu şey tip ondalık olarak işaretlenmiş anlamına

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

Xsd =

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

dönecek - cevap bir binding.xjb sınıf bağlanma

=

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

karınca kullanmaktır büyük bir ondalık içine ama benim durumumda bu tamam. Umarım bu bir başkasına yardım eder.

+1

bir JAXB uygulama olacak c 'xs: decimal' türü için 'java.math.BigDecimal' özelliğini yeniden girin, gerekli hiçbir bağlayıcı dosya yok: http://stackoverflow.com/a/17823855/383861 –

+1

Sadece bunu test ettim ve @BlaiseDoughan doğru. Bunu kesinlikle düşündüm. Teşekkürler! – spartikus