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

2

7

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
}
Casmey answered 30/4, 2012 at 5:33 Comment(0)
S
7

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.

Subsistence answered 30/4, 2012 at 5:46 Comment(2)
yeah, it seems like we can do nothing on it.Casmey
Yeah unless you restore to provider APIsSubsistence
V
10

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"/>
Veradi answered 13/11, 2012 at 23:28 Comment(2)
It seems they are sorted alphabetically in Java 6 and in the order of declaration on Java 7 (in both cases using the built-in JDK JAXB provider).Outlandish
Java 7 also seems to take propOrder into account.Outlandish
S
7

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.

Subsistence answered 30/4, 2012 at 5:46 Comment(2)
yeah, it seems like we can do nothing on it.Casmey
Yeah unless you restore to provider APIsSubsistence

© 2022 - 2024 — McMap. All rights reserved.