2013-07-23 56 views
8

Tôi có một chú giải xsd mà tôi đang cố gắng để đến Marshal vào một đối tượng java. Tôi muốn java kết thúc với BigDecimal cho giá trị của nó. Tôi phải nhập gì vào xsd để làm điều này? Tôi đang sử dụng một lệnh ant XJCThế hệ Java JaxB, Làm thế nào để có được một bigDecimal từ xsd của tôi?

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

Đây là xsd liên quan -

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

Tôi muốn kết thúc với điều này cho các lớp được tạo ra -

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

Trả lời

8

A JAXB (JSR-222) triển khai sẽ tạo ra một java.math.BigDecimal từ loại decimal (xem Bảng 6-1 trong đặc điểm 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 Gọi

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

I figured này ngoài. Câu trả lời là sử dụng một lớp binding.xjb

ràng buộc

=

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

ant -

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

xsd =

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

này có nghĩa là bất cứ điều gì đánh dấu là loại thập phân sẽ biến thành một số thập phân lớn nhưng trong trường hợp của tôi là ok. Hy vọng điều này sẽ giúp người khác.

+1

Một JAXB thực hiện sẽ c reate một thuộc tính 'java.math.BigDecimal' cho kiểu' xs: decimal', không có tệp ràng buộc nào được yêu cầu: http://stackoverflow.com/a/17823855/383861 –

+1

Tôi vừa thử nghiệm điều này và @BlaiseDoughan là đúng. Tôi đã nghĩ quá rõ điều này. Cảm ơn! – spartikus