JAXB: Пустая строка не производит пустой элемент

Я использую 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

Кто-либо может определить то, что я делаю неправильно?

6
задан Community 23 May 2017 в 10:27
поделиться

2 ответа

Спасибо, что обратили наше внимание на эту проблему ( https://bugs.eclipse.org/319028 ). Ошибка исправлена ​​и будет включена в отладочный выпуск EclipseLink 2.1.1. Если вы хотите получить доступ к этому исправлению раньше, вы можете загрузить его каждую ночь, начиная с 8 июля, по адресу:

1
ответ дан 17 December 2019 в 22:10
поделиться

Apologies. Я ПОДУМАЛ, что использую JAXB из Sun's JDK, но это не так. В моей папке classes/ был остаток jaxb.properties, который был создан JDeveloper'ом, когда я генерировал привязки. На самом деле я использовал JAXB2.0 из EclipseLink/MOXy.

Удаление файла свойств позволило использовать JAXB2.1 и решило мою проблему.

0
ответ дан 17 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: