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();
}
}
}