I've created this annotation:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface XMLSequence {
String[] value();
}
This is example of use (write before class definition):
@XMLSequence({
"accountIds",
"addresses",
"birthDate",
"contact",
"name",
"status",
})
Then I've overrided FieldKeySorter :
public class SequenceFieldKeySorter implements FieldKeySorter {
@Override
public Map sort(final Class type, final Map keyedByFieldKey) {
Annotation sequence = type.getAnnotation(XMLSequence.class);
if (sequence != null) {
final String[] fieldsOrder = ((XMLSequence) sequence).value();
Map result = new OrderRetainingMap();
Set<Map.Entry<FieldKey, Field>> fields = keyedByFieldKey.entrySet();
for (String fieldName : fieldsOrder) {
if (fieldName != null) {
for (Map.Entry<FieldKey, Field> fieldEntry : fields) {
if
(fieldName.equals(fieldEntry.getKey().getFieldName())) {
result.put(fieldEntry.getKey(),
fieldEntry.getValue());
}
}
}
}
return result;
} else {
return keyedByFieldKey;
}
}
}
And this is how I've instanced XStream:
XStream x = new XStream(new PureJavaReflectionProvider(new
FieldDictionary(new SequenceFieldKeySorter())));
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email