Transferir arquivo via WebServices Axis

0 respostas
H

Pessoal,

tenho que criar um função no sistema aqui para transferir arquivos entre a aplicação servidora WS e seu cliente, estou usando o Plugin do Eclipse para gerar os serviços WS. Bom eu fiz o seguinte, transferí o arquivo transformando ele em byte[], só que é aquela coisa, arquivo grande consome memória do heap se dá erro de memória. Vejam o código que fiz abaixo. Eu já pesquisei e achei o DataHandler, e a recomendação é ele seja usado na assinatura do método no serviço, mas isso gera erro no momento de gerar o serviço pelo Eclipse, ele diz não ser compatível, e realmente na documentação do Axis 1.3 ele somente suporta tipos primitivos. O negócio do DataHandler eu verifiquei no seguinte site: http://www.imasters.com.br/artigo/3879/xml/soap_attachments_com_axis. Alguém pode me dizer qual é a melhor maneira de fazer essa tranferência de arquivos com o Axis?

Código servidor:

package com.hugo.service;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BOMService {
	
	public boolean importarBOM(String loginSession, byte[] arquivoXML) throws Exception {
		
		System.out.println("-----------------------> importarBOM: " + arquivoXML.length);
		
		File arquivoDiscoXML = new File("/root/temp/bom/arqTransferido.xml");
		
		BufferedOutputStream bufferedOutput = null;
		
		try {
		
			bufferedOutput = new BufferedOutputStream(new FileOutputStream(arquivoDiscoXML));
			
			bufferedOutput.write(arquivoXML);
			
			
		} catch (FileNotFoundException ex) {
            ex.printStackTrace();
            
        } catch (IOException ex) {
            ex.printStackTrace();
            
        } finally {
        	
            try {
                if (bufferedOutput != null) {
                    bufferedOutput.flush();
                    bufferedOutput.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
		
		return false;
	}
	
}

Código cliente:

package com.hugo.bom;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.xml.rpc.ServiceException;

import com.mentora.service.BOMService;
import com.mentora.service.BOMServiceServiceLocator;

public class TranferenciaArquivoSOA {
	
	
	public static void main(String[] args) {
		
		System.out.println("---------> TranferenciaArquivoSOA");
		
		try {
			
			File arquivoOrigemXML = new File("/root/temp/bom/arqOrigem.xml");
			
			BufferedInputStream arquivo = new BufferedInputStream(new FileInputStream(arquivoOrigemXML));

			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			
			int x = 0;
			
			while((x = arquivo.read()) != -1){
				 baos.write(x);
				 
			}
			
			arquivo.close();
			
			System.out.println("---------> arquivoByte: " + baos.toByteArray().length);
			
			BOMServiceServiceLocator bomServiceLoc = new BOMServiceServiceLocator();
			BOMService bomService = bomServiceLoc.getBOMService();
			
			bomService.importarBOM("adm", baos.toByteArray());
			
		} catch (ServiceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
Criado 5 de setembro de 2007
Respostas 0
Participantes 1