Optional JAXB xml attribute when sorting

When I marshal a java object using JAXB, I get below the xml element

<error line="12" column="" message="test" /> 

But I want xml as below

 <error line="12" message="test" /> 

If the column value is empty, I need to get xml as shown above, otherwise I need to get the column attribute in the element.

Is there any way to get it?

+4
source share
1 answer

The attribute will be selected only with an empty String value, if the corresponding field / property contains an empty String value. If null, the attribute will not be sorted.

Root

 package forum13218462; import javax.xml.bind.annotation.*; @XmlRootElement public class Root { @XmlAttribute String attributeNull; @XmlAttribute String attributeEmpty; @XmlAttribute(required=true) String attributeNullRequired; } 

Demo

 package forum13218462; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Root root = new Root(); root.attributeNull = null; root.attributeEmpty = ""; root.attributeNullRequired = null; Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(root, System.out); } } 

Output

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <root attributeEmpty=""/> 
+6
source

Source: https://habr.com/ru/post/1443938/


All Articles