Boa tarde pessoal!
Estou usando xstream para ler um xml antigo e adaptar ao novo formato onde o xstream esta rodando corretamente.
Mas quando vou carregar este xml antigo aparece varios erros medonhos.
Queria ver como faço para ignorar os valores antigos do xml usando o xstream.
Sei que tenho que usar a interface converter, mas vou ter que ler atributo por atributo e adequar ao novo xml.
Grato
Xtream: Como ignorar valores do xml na hora do load
6 Respostas
Que erros medonhos são esses?
Veja se esse xml antigo abre corretamente em algum browser.
o xml ta correto Pedrosa. no parse ele vem ok!
é que o meu objeto tem apenas alguns atributos do xml antigo. E o xstream reclama que o existem atributos a mais.
Eu queria ignorar o restante e recuperar apenas o que preciso. Sem ter que criar um objeto que representa-se todo o objeto antigo ja que ele é um pouco complexo e não tenho xsd dele.
Obrigado e t+
é… vou ter que fazer um converter na unha!
Obrigado e t+
O Conversor é super facil de criar.
http://xstream.codehaus.org/converter-tutorial.html
Entretanto, dependendo do que vc quer fazer só criar os aliases corretos ja basta.
Passei pelo mesmo problema, e criando o Conversor é possível ignorar algum elementos que não são mapeados.
A main tem alguns testes e no método converterFromXml você pode notar que há um elemento que não é mapeado.
http://rapidshare.com/files/214811547/xstreamConverter.jar.html
public class PessoaConverter implements Converter {
public boolean canConvert(Class clazz) {
return clazz.equals(Pessoa.class);
}
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
Pessoa pessoa = (Pessoa) value;
writer.startNode("nome");
writer.setValue(pessoa.getNome());
writer.endNode();
writer.startNode("sobrenome");
writer.setValue(pessoa.getSobrenome());
writer.endNode();
writer.startNode("endereco");
context.convertAnother(pessoa.getEndereco());
writer.endNode();
}
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Pessoa pessoa = new Pessoa();
List<String> elm = new ArrayList<String>();
elm.add(0, "nome");
elm.add(1, "sobrenome");
elm.add(2, "endereco");
while (reader.hasMoreChildren()) {
reader.moveDown();
String tag = reader.getNodeName();
int index = elm.indexOf(tag);
switch (index) {
case 0:
pessoa.setNome(reader.getValue());
break;
case 1:
pessoa.setSobrenome(reader.getValue());
break;
case 2:
Endereco endereco = (Endereco)context.convertAnother(pessoa,Endereco.class);
pessoa.setEndereco(endereco);
break;
}
reader.moveUp();
}
return pessoa;
}
}