Olá pessoal, eu uso o VRaptor 3 e estou com uma dúvida de como eu faço pra gerar um xml customizado, fora do padrão do XStream. Tem alguma maneira de criar uma serialização customizada e passar para o result.use()?
Valeu!
Olá pessoal, eu uso o VRaptor 3 e estou com uma dúvida de como eu faço pra gerar um xml customizado, fora do padrão do XStream. Tem alguma maneira de criar uma serialização customizada e passar para o result.use()?
Valeu!
vc precisa de uma classe como essa:
http://www.guj.com.br/posts/list/200863.java#1030343
e criar um converter específico pra sua classe (converter do xstream)…
ou ainda vc pode configurar o xml com as anotações do XStream na sua classe se vc achar melhor
Valeu galera!! Consegui fazer!! Precisava serializar um Document do dom4j. Pra isso criei uma classe Dom4jXMLSerialization que implementa XMLSerialization e SerializerBuilder. Se isso for útil pra mais alguém segue o código, a classe está bem simples.
@Component
public class Dom4jXMLSerialization implements XMLSerialization, SerializerBuilder {
private HttpServletResponse response;
private Document document;
private XMLWriter writer;
public Dom4jXMLSerialization(HttpServletResponse response) {
this.response = response;
}
@Override
public boolean accepts(String format) {
return "xml".equals(format);
}
@Override
public <T> Serializer from(T object, String alias) {
return from(object);
}
@Override
public <T> Serializer from(T object) {
response.setContentType("application/xml");
this.document = (Document) object;
return this;
}
@Override
public Serializer exclude(String... names) {
return this;
}
@Override
public Serializer include(String... names) {
return this;
}
@Override
public Serializer recursive() {
return this;
}
@Override
public void serialize() {
try {
writer = new XMLWriter(response.getWriter());
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}
}
}
No controller basta passar:
Document document = DocumentHelper.createDocument();
// Implementa o document com os elementos e atributos necessários
result.use(Dom4jXMLSerialization.class).from(document).serialize();
Resolveu meu problema, e ainda aproveitei pra dar uma estudada no source code do VRaptor. Valeu!!