Question

When I marshal java object using JAXB I am getting below xml element

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

But I want xml as below

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

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

Is there any way to get it?

Was it helpful?

Solution

An attribute will only be marshalled out with an empty String value if the corresponding field/property contains a empty String value. If the value is null the attribute will not be marshalled.

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=""/>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top