Saudações,
Eu estou usando o xStream para serializar objectos , esses objectos são initializados pelo iBatis.
Alguns desses objectos contêm campos do tipo de List , exemplo Eliminei os getters e setters para poupar espaçopublic class Person {
private String name;
private String email;
private int age;
private List<Address> addresses;
}
O seguinte codigo funciona sem problemas
Person hugo = new Person();
Address address1 = new Address();
Address address2 = new Address();
List<Address> addresses = new ArrayList<Address>();
addresses.add(address1);
addresses.add(address2);
XStream xstream = new XStream();
String xml = xstream.toXML(hugo);
Mas se o campo addresses for uma lista sincronizada ...
List<Adress> address = Collections.synchronizedList(new ArrayList<Address>());
O xStream da o seguinte erro
[color=red]Exception in thread "main" com.thoughtworks.xstream.converters.ConversionException: Could not call java.util.Collections$SynchronizedList.writeObject() : Cannot reference implicit element
---- Debugging information ----
implicit-element : [domain.Address@97a560, domain.Address@1ea5671]
referencing-element : /list/domain.Person/addresses/java.util.Collections_-SynchronizedCollection/default/mutex
-------------------------------
message : Could not call java.util.Collections$SynchronizedList.writeObject()
cause-exception : com.thoughtworks.xstream.core.AbstractReferenceMarshaller$ReferencedImplicitElementException
cause-message : Cannot reference implicit element
[/color]
Pesquisando , descobri que há um bug no xStream que não permite que Collections sincronizadas sejam serializadas, o problema é que o campo addresses é setado pelo iBatis que o cria como uma lista sincronizada.
Alguém sabe de alguma forma de dar a volta a isso?
Desde já agradeço