#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.