XML в Java, как показать нулевой бин Java-атрибута @XmlElement в виде пустого значения в XML (решение найдено)

Я работаю в проекте. Есть Java-бин с некоторыми свойствами. Я помечаю каждый атрибут тегом @XmlElement, например так:

@XmlElement(name="id", nillable = true)
private String test;

Я поставил этот "nillable", он показывает мне тег, даже когда NULL истина, но он показывает мне сообщение в XML, когда NULL

<id xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

Но когда он нулевой, я хочу показать пустое значение только с тегами, как это

<id></id>

И я не знаю, как это сделать. Я искал, но я не нашел как, вот почему я спрашиваю.

И еще 1 вещь, я могу сгенерировать XML без атрибутов? Поскольку я - мой XML, я должен генерировать пустые теги aloot, внутри которых нет ничего, только теги, и я не хочу выделять атрибуты, если я не буду использовать это просто для показа тега.

Спасибо!

Импорт и некоторые настройки, которые я использую

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="test")

---------Решение----------

Привет, ребята, я нашел решение. Хочу поделиться, если кто-то застрял в той же проблеме. Или объявить свойство класса пустым, например String personName = "";

Им не нужно создавать геттеры и сеттеры, если вы не будете изменять это значение и просто хотите, чтобы теги применялись в XML, но были пустыми.

Примечание. Для этой работы вы должны использовать @XmlAccessorType(XmlAccessType.FIELD) в своем классе. Спасибо всем. до свидания

1 ответ

Решение

Есть два способа представить null значение в XML.

Одним из вариантов является описанный xsi:nil, Он просто добавляет пустой тег для вашего атрибута и аннотирует его как содержащее нулевое значение. Эта форма генерируется JAXB, если вы аннотируете свои атрибуты nillable = true,

Обратите внимание, что пустой тег не совпадает с тегом с пустой строкой, но об этом позже.

Другой вариант - вообще не представлять этот атрибут. Там просто не будет тег для атрибута в XML. JAXB использует этот подход по умолчанию, если вы не аннотируете свой Java-код nillable = true но атрибуты все равно будут иметь null ценности.

И это все.

Теперь о том, чего вы хотите достичь. Rendering <id></id> в основном означает, что у вас есть id атрибут, который содержит пустую строку. Хотя вы, вероятно, могли бы найти язык, когда это эквивалентно null значение (например, Oracle PL/SQL), это явно не эквивалент null значение в Java.

Более того, если id моделируется как long или же int (или любой не-String тип) в вашем Java Bean, парсер не сможет десериализовать такой XML обратно в экземпляр компонента.

Другие вопросы по тегам