Pessoal estou com uma dificuldade para tentar fazer o seguinte:
Irei chamar um webservice e ele vai me retornar uma string onde o conteudo dela é um array de bytes que representa um arquivo. Porem esse array vem escrito em forma de straing e quando tento passar para bytes e gerar o arquivo, ele faz bem, mas na hora de abri-lo o conteudo eh o proprio array em forma de string. =/
Como posso fazer essa conversão?
Muito obrigado
Você não deve usar a classe String para representar coisas diferentes de Strings. Ou seja, a menos que seu arquivo seja um texto, não use String, trabalhe com bytes diretamente.
Você pode colocar o código de onde vc lê esse array e de onde você grava esse array?
Mas tem como vim do webservice ja com o tipo byte[]?
getBytes() não funciona?
String umaString = "Eu sou uma String";
byte[] umByteArray = umaString.getBytes();
Funciona funciona, mas tipo na string ja esta escrita um Array de bytes, entao quando eu pego ela em bytes e depois mando p o arquivo, ele transforma na string com os bytes novamente, em vez do arquivo
vinicius_roc:
Funciona funciona, mas tipo na string ja esta escrita um Array de bytes, entao quando eu pego ela em bytes e depois mando p o arquivo, ele transforma na string com os bytes novamente, em vez do arquivo
Ainda está tudo muito abstrato. Não sabemos o conteúdo da String, nem como vc está recebendo e nem como está gravando. Ao invés de nos forçar a adivinhar, tem como postar essas informações para nós?
tem sim
pega o array que o webservice retornou
[code]byte[] informe = null;
InformeRendimentoGetResponseDocument responseDocument = InformeRendimentoGetResponseDocument.Factory.newInstance();
InformeRendimentoGetRequestDocument requestDocument = InformeRendimentoGetRequestDocument.Factory.newInstance();
CtInformeRendimentoGetIn pesquisa = requestDocument.addNewInformeRendimentoGetRequest();
CtPesquisaData data = pesquisa.addNewDtData();
Intervalo periodo = data.addNewIntervalo();
periodo.setInicio(inicio);
periodo.setFim(fim);
pesquisa.setIdPrestador(BigInteger.valueOf(id));
try{
//Chama o WebService
WebService service = WebServiceProvider.getInstance().getServer("Easy_Informe_Rendimento");
WebServiceClient client = new WebServiceClient(service);
String resposta = client.callWebService(requestDocument.toString());
responseDocument = InformeRendimentoGetResponseDocument.Factory.parse(resposta);
//Se contiver erro imprime no log
if( responseDocument.getInformeRendimentoGetResponse().getErro() !=null){
CtErro erro = responseDocument.getInformeRendimentoGetResponse().getErro();
log.error("Codigo erro: " + erro.getCdOcorrencia());
log.error("Descrição erro: " + erro.getTxOcorrencia());
throw new ServiceException("Erro retornado do WebService");
}else {
informe = responseDocument.getInformeRendimentoGetResponse().getInformeRendimento().getBytes();
}
} catch (XmlException e) {
log.error(e.getMessage(), e);
throw new ServiceException(e);
}
return informe;[/code]
Monta o arquivo
DownloadFile.downloadFile("InformeRendimento.xls", bytesArquivo);
[code]public static void downloadFile(String fileName, byte[] bytes) throws Throwable{
HttpServletResponse response = ServletActionContext.getResponse();
fileName = fileName.replaceAll(" ","");
if(fileName.substring(fileName.length()-3).equals(ContentType.PDF.name().toLowerCase())) {
response.setContentType(ContentType.PDF.getContentType());
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
} else if(fileName.substring(fileName.length()-3).equals(ContentType.XML.name().toLowerCase())) {
response.setContentType(ContentType.XML.getContentType());
response.setHeader("content-disposition", "attachment; filename="+fileName);
} else if(fileName.substring(fileName.length()-3).equals(ContentType.ZIP.name().toLowerCase())) {
response.setContentType(ContentType.ZIP.getContentType());
response.setHeader("content-disposition", "attachment; filename="+fileName);
} else if(fileName.substring(fileName.length()-3).equals(ContentType.XLS.name().toLowerCase())) {
response.setContentType(ContentType.XLS.getContentType());
response.setHeader("content-disposition", "attachment; filename="+fileName);
} else {
response.setContentType(ContentType.TXT.getContentType());
response.setHeader("content-disposition", "attachment; filename="+fileName);
}
response.setContentLength(bytes.length);
response.setBufferSize(bytes.length);
OutputStream out = response.getOutputStream();
out.write(bytes);
out.flush();
response.flushBuffer();
out.close();
}[/code]
…[edited]
mals não percebi onde tu disse que os bytes que chegam representam um arquivo.