2013-07-23 6 views
8

私はJavaオブジェクトにマーシャリングするためにxsdアノテーションを取得しようとしています。私はその値のためにBigDecimalで終わるようにjavaをしたいと思います。 xsdにこれを行うには何を入力しますか?私はXJC AntタスクここでJava JaxB generation、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

JAXB (JSR-222)実装では、( JAXB 2.2仕様の表6-1を参照)decimalタイプからjava.math.BigDecimalを生成します。

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

私はこれを考え出しでる。

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

のxsd =

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

これはdecimal型としてマークされたものが有効になります意味 - 答えは

結合=

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

アリがbinding.xjbクラスを使用することです大きな小数になりますが、私の場合は大丈夫です。これが他の人に役立つことを願っています

+1

A JAXB実装意志C 'xs:decimal'型のための' java.math.BigDecimal'プロパティを再作成してください。バインディングファイルは必要ありません:http://stackoverflow.com/a/17823855/383861 –

+1

これを試してみましたが、@BlaiseDoughanは正しいです。私は確かにこれを考えすぎた。ありがとう! – spartikus

関連する問題