Jaxb中的int变量用法

时间:2014-05-21 19:50:22

标签: java xml jaxb xsd

我有一个xml元素,它接受一个数字。这是可选的。我创建了JAXB POJO类,并且相同的标记映射到Java中的int变量。现在,由于xml元素是可选的,用户可能根本不设置它,这会将相应的java变量设置为0。   在某些情况下,用户可以设置它并发送0.再次,java变量将设置为0。 我想知道是否有办法以编程方式区分这两种情况。 谢谢

1 个答案:

答案 0 :(得分:0)

简答

要使XML元素可选,必须在其上设置minOccurs="0"属性。

<xs:element name="foo" type="int" minOccurs="0"/>

JAXB会创建一个Integer类型的属性来匹配您的用例。

长答案

XML架构

复杂类型foo有两个int类型的元素。一个是必需的,另一个是可选的(minOccurs="1")。

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/schema" 
    xmlns:tns="http://www.example.org/schema" 
    elementFormDefault="qualified">

    <complexType name="foo">
       <sequence>
           <element name="required" type="int"/>
           <element name="optional" type="int" minOccurs="0"/>
       </sequence>
    </complexType>

</schema>

生成的模型

在生成的模型中,我们看到为所需属性生成了类型int的属性,并为可选属性生成了类型为Integer的属性。

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"required","optional"})
public class Foo {

    protected int required;
    protected Integer optional;

    public int getRequired() {
        return required;
    }

    public void setRequired(int value) {
        this.required = value;
    }

    public Integer getOptional() {
        return optional;
    }

    public void setOptional(Integer value) {
        this.optional = value;
    }

}