Я использую JAXB 2.1.10 от JDK Sun 1.6.0_18:
D:\apps\jdk160_18\bin>xjc.exe - версия xjc версия "JAXB 2.1.10 в JDK 6" Архитектура JavaTM для XML, Связывающего (JAXB) Ссылочная Реализация, (создают JAXB 2.1.10 в JDK 6),
У меня должен быть marshaller JAXB, производят пустой элемент (например.
или
) когда объект JAXB имеет значение пустой строки (""
). Однако вместо того, чтобы делать это, JAXB опускает элемент в целом от его вывода (как будто это где дополнительный элемент).
Мои поиски в Интернете указали, что JAXB должен обычно создавать этот тег, пока Вы устанавливаете поле на непустую пустую строку (т.е. myJAXBObject.setSomeStringField ("");):
Как инстанцировать пустого элемента с JAXB https://jaxb.dev.java.net/tutorial/section_2_2_12_8-No-Value.html#No%20Value
В моем XSD я попытался указать (каждым способом, которым я знаю), что присутствие элемента обязательно, даже если это пусто:
Сгенерированный код похож на это (это - то же для обоих элементов):
@XmlElement(name = "someStringField", required = true)
protected String someStringField;
@XmlElement(name = "someOtherStringField", required = true)
protected String someOtherStringField;
Однако, когда я упорядочиваю следующий объект...
outerElement.setSomeStringField("");
outerElement.setSomeOtherStringField("Value was set");
Я добираюсь:
Value was set
Когда я ожидал:
Value was set
Или:
Value was set
Кто-либо может определить то, что я делаю неправильно?
Спасибо, что обратили наше внимание на эту проблему ( https://bugs.eclipse.org/319028 ). Ошибка исправлена и будет включена в отладочный выпуск EclipseLink 2.1.1. Если вы хотите получить доступ к этому исправлению раньше, вы можете загрузить его каждую ночь, начиная с 8 июля, по адресу:
Apologies. Я ПОДУМАЛ, что использую JAXB из Sun's JDK, но это не так. В моей папке classes/ был остаток jaxb.properties, который был создан JDeveloper'ом, когда я генерировал привязки. На самом деле я использовал JAXB2.0 из EclipseLink/MOXy.
Удаление файла свойств позволило использовать JAXB2.1 и решило мою проблему.