У меня есть элемент xml, который принимает число. Это необязательно. Я создал классы JJXB POJO, и один и тот же тег сопоставляется с переменной int в Java. Теперь, поскольку элемент xml не является обязательным, пользователь может вообще не устанавливать его, что бы установить соответствующую переменную java равным 0. В некоторых случаях пользователь может установить ее и отправить в 0. Опять же, переменная java будет установлена в 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;
}
}
Integer
же, какint
. Просто убедитесь, что сначала сделали проверку на ноль.