Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I make @XmlAttribute in a special order by using JAXB?

I have XML file which needs 3 attributes in an element. How can make the order of street, zip and city attribute as I wanted?

<address street="Big Street" zip="2012" city="Austin">
</address>
@XmlType(name="Street)
@XmlRootElement(name = "Street")
public class Street {

@XmlAttribute
private String name;

@XmlAttribute
private String type;

    ... set and get method
}
like image 349
Chris Avatar asked Apr 30 '12 05:04

Chris


People also ask

Which annotation is used in JAXB to define the order in which the fields are written in the XML file?

JAXB Annotations The class above contains these annotations: @XmlRootElement: The name of the root XML element is derived from the class name, and we can also specify the name of the root element of the XML using its name attribute. @XmlType: define the order in which the fields are written in the XML file.

What is @XmlAttribute in Java?

Annotation Type XmlAttribute. @Retention(value=RUNTIME) @Target(value={FIELD,METHOD}) public @interface XmlAttribute. Maps a JavaBean property to a XML attribute. Usage.

How does Jaxb read XML?

To read XML, first get the JAXBContext . It is entry point to the JAXB API and provides methods to unmarshal, marshal and validate operations. Now get the Unmarshaller instance from JAXBContext . It's unmarshal() method unmarshal XML data from the specified XML and return the resulting content tree.


2 Answers

Anecdotally, the attributes seem to be in reverse order than they are mentioned in code. In my case, I'm using two variables (name & value) and I had to declare them as:

// The inverse order of name & value seems to make them render in XML in name/value order
@XmlAttribute
protected String value;
@XmlAttribute
protected String name;

When the XML is generated, it results in the following:

<attribute name="nameValue" value="valueValue"/>
like image 125
humanity Avatar answered Sep 23 '22 15:09

humanity


You can use @XmlAccessorOrder(has predefined values) or @XmlType(Only works for properties) to govern the ordering.

Samples

Edit :

For custom ordering JAXB specification doesnt provide anything, but you can do if your JAXB provider provides you some features.

Found this link where it speaks about ordering using EclipseLink JAXB.

like image 43
mprabhat Avatar answered Sep 22 '22 15:09

mprabhat