如果xml文件中缺少元素,如何在java中通过jaxb解组为该元素设置默认值

如果xml文件中缺少元素,如何在java中通过jaxb解组为该元素设置默认值,java,xml,xsd,jaxb,unmarshalling,Java,Xml,Xsd,Jaxb,Unmarshalling,问题是我想为input.xml文件中缺少的“name”元素设置一个默认值。我如何通过jaxb实现这一点?我不想通过java模型实现。有没有办法通过shema或jaxb获得它。 代码如下: 1。customer.xsd <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="customer"> <xs:complexType>

问题是我想为input.xml文件中缺少的“name”元素设置一个默认值。我如何通过jaxb实现这一点?我不想通过java模型实现。有没有办法通过shema或jaxb获得它。 代码如下:

1。customer.xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="customer">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="stringMaxSize5" minOccurs="0" default="ss"/>
                <xs:element name="phone-number" type="xs:integer" minOccurs="0" default="200" />
             </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="stringMaxSize5">
        <xs:restriction base="xs:string">
            <xs:maxLength value="5"/>
        </xs:restriction>
    </xs:simpleType>

</xs:schema> 
3。input.xml

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "name",
    "phoneNumber"
})
@XmlRootElement(name = "customer")
public class Customer {

    @XmlElement(defaultValue = "ss")
    protected String name;
    @XmlElement(name = "phone-number", defaultValue = "200")
    protected BigInteger phoneNumber;
    public String getName() {
        return name;
    }
    public void setName(String value) {
        this.name = value;
    }
    public BigInteger getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(BigInteger value) {
        this.phoneNumber = value;
    }
}
<customer>

</customer>
通过运行此命令,我将获得名称的空值,如果我使用下面的input.xml文件和“name”元素,那么我将获得名称字段的默认值

input.xml file:
<customer><name/></customer>
input.xml文件:

那么,如何通过jaxb为缺少的元素设置默认值呢?

原因是您的XML文档缺少元素。见

当类具有默认值的元素属性时,如果您正在阅读的文档缺少该元素,则解组器不会使用默认值填充该字段。相反,当元素存在但内容缺少时,解组器会填充该字段

请尝试此输入文档

<customer>
    <name/>
    <phone-number/>
</customer>


< /代码>是的,这样我得到了元素的默认值,但是有一个用例,我不想指定空白元素,甚至我想要设置默认值。那么有没有办法做到这一点呢?根据JAXB文档是不可能的。在这种情况下,您可以在Java代码
String name=“default”中设置默认值
<customer>
    <name/>
    <phone-number/>
</customer>