В чем разница между и null в JAXB?

#java #web-services

#java #веб-сервисы

Вопрос:

Я создал веб-сервисное приложение Java, которое использует JAXB. Когда я тестирую свое приложение с помощью SoapUI и отправляю сообщение SOAP like <foo></foo> , оно преобразуется в 0 , но если <foo> в моем сообщении SOAP нет тега, оно преобразуется в null . Почему <foo></foo> не преобразуется в null ? Как я могу это изменить?

 @WebMethod
public void test(Integer foo) {
    System.out.print(foo);
}
  

Ответ №1:

null обычно указывает «неизвестно». Поскольку foo отсутствует, о нем нет абсолютно НИКАКОЙ информации. Вы не можете назначить значение по умолчанию 0, потому что это может быть абсолютно неправильным / катастрофическим. Все, что вы можете сделать, это сказать «Я не знаю», что сводится к null . С другой стороны, <foo></foo> означает, что foo присутствует и является пустым, что обычно сводится к a 0 .

Ответ №2:

Если вы используете JAXB 2.2, вы можете указать @XmlElement(nillable=true) аннотацию на уровне параметров, чтобы XML был представлен как xsi:nil="true" .

 @WebMethod
public void test(@XmlElement(nillable=true) Integer foo) {
    System.out.print(foo);
}
  

Комментарии:

1. Я использую JAXB2.1. Если я добавлю @XmlElement, как вы мне сказали, появится ошибка компиляции.

2. @Chris — Возможность устанавливать @XmlElement аннотацию на уровне параметров была введена в JAXB 2.2.