xStream não serializa listas sincronizadas

0 respostas
E

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ço
public 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

Criado 17 de julho de 2009
Respostas 0
Participantes 1