Erro de conversão Xstream - projeto vraptor

lucas, fiz uns testes desenvolvi uma classe, serializei, e deserializei com o Xstream:

Task task = new Task(1L);

		ObligationToPay obligationToPay = new ObligationToPay();
		obligationToPay.setId(1L);

		ObligationCancel oc = new ObligationCancel(task, obligationToPay);

		XStream xs = new XStream(new JettisonMappedXmlDriver());

		String xml = xs.toXML(oc);

		ObligationCancel newOc = (ObligationCancel) xs.fromXML(xml);

		System.out.println(newOc.getObligationToPay().getId());

funcionou normalmente.

Entao em um método GET consigo pegar o json do obj.

dps envio para um método que recebe o obj por POST, envio o mesmo json e o obj vem vazio. Conferi, existem todos os setters e etc.

Sera alguma config do vraptor?

PS: MEU CustomJSONSerialization usa o JettisonMappedXmlDriver

abrasss

Tem que ver se o serializer e o deserializer estão usando o mesmo XStream. Se estão não deveria dar problemas…

vc tentou no seu teste pegar um objeto todo populado e fazer o toXML e fromXML?

lucas, consegui resolver o problema. vou postar a solucao completa para que possa servir pra outras pessoas.

Ele serializava de um jeito e deserializava de outro colocando atributos no json como @class e @resolves-to, creio que por conta do hibernate.

Primeiro coloquei o CustomJSONSerialization para evitar circular reference ex. Como explicado aki:

http://www.wbotelhos.com.br/2010/08/26/vraptor-3-evitando-circularreferenceexception-do-xstream/

@Component
public class CustomJSONSerialization extends XStreamJSONSerialization {

	public CustomJSONSerialization(HttpServletResponse response, TypeNameExtractor extractor,
			ProxyInitializer initializer, XStreamBuilder builder) {
		super(response, extractor, initializer, builder);
	}

	@Override
	@SuppressWarnings("deprecation")
	protected XStream getXStream() {

		XStream xstream = super.getXStream();

		xstream.registerConverter(new CollectionConverter(xstream.getMapper()) {
			@Override
			@SuppressWarnings("rawtypes")
			public boolean canConvert(Class type) {
				return Collection.class.isAssignableFrom(type);
			}
		});

		return xstream;
	}
}

depois crei o CustomXStreamBuilder

[code]
@PrototypeScoped
@Component
public class CustomXStreamBuilder extends XStreamBuilderImpl {

public CustomXStreamBuilder(XStreamConverters converters, TypeNameExtractor extractor) {
	super(converters, extractor);
}

// delega o construtor

public XStream configure(XStream xstream) {

	super.configure(xstream);

	xstream.aliasSystemAttribute(null, "class");

	xstream.aliasSystemAttribute(null, "resolves-to");

	return xstream;

}

}[/code]

para tirar os attr adicionais, como explicado aki: https://groups.google.com/forum/#!topic/caelum-vraptor/dnm8j4-YmVw

entao criei uma classe que continha as outras duas que precisava.

algo como isso:


public class ObligationCancel {

	private Task task;

	private ObligationToPay obligationToPay;

	public ObligationCancel() {

	}

	public ObligationCancel(Task task, ObligationToPay obligationToPay) {
		this.task = task;
		this.obligationToPay = obligationToPay;
	}
....

UFAAAAA!

vem mais duvidas ai nos retornos de list rsrs

abrasss

bom que deu tudo certo, parabéns!