Serialização personalizada XStream Vraptor [RESOLVIDO]

E ai galera, então estou com um problema para integrar o Fusion Charts com o vraptor.

Os gráficos gerados pela ferramenta necessitam que as tags do xml saim com essas informações:

<chart caption="Not Started"> <set label="Not Started" value="25"/> <set label="Started" value="50"/> <set label="In Between" value="25"/> </chart>

Pesquisando eu vi que XSTream me permite fazer isso conforme esse blog:

http://liyaqatm.wordpress.com/2010/01/26/xstream-basic-introduction/

A minha pergunta é, como eu poderia utilizar essas funções do XSTream dentro do serializador do Vraptor?

Valeu

você pode usar as anotações do XStream na sua classe e o VRaptor vai usá-las automaticamente…

@XStreamAttribute
private String label;

@XStreamAttribute
private Integer value;

ou algo do tipo

valeu lucas, vou tentar e posto o resultado!

Ae galera só para registrar caso alguem necessite de usar o vraptor com o fusion charts segue o que eu fiz:

Gráfico gerado: PIE3D

Configs:

Vraptor blank project
Anotações xstream

na minha view apenas adicionei essa chamada:

	<div id="chartContainer">FusionCharts will load here!</div>
	<script type="text/javascript">
		var myChart = new FusionCharts("<c:url value="/grafico/FCF_Pie3D.swf" />", "myChartId", "400", "300",  "1", "0");
		myChart.setDataURL("<c:url value="/chart.xml" />", "xml");
		myChart.render("chartContainer");
	</script>

No meu controller eu fiz assim:

	@Get("/chart.xml")
	public void getXML(){
		
		logger.debug("** REQUISIÇÃO CONTROLLER XML **");
		
		if(Validation.isValid(chartElements)){		
			this.result.use(Results.xml()).from(this.chartElements)
			                              .include("labels").serialize();			
		}else{
			this.result.include("message", "chartError");
			this.result.redirectTo(PanelController.class).panel();
		}
	}

E as classes que geraram o gráfico:


@XStreamAlias(value = "graph")
public class PieChart implements ChartElements{
	
	@XStreamAsAttribute
	private String caption;
	
	@XStreamImplicit
	private List<PieChartSet> labels = new ArrayList<PieChartSet>();

	public PieChart(String caption) {
		this.caption = caption;		
	}

	public void add(PieChartSet pieChartSet) {
		labels.add(pieChartSet);
	}

	public String getCaption() {
		return caption;
	}
}

// classe que fica tageada pelo xstrem
@XStreamAlias(value = "set")
public class PieChartSet {
	@XStreamAsAttribute
	private String label;
	
	@XStreamAsAttribute
	private String name;
	
	@XStreamAsAttribute
	private String value;
	
	public PieChartSet(String label, String name, String value) {
		this.label = label;
		this.name = name;
		this.value = value;
	}
	
	public String getLabel() {
		return label;
	}
	public String getValue() {
		return value;
	}

	public String getName() {
		return name;
	}

Tomem cuidado no tipo de gráfico gerado, pois pode rolar um no data display por conta disso.

Essas classes ai geram esse xml (que é aceito pelo pie3D)

<graph caption="Not Started"><set label="Not Started" name="prod1" value="25"/><set label="Started" name="prod2" value="50"/><set label="In Between" name="prod3" value="25"/></graph>

valeu Lucas !!!

Estou tentando fazer funcionar fusion com vraptor só são entendi essa parte:

public class PieChart implements ChartElements{

Como ficou a classe ChartsElements implementada pela PieCharts?

[quote=danielpx]Estou tentando fazer funcionar fusion com vraptor só são entendi essa parte:

public class PieChart implements ChartElements{

Como ficou a classe ChartsElements implementada pela PieCharts?[/quote]

Então cara, no meu Controller ai em cima eu queria passar vários tipos de gráficos, nesse exemplo eu usei pieChart, porém o serializador não deve ser específico de uma classe, portanto eu criei uma interface apenas de marcação, o xstream é inteligente para pegar o tipo certo e eu fico com um controller que gera o xml recebendo qualquer
classe que implemente pieChartElements, sacou?

Qualquer coisa posta ai sua dúvida!

Ok. vou ver se consigo fazer.

Obrigado

Cara , não consegui fazer ainda, tem como vc postar sua classe ChartElements pra eu ver onde to errando.

Obrigado