использование переменной int в Jaxb

1

У меня есть элемент xml, который принимает число. Это необязательно. Я создал классы JJXB POJO, и один и тот же тег сопоставляется с переменной int в Java. Теперь, поскольку элемент xml не является обязательным, пользователь может вообще не устанавливать его, что бы установить соответствующую переменную java равным 0. В некоторых случаях пользователь может установить ее и отправить в 0. Опять же, переменная java будет установлена в 0 Мне было интересно, есть ли способ дифференцировать эти два сценария программным путем. спасибо

Теги:
jaxb
xsd

1 ответ

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;
    }

}
  • 0
    Прости, Блейз. Я думаю, что я не был достаточно ясен. Во-первых, я говорю об одном необязательном теге. Пользователь может установить его или нет. В противном случае он будет установлен в 0 в переменной Java. В случае, если пользователь устанавливает его на 0, он равен 0. Я хочу знать, как их различать при разборе xml. Например, если пользователь не установил, я не буду поднимать тревогу, даже если значение равно 0. Если явно установлено значение 0, я хочу поднять тревогу. Я надеюсь, что я ясно дал понять.
  • 0
    @Aceghn - думаю, я понимаю твой вопрос. Вы можете сделать свойство (или сгенерировать, как я показал выше) Integer, тогда оно будет нулевым, если его нет в документе, и будет иметь значение в противном случае. В Java вы можете рассматривать Integer же, как int . Просто убедитесь, что сначала сделали проверку на ноль.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню