我使用XSD模式與元素數據類型double
這樣的:需要可爲空的雙值
<xsd:element name="value" type="xsd:double"/>
我使用JAXB unmarschaller與適當的對象和屬性創建一個Java類。結果是這樣的:
protected double value;
現在,XML數據能夠發送空值的元素,但我在適應XSD架構的數據類型Double.class位置我不是。是否有可能覆蓋java類中的屬性?
我使用XSD模式與元素數據類型double
這樣的:需要可爲空的雙值
<xsd:element name="value" type="xsd:double"/>
我使用JAXB unmarschaller與適當的對象和屬性創建一個Java類。結果是這樣的:
protected double value;
現在,XML數據能夠發送空值的元素,但我在適應XSD架構的數據類型Double.class位置我不是。是否有可能覆蓋java類中的屬性?
如果您不能修改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;
}
}
如果的nillable元素髮送模式應該重新y爲:
<xsd:element name="value" type="xsd:double" nillable="true" />
然後JAXB應該使用Double
代替double
。
感謝您的信息。我想,我必須和客戶談談這件事;) –