Gera arquivos xml com java

Tenho um arquivo xml que gerando usando o JDOM, depois que o arquivo é gerado. O servelt enviar o arquivo para o usuario com
o Redirect mais o problema é que o navegador esta lendo o arquivo, em vez de abrir uma tela para o usuario salvar o arquivo.
Como faço para o navegador não ler e se tem como enviar esse arquivo direto para o usuario sem precisar de arquivo temporario ?

[code]try {
FileWriter arquivo = new FileWriter(new File(“d:/arquivos/Apache Software Foundation/Tomcat 7.0/webapps/teste/arquivo/teste.xml”));
xout.output(documento, arquivo);
} catch (Exception e) {
e.getStackTrace();
}

	res.sendRedirect("http://localhost:8080/teste/arquivo/teste.xml");

[/code]

Se tiver usando Servlet tenta manipular o response?

response.setContentType("application/octet-stream");  
response.setHeader("Content-Disposition", "attachment; filename=" + arquivo + "");

Use esse contentType “application/force-download”.

Obrigado valeu.

So uma coisa quando passo “arquivo” no setHeader, vem como
download um arquivo com o nome java.io.FileWriter@51d50871.

não queria colocar aquele caminho que coloquei no new file, tem como passar o objeto e ele pegar o arquivo.xml no setHeader?

Assumimos que arquivo seria uma String com o nome que o usuário verá.

String nomeArquivo = "documento.pdf"; String nomeArquivo = "documento.txt"; String nomeArquivo = file.getName(); String nomeArquivo = obj.getNomeArquivo(); //etc...

response.setHeader("Content-Disposition", "attachment; filename=" + nomeArquivo + "");

O codigo ficou assim.

File file = File.createTempFile("teste", ".xml");
FileWriter fileWriter = new FileWriter(file);
xout.output(documento, fileWriter);
		
res.setContentType("application/force-download");
res.setHeader("Content-Disposition", "attachment; filename=" + file.getName() + "");  

so que é gerado dois arquivos, um do xout.output que contem o xml e outro em
branco que o setheader enviar. O arquivo que o xout.output gera não vai no header.

como faço para passar o xout.output no response ?

Não sei de qual tipo é o xoutput, mas seria mais ou menos assim:

[code]Document doc; // O Documento xml
doc.appendChild(); // adiciona algo no xml

XMLWriter writer; // A classe que grava xml, depende da API
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
writer.write(outputStream); // Grava o XML

res.setContentType(“application/force-download”);
res.setHeader(“Content-Disposition”, “attachment; filename=arquivo.xml”);
res.getOutputStream().write(outputStream.toByteArray()); // Aqui vc pega os bytes gravados no Stream[/code]

o xoutput é XMLOutputter xout = new XMLOutputter();
vo tenta com ByteArrayOutputStream.

Valeu.

O gerar arquivo xml ficou dessa forma.

                XMLOutputter x= new XMLOutputter();
		String xmlDocumento = x.outputString(doc); 
		try {			
				 							
			ByteArrayOutputStream outputStream  = new ByteArrayOutputStream();				
			byte[] arrayXML = xmlDocumento .getBytes();
			outputStream.write(arrayXML);
			
			res.setContentType("application/force-download");    
		        res.setHeader("Content-Disposition", "attachment; filename=xml.xml");
		        res.getOutputStream().write(outputStream.toByteArray());

Agora to tentando fazer o upload mais estou com dificuldade para pegar a informação que vem do input file.

                Document doc = null;	
		//String xml = req.getParameter("arquivo");	 tentei isso mais não funcionou o "arquivo" é o name do input file
		String fileXml = req.getHeader("filename"); não consegui pegar o nome do arquivo vem "null"
				
		SAXBuilder builder = new SAXBuilder();										
		
		try {
			doc = builder.build(fileXml); // aqui preciso passar o arquivo que o usuario selecionou
		} catch (Exception e) {
			e.printStackTrace();
		}