2011-10-28 41 views
4

我使用XSD模式與元素數據類型double這樣的:需要可爲空的雙值

<xsd:element name="value" type="xsd:double"/> 

我使用JAXB unmarschaller與適當的對象和屬性創建一個Java類。結果是這樣的:

protected double value; 

現在,XML數據能夠發送空值的元素,但我在適應XSD架構的數據類型Double.class位置我不是。是否有可能覆蓋java類中的屬性?

回答

1

如果您不能修改XML架構,使其價值元素的nillable,那麼你可以做一個JAXB外部綁定文件中的以下內容:

外部綁定文件(binding.xml)

你可以使用一個外部綁定文件類似如下:

<jaxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    jaxb:extensionBindingPrefixes="xjc" 
    version="2.1"> 
    <jaxb:bindings schemaLocation="double.xsd"> 
     <jaxb:bindings node="//xs:element[@name='value']"> 
      <jaxb:property> 
       <jaxb:baseType name="java.lang.Double"/> 
      </jaxb:property> 
     </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

XML模式 - double.xsd

以上綁定文件適用於XML模式,看起來像下面這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="value" type="xs:double"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

XJC呼叫

xjc -d out -b binding.xml double.xsd 

生成

package generated; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = {"value"}) 
@XmlRootElement(name = "Root") 
public class Root { 

    @XmlElement(required = true, type = Double.class) 
    protected Double value; 

    public Double getValue() { 
     return value; 
    } 

    public void setValue(Double value) { 
     this.value = value; 
    } 

} 
1

如果的nillable元素髮送模式應該重新y爲:

<xsd:element name="value" type="xsd:double" nillable="true" /> 

然後JAXB應該使用Double代替double

+0

感謝您的信息。我想,我必須和客戶談談這件事;) –