@XmlElement(的nillable =真)
你只需要在你的字段/屬性指定@XmlElement(nillable=true)
得到這個行爲:
@XmlElement(nillable=true)
private String foo;
生成從XML模式
下面我將演示如何生成此映射從XML模式開始。
XML架構(schema.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="foo">
<xs:complexType>
<xs:sequence>
<xs:element name="myStringElementName" type="xs:string"
nillable="true" minOccurs="0" />
<xs:element name="myIntElementName" type="xs:int"
nillable="true" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
爲什麼你JAXBElement
在模型生成JAXBElement
類型的屬性類型的屬性,因爲你有一個nillable元素,這是minOccurs="0"
。 JAXBElement
的使用允許模型區分缺少的元素(屬性爲null)和存在與nil="true"
(帶有nil標誌的JAXBElement)的元素。
<xs:element name="myStringElementName" type="xs:string"
nillable="true" minOccurs="0" />
外部綁定文件(binding.xml)
外部綁定文件可以被指定來告訴JAXB實現不產生JAXBElement
類型的任何屬性。請注意,這將使JAXB無法繞過所有XML文檔。
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
<jaxb:bindings>
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
</jaxb:bindings>
XJC呼叫
下面是如何從XJC呼叫
xjc -b binding.xml schema.xsd
生成的模型(美孚)利用一個外部綁定文件的示例
生成的模型看起來像下面:
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"myStringElementName",
"myIntElementName"
})
@XmlRootElement(name = "foo")
public class Foo {
@XmlElement(nillable = true)
protected String myStringElementName;
@XmlElement(nillable = true)
protected Integer myIntElementName;
public String getMyStringElementName() {
return myStringElementName;
}
public void setMyStringElementName(String value) {
this.myStringElementName = value;
}
public Integer getMyIntElementName() {
return myIntElementName;
}
public void setMyIntElementName(Integer value) {
this.myIntElementName = value;
}
}
更多信息
有沒有人告訴過你最近說你真棒?還有一個問題,如果你不介意。我是否應該總是在我的JAXB類中註釋該屬性,而不是關聯的getter/setter方法? –
註解吸氣(或二載)通常是最安全的事情。例如,如果您對JAXB和JPA使用相同的模型,那麼JPA實現會修改字節代碼以支持調用getter時觸發的延遲加載。欲瞭解更多信息,請參閱:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html –