Urgente - file upload(não é uma pergunta COMUM, confira)

Pessoal preciso fazer um http client pra enviar via POST um arquivo xml para o meu servlet em java.

Eu pesquisei na internet, e só encontrei soluções que usam httpclient da apache.

O problema é que o sistema no qual desenvolvo não me deixa IMPORTAR BIBLIOTECAS, ou seja preciso criar um client que use apenas o que vem na JDK 1.4(não pode ser nada da 1.5).

O código mais perto disso que eu consegui foi esse abaixo:

try {
        // Construct data
        String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    
        // Send data
        URL url = new URL("http://hostname:80/cgi");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
    
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }

porém preciso adaptar este código para que envie um ARQUIVO.xml e não o conteudo do XML como uma string.

ajuda por favor!!

agradeço muito desde já!

-dm

a propria apache tem o commons file upload … tem exemplo e tudo mais no site

mas eu nao posso utilizar bibliotecas como eu disse no primeiro post deste topico…tenho que fazer de modo nativo…soh com as libs do java

valeuz mesmo assim

mas nao posso utilizar bibliotecas, tneho que fazer de modo nativo…como eu disse acima

valeuz mesmo assim…

só com java ntvo eu nao sei … :frowning:

blza

[quote=fr3akoutTotal]Pessoal preciso fazer um http client pra enviar via POST um arquivo xml para o meu servlet em java.

Eu pesquisei na internet, e só encontrei soluções que usam httpclient da apache.

O problema é que o sistema no qual desenvolvo não me deixa IMPORTAR BIBLIOTECAS, ou seja preciso criar um client que use apenas o que vem na JDK 1.4(não pode ser nada da 1.5).

O código mais perto disso que eu consegui foi esse abaixo:

try {
        // Construct data
        String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    
        // Send data
        URL url = new URL("http://hostname:80/cgi");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
    
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }

porém preciso adaptar este código para que envie um ARQUIVO.xml e não o conteudo do XML como uma string.

ajuda por favor!!
[/quote]

Não ha diferença prática. DO lado do servidor simplesmente leia o parametro e converta para arquivo.
O HTTP nunca envia o arquivo, sempre converte para texto ( pois é um protocolo baseado em texto).
O que acontece no FileUploads é que vc define o post com um outro tipo de encoding e assim o browser envia o request de outra forma que o FileUploads sabe ler. Mas isso é uma necessidade que vc pode evitar. Sobretudo se o seu cliente é limitado.

[quote=sergiotaborda][quote=fr3akoutTotal]Pessoal preciso fazer um http client pra enviar via POST um arquivo xml para o meu servlet em java.

Eu pesquisei na internet, e só encontrei soluções que usam httpclient da apache.

O problema é que o sistema no qual desenvolvo não me deixa IMPORTAR BIBLIOTECAS, ou seja preciso criar um client que use apenas o que vem na JDK 1.4(não pode ser nada da 1.5).

O código mais perto disso que eu consegui foi esse abaixo:

try {
        // Construct data
        String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8");
        data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8");
    
        // Send data
        URL url = new URL("http://hostname:80/cgi");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
    
        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    } catch (Exception e) {
    }

porém preciso adaptar este código para que envie um ARQUIVO.xml e não o conteudo do XML como uma string.

ajuda por favor!!
[/quote]

Não ha diferença prática. DO lado do servidor simplesmente leia o parametro e converta para arquivo.
O HTTP nunca envia o arquivo, sempre converte para texto ( pois é um protocolo baseado em texto).
O que acontece no FileUploads é que vc define o post com um outro tipo de encoding e assim o browser envia o request de outra forma que o FileUploads sabe ler. Mas isso é uma necessidade que vc pode evitar. Sobretudo se o seu cliente é limitado.[/quote]

do lado do servidor eu fiz funcionar, agora falo do lado do cliente, como mandar um arquivo xml em stream pelo http post, vc saberia me dar ume xmeplo de como fazer? pq eu nem faço idéia, esse código acima eu tirei do www.exampledepot.com, segue abaixo minha rotina do lado servidor que atualmente funciona direitinho:

InputStream xml = null;
	BufferedReader br = null;
	StringBuffer xmlBuffer = new StringBuffer();
	String line = null;
	File readyXML = null;
	
	try {
		xml = request.getInputStream();
		br = new BufferedReader(new InputStreamReader(xml));
		
		while((line = br.readLine()) != null) {
			xmlBuffer.append(line);
		}
	} catch(IOException e) {
		e.printStackTrace();
	}
	
	try {
		BufferedWriter out = new BufferedWriter(new FileWriter(TAGSHOP_REQUEST_XML));
		out.write(xmlBuffer.toString());
		out.close();
		
		readyXML = new File(TAGSHOP_REQUEST_XML);
	} catch (IOException e) {
		e.printStackTrace();
	}
	//===============================================================

po, ninguem?

[quote=fr3akoutTotal][quote=sergiotaborda]
[/quote]

Não ha diferença prática. DO lado do servidor simplesmente leia o parametro e converta para arquivo.
O HTTP nunca envia o arquivo, sempre converte para texto ( pois é um protocolo baseado em texto).
O que acontece no FileUploads é que vc define o post com um outro tipo de encoding e assim o browser envia o request de outra forma que o FileUploads sabe ler. Mas isso é uma necessidade que vc pode evitar. Sobretudo se o seu cliente é limitado.[/quote]

do lado do servidor eu fiz funcionar, agora falo do lado do cliente, como mandar um arquivo xml em stream pelo http post, vc saberia me dar ume xmeplo de como fazer? pq eu nem faço idéia, esse código acima eu tirei do www.exampledepot.com, segue abaixo minha rotina do lado servidor que atualmente funciona direitinho:

[/quote]

Ora, o codigo do lado do cliente é aquele lá que vc mesmo colocou.
Só que em vez de

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush();

Vc faz :

[code] InputStream fileInputStream = new FileInputStream(file);
OutputStream out = conn.getOutputStream());

// copia do input para o output (upload)
final byte[] buffer = new byte[1024 * 4]; //4 Kb
int n = 0;
while (-1 != (n = fileInputStream.read(buffer))) {
out.write(buffer, 0, n);
}
out.flush();

out.close();
fileInputStream .close();
[/code]