vou postar meu código para melhor entendimento,
esta é minha classe que pega os elementos das tags beneficiario
public class ConversorBeneficiario implements Converter {
@Override
public void marshal(Object valor, HierarchicalStreamWriter escreve, MarshallingContext texto) {
Beneficiario beneficiario = (Beneficiario) valor;
escreve.addAttribute("cco", beneficiario.getCco());
escreve.addAttribute("situacao", beneficiario.getSituacao());
escreve.addAttribute("dataAtualizacao", beneficiario.getDataAtualizacao());
}
@Override
public Object unmarshal(HierarchicalStreamReader ler, UnmarshallingContext texto) {
Beneficiario beneficiario = new Beneficiario();
beneficiario.setCco(ler.getAttribute("cco"));
beneficiario.setSituacao(ler.getAttribute("situacao"));
beneficiario.setDataAtualizacao(ler.getAttribute("dataAtualizacao"));
return beneficiario;
}
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(Beneficiario.class);
}
}
esta é a classe que pega o valor dos objetos
public class LerXml implements Runnable {
@Override
public void run() {
try {
XStream xstream = new XStream(new Dom4JDriver());
xstream.processAnnotations(MensagemSIB.class);
xstream.registerConverter(new ConversorBeneficiario());
xstream.alias("conferencia", List.class);
xstream.alias("beneficiario", Beneficiario.class);
BufferedReader input = new BufferedReader(new FileReader("c:\\fileTeste.xml"));
MensagemSIB bl = (MensagemSIB) xstream.fromXML(input);
List<Beneficiario> beneficiarios = bl.getMensagem().getAnsParaOperadora().getConferencia().getBeneficiarios();
long id = 1;
for (Beneficiario b : beneficiarios) {
System.out.println("-----------------------------------------------------------------------------------");
System.out.println("Numero de registros : " + id++);
System.out.println("CCO : " + b.getCco());
System.out.println("Situacao : " + b.getSituacao());
System.out.println("Data atualização : " + b.getDataAtualizacao());
System.out.println("Nome : " + b.getIdentificacao().getNome());
System.out.println("Sexo : " + b.getIdentificacao().getSexo());
System.out.println("Cpf : " + b.getIdentificacao().getCpf());
System.out.println("Nome da mae : " + b.getIdentificacao().getNomeMae());
System.out.println("Data de Nascimento : " + b.getIdentificacao().getDataNascimento());
System.out.println("Rua : " + b.getEndereco().getLogradouro());
System.out.println("Numero : " + b.getEndereco().getNumero());
System.out.println("Bairro : " + b.getEndereco().getBairro());
System.out.println("Codigo municipio : " + b.getEndereco().getCodigoMunicipio());
System.out.println("Cep : " + b.getEndereco().getCep());
System.out.println("Tipo endereco : " + b.getEndereco().getTipoEndereco());
System.out.println("Reside no exterior : " + b.getEndereco().getResideExterior());
System.out.println("Complemento : " + b.getEndereco().getComplemento());
System.out.println("Codigo municipio residencia : " + b.getEndereco().getCodigoMunicipioResidencia());
System.out.println("Relacao dependencia : " + b.getVinculo().getRelacaoDependencia());
System.out.println("CCO Beneficiario titular : " + b.getVinculo().getCcoBeneficiarioTitular());
System.out.println("Data contratacao : " + b.getVinculo().getDataContratacao());
System.out.println("Numero plano ANS : " + b.getVinculo().getNumeroPlanoANS() );
System.out.println("Cobertura parcial temporaria: " + b.getVinculo().getCoberturaParcialTemporaria());
System.out.println("Itens excluidos cobertura : " + b.getVinculo().getItensExcluidosCobertura() );
System.out.println("Cnpj empresa contratante : " + b.getVinculo().getCnpjEmpresaContratante());
System.out.println("Data cancelamento : " + b.getVinculo().getDataCancelamento());
System.out.println("Data reativacao : " + b.getVinculo().getDataReativacao() );
System.out.println("Numero plano operadora : " + b.getVinculo().getNumeroPlanoOperadora() );
}
input.close();
} catch (IOException e) {
}
}
}
quando executo tudo isso junto tenho o seguinte resultado no console
run:
Exception in thread "Thread-0" java.lang.NullPointerException
--------------------------------------------------------
Numero de registros : 1
CCO : 026997828105
Situacao : ATIVO
Data atualização : 2011-09-05
at br.com.businessflex.controller.LerXML.run(LerXML.java:37)
at java.lang.Thread.run(Thread.java:722)
CONSTRUÍDO COM SUCESSO (tempo total: 16 minutos 7 segundos)
Se mando rodar o mesmo código apenas tirando a classe ConversorBeneficiario ele lê todo o arquivo setando os valores de CCO, Situação e Data atualização para null.