Java 转换为零=";“真的”;在解组操作期间设置为null
我从一个服务器接收XML,该服务器的模式将几乎每个元素都指定为:Java 转换为零=";“真的”;在解组操作期间设置为null,java,xml,jaxb,jaxb2,xml-nil,Java,Xml,Jaxb,Jaxb2,Xml Nil,我从一个服务器接收XML,该服务器的模式将几乎每个元素都指定为: <xs:element name="myStringElementName" type="xs:string" nillable="true" minOccurs="0"/> <xs:element name="myIntElementName" type="xs:int" nillable="true" minOccurs="0"/> 应导致我的JAXB对象具有值为null的myIntElementNa
<xs:element name="myStringElementName" type="xs:string" nillable="true" minOccurs="0"/>
<xs:element name="myIntElementName" type="xs:int" nillable="true" minOccurs="0"/>
应导致我的JAXB对象具有值为null的myIntElementName
属性,而不是将nil属性设置为true(或任何类似于这些行的内容)的JAXBElement
对象。我无法控制向我发送使用nillable
属性的XML的系统,因此我需要在收到它时转换它。@xmlement(nillable=true)
您只需在字段/属性上指定@xmlement(nillable=true)
即可获得此行为:
@XmlElement(nillable=true)
private String foo;
从XML架构生成 下面我将演示如果您从XML模式开始,如何生成此映射 XMLSchema(Schema.xsd) 外部绑定文件(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>
生成模型(Foo)
生成的模型将如下所示:
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;
}
}
了解更多信息
<xs:element name="myStringElementName" type="xs:string"
nillable="true" minOccurs="0" />
<?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 -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;
}
}