1IV) No arquivo springlesson07.view.contato.frameListaContatos.java, clique duas vezes no botao exportar XML : e escreva a funcao exportarXML(); e deixe o NB criar a funcaoFigura 10 - Utilizando o NB p/ gerar o codigo da funcao exportarXML private void jBtExportXMLActionPerformed(java.awt.event.ActionEvent evt) { exportarXML(); } private void exportarXML() { XStream xstream = new XStream(); List<Contato> listaContato = this.getDao().listar(); xstream.alias("contato", Contato.class); String xmlOut = xstream.toXML(listaContato); System.out.println("Gerando arquivo XML:"); System.out.println(xmlOut); }Observe o import import com.thoughtworks.xstream.XStream;6) Teste o programa e clique no botao Exportar XML, veja o resultado no console :Figura 11 - Veja a String p/ o Arquivo XML no console do NB7) Alterando o jeito de exportar o XMLPara nao fazer o usuario ter q copiar do console e colar em um novo arquivo, vamos criar esse arquivo:com o nome contatos_DIA_MES_ANO.xml e ao gerar o arquivo , vamos abri-lo p/ o usuario (funcao openFile() que criaremos abaixo). Isso dependera de qual o programa que o seu SO usara para abrir o arquivo. No meu caso abriu com o Xcode.I) Alterando a funcao exportarXML e adicionando a funcao openFile (solucao 1)No arquivo springlesson07.view.contato.frameListaContatos.javaprivate void exportarXML() { XStream xstream = new XStream(); List<Contato> listaContato = this.getDao().listar(); xstream.alias("contato", Contato.class); String xmlOut = xstream.toXML(listaContato); System.out.println("Gerando arquivo XML:");// System.out.println(xmlOut); // p/ gerar o nome do arquivo Calendar calendar = Calendar.getInstance(); String 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); String dataNomeArquivo = dataHojeFormatada.replace(" ", "_").replace(":", "_").replace("/", "_"); String nomeArquivo = "contatos_" + dataNomeArquivo + ".xml"; // p/ salvar o arquivo solucao 1 try { FileOutputStream fs = new FileOutputStream(nomeArquivo); xstream.toXML(listaContato, fs); fs.close(); System.out.println("Arquivo gerado:" + nomeArquivo); //abre o arquivo p/ o usuario fora do programa openFile(new File(nomeArquivo)); } catch (FileNotFoundException ex) { Logger.getLogger(frameListaContatos.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(frameListaContatos.class.getName()).log(Level.SEVERE, null, ex); } } public void openFile(File document) throws IOException { Desktop dt = Desktop.getDesktop(); dt.open(document); }Observe os importsimport com.thoughtworks.xstream.XStream;import java.awt.Desktop;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Calendar;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.JOptionPane;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import springlesson07.dao.ContatoDAO;import springlesson07.model.Contato;import springlesson07.model.ContatoTableModel;import springlesson07.utils.Tema;Teste o programa, e o resultado deve ser :Figura 12 - Exportando nosso 1o XML observe que o root node e liste no output temos :run:Sep 24, 2012 12:33:38 PM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@bd10a5c: startup date [Mon Sep 24 12:33:38 BRT 2012]; root of context hierarchySep 24, 2012 12:33:38 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [beans-definitions.xml]Sep 24, 2012 12:33:39 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@6401d98a: defining beans [dataSource,jdbcTemplate,ContatoDao]; root of factory hierarchySep 24, 2012 12:33:39 PM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassNameINFO: Loaded JDBC driver: com.mysql.jdbc.DriverSep 24, 2012 12:33:40 PM org.springframework.jdbc.datasource.SingleConnectionDataSource initConnectionINFO: Established shared JDBC Connection: com.mysql.jdbc.JDBC4Connection@31e46a68Antigo: [Aqua Look and Feel for Mac OS X - com.apple.laf.AquaLookAndFeel]Novo: [Nimbus Look and Feel - com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel]Antigo: [Nimbus Look and Feel - com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel]Novo: [Nimbus Look and Feel - com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel]Gerando arquivo XML:Arquivo gerado:contatos_24_9_2012_12_33_55.xmlArquivo xml contatos_24_9_2012_12_33_55.xml :<list> <contato> <id>3</id> <nome>Cliente 1</nome> <telefone>2222-3333</telefone> </contato> <contato> <id>4</id> <nome>Cliente 2 renomeado de novo</nome> <telefone>4444-5555</telefone> </contato></list>II) Alterando a funcao exportarXML (solucao 2)No arquivo springlesson07.view.contato.frameListaContatos.java private void exportarXML() { XStream xstream = new XStream(); List<Contato> listaContato = this.getDao().listar(); xstream.alias("contato", Contato.class); String xmlOut = xstream.toXML(listaContato); System.out.println("Gerando