os registros pode estar diferentes. Atenha-se ao codigo..Ja temos a funcao salvar que recebe um objeto Contato em nosso ContatoDAO.Implementacao Quick and Dirty:I) P/ salvar direto sem verificacao, basta criar uma instancia do ContatoDAO e chamar o metodo salvar dentro no loop for que varre a lista de contatos criado no passo 8 etapa V, mas para mostrar na tela quantos registros foram importados- Modificamos a classe XmlUtil p/ armazenar a lista de contatos importados do XML com Get/Set, entre outras coisas, e alem disso ja fizemos um validador de Contatos no inicio dessa licao. Como fica isso ? II) na classe springlesson07.utils.XmlUtil.java modificamos para o seguinte codigo: package springlesson07.utils;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.Dom4JDriver;import java.awt.Desktop;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.Writer;import java.util.Arrays;import java.util.Calendar;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.validation.BeanPropertyBindingResult;import org.springframework.validation.FieldError;import org.springframework.validation.ObjectError;import org.springframework.validation.ValidationUtils;import springlesson07.dao.ContatoDAO;import springlesson07.model.Contato;import springlesson07.validators.ContatoValidator;public final class XmlUtil { private Calendar calendar; private String dataHojeFormatada; private String dataNomeArquivo; private String nomeArquivo; private XStream xstream; // to import private List<Contato> contatosImportados; private int totalImportados; private ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-definitions.xml"); private ContatoDAO dao; public XmlUtil() { // p/ gerar o nome do arquivo no contrutor this.calendar = Calendar.getInstance(); this.dataHojeFormatada = calendar.get(calendar.DATE) + "/" + (calendar.get(calendar.MONTH) + 1) + "/" + calendar.get(calendar.YEAR) + " " + calendar.get(calendar.HOUR_OF_DAY) + ":" + +calendar.get(calendar.MINUTE) + ":" + +calendar.get(calendar.SECOND); this.dataNomeArquivo = dataHojeFormatada.replace(" ", "_").replace(":", "_").replace("/", "_"); this.nomeArquivo = "contatos_" + dataNomeArquivo + ".xml"; this.xstream = new XStream(); this.dao = (ContatoDAO) getCtx().getBean("contatoDao"); } public ApplicationContext getCtx() { return ctx; } public String getNomeArquivo() { return nomeArquivo; } public void setNomeArquivo(String nomeArquivo) { this.nomeArquivo = nomeArquivo; } public XStream getXstream() { return xstream; } public void setXstream(XStream xstream) { this.xstream = xstream; } public void setTotalImportados(int totalImportados) { this.totalImportados = totalImportados; } public int getTotalImportados() { return totalImportados; } public List<Contato> getContatosImportados() { return contatosImportados; } public void setContatosImportados(List<Contato> contatosImportados) { this.contatosImportados = contatosImportados; } private int errosImportacao; public void setErrosImportacao(int errosImportacao) { this.errosImportacao = errosImportacao; } public int getErrosImportacao() { return errosImportacao; } public ContatoDAO getDao() { return dao; } public void setDao(ContatoDAO dao) { this.dao = dao; } public void exportarArquivoContatos(List<Contato> list) { try { System.out.println("Gerando arquivo XML:"); getXstream().alias("contato", Contato.class); Writer writer; writer = new FileWriter(getNomeArquivo()); ObjectOutputStream out = getXstream().createObjectOutputStream(writer, "contatos"); writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); for (Contato C : list) { out.writeObject(C); } out.close(); System.out.println("Arquivo gerado:" + getNomeArquivo()); openFile(new File(getNomeArquivo())); } catch (IOException ex) { Logger.getLogger(XmlUtil.class.getName()).log(Level.SEVERE, null, ex); } } public void openFile(File document) throws IOException { Desktop dt = Desktop.getDesktop(); dt.open(document); } public boolean importarArquivoContatos(String F) { this.xstream = new XStream(new Dom4JDriver()); int erros = 0; int imports = 0; try { getXstream().alias("contato", Contato.class); getXstream().alias("contatos", List.class); getXstream().processAnnotations(Contato.class); BufferedReader input = new BufferedReader(new FileReader(F)); List<Contato> contatos = (List) getXstream().fromXML(input); List<Contato> contatosOk = null; input.close(); for (Contato C : contatos) { System.out.println("Contato: " + C.getId() + " : " + C.getNome() + " - " + C.getTelefone()); ContatoValidator CV = new ContatoValidator(); BeanPropertyBindingResult result = new BeanPropertyBindingResult(C, "Contato"); ValidationUtils.invokeValidator(CV, C, result); if (result.getErrorCount() == 0) { try { this.getDao().salvar(C); imports++; contatosOk.add(C); } catch (java.lang.NullPointerException npe) { // importa os dados mas entra aqui.. p/ examinar com mais calma// System.out.println("Erro ao Salvar