im working in a project. A have a Java Bean with some properties. I mark each attribute with the Tag @XmlElement, like this:
@XmlElement(name="id", nillable = true)
private String test;
I put this "nillable", it shows me the tag, even when is null true but it shows me a message in xml when is null
<id xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
But when it's null i want to show a empty value with the tags only, like this
<id></id>
And i don't know how to do this. I searched but i didn't found how, thats why i'm asking.
And more 1 Thing, can i generate XML that's with no attributes ? Because im My XML i have to generate aloot blank tags, with nothing inside, just the tags and i dont wanna make aloot of atributes if i wont use this just to show the Tag
Thanks !
The imports and some config that i using
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")
---------Solution----------
Hi, guys, i found a solution. I Want to share if someone got stuck in same problem. Ou declare the property of the Class as empty, something like String personName = "";
Them you don't need to create the Getters and Setters if you wont change this value and just want the tag appers in XML but empty.
Note: For this work you have to use the @XmlAccessorType(XmlAccessType.FIELD) in your class. Thanks to all. Bye
There are two ways to represent a
null
value in XML.One option is the described
xsi:nil
. It just adds an empty tag for your attribute and annotates it as holding null value. This form is generated by JAXB if you annotate your attributes withnillable = true
.Note that en empty tag is not the same as a tag with empty string - but more on that later.
Another option is not to represent that attribute at all. There will just be no tag for the attribute in the XML. JAXB uses this approach by default if you don't annotate your Java code with
nillable = true
but the attributes will still havenull
values.And that's it.
Now, to what you want to achieve. Rendering
<id></id>
basically means that you have anid
attribute that holds an empty string. Although you could probably find a language when this is equivalent tonull
value (Oracle's PL/SQL for instance), it's obviously not an equivalent ofnull
value in Java.Moreover, if the
id
is modeled aslong
orint
(or any non-String type) in your Java Bean, the parser will fail to de-serialize such XML back into the bean instance.