How about implementing a custom converter?
class FlightsConverter implements Converter {
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(FlightsPojo.class);
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
FlightsPojo flightsPojo = new FlightsPojo();
flightsPojo.setFlights(new ArrayList<FlightPojo>());
while (reader.hasMoreChildren()) {
reader.moveDown();
FlightPojo flightPojo = (FlightPojo) context.convertAnother(flightsPojo, FlightPojo.class);
flightsPojo.getFlights().add(flightPojo);
System.out.println(reader.getValue());
reader.moveUp();
}
return flightsPojo;
}
@Override
public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
// todo...
}
}
And hook it in like so:
XStream xstream = new XStream();
xstream.registerConverter(new FlightsConverter());
xstream.alias("airport", AirportPojo.class);
xstream.alias("flights", FlightsPojo.class);
xstream.alias("flight", FlightPojo.class);
xstream.useAttributeFor(AirportPojo.class, "flights");
AirportPojo airportPojo = (AirportPojo) xstream.fromXML(xml);
Hope this helps ;)