WebService retornando array de byte

7 respostas
S

Galera o metodo getByteArray de meu webservice está retornando um vetor de bytes, estou tentando pega-lo no cliente sem sucesso, não sei como converter o objeto retornado para um vetor de byte, lembrando que estou usando a ferramenta ksoap, alguem poderia me dar uma ajuda?
segue abaixo os codigos.

Servidor:

/**
     * Operação de serviço web
     */
    @WebMethod(operationName = "getByteArray")
    public byte[] getByteArray() throws Exception {
        //TODO grava o seu código de implementação aqui:
        FileInputStream file = new FileInputStream("D:/11-10-09_1558.jpg");
        byte[] aux = new byte[1024];
        byte[] total = null;
        byte[] buffer;
        int cont;
        while ((cont = file.read(aux)) > 0) {
            if (total != null) {
                buffer = new byte[total.length + cont];
                for (int pos = 0; pos < total.length; pos++) {
                    buffer[pos] = total[pos];
                }
                for (int pos = 0; pos < cont; pos++) {
                    buffer[pos+total.length] = aux[pos];
                }
                total=buffer;
            } else {
                total = aux;
            }
            aux = new byte[1024];
        }
        file.close();
        System.out.println("Saida: "+ total.length);
        return total;
    }

Cliente:

SoapObject client = new SoapObject("http://Serv/", "getByteArray");
//        client.addProperty("DATA", "");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(client);
        HttpTransportSE conecta = new HttpTransportSE("http://localhost:8084/MobileServ/Sample");
        try {
            conecta.call("", envelope);
            envelope.getResponse();
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (XmlPullParserException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

7 Respostas

mcbarsotti

porque vc tem que enviar como um array de bytes?

e qual erro está dando?

abs

S

Pq eu tenho que transferir um arquivo como o exmeplo acima que está pegando uma imagem JPG, e transformando em um vetor de byte e enviando para o cliente.
Não está ocorrendo nenhum erro, simplesmente nao sei o que fazer quando chega no cliente, como transforma-lo em byte array devolta, linha 08 do codigo do cliente

mcbarsotti

se eu entendi, vc não sabe no client como transformar um byte[] em um .jpg, é isso?
se for, segue o codigo, se não for, explique melhor.

public void escrever(byte[] data, String nomeArquivo) throws IOException{
OutputStream out = new FileOutputStream(nomeArquivo);
out.write(data);
out.close();
}

abs

S

Não, olhe a linha 08 do cliente, lá tem envelope.getResponse(); esta linha retorna um Object, que é o meu vetor de byte[], esta é minha duvida, como transformar um Object para vetor de byte.

já tentei byte vet[]=(byte[])envelope.getResponse(); e não deu certo, o erro apresentado desta maneira é

Exception in thread "main" java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to [B at mobilecliente3.Main.ksoap(Main.java:103) at mobilecliente3.Main.main(Main.java:31) Java Result: 1

Então esta é minha duvida como pegar um Objetao serializavel e transformar ele em uma vetor de byte.

donny

Aew Shakall, qto tempo! Rs!
Acho que pode resolver o seu problems asim:

byte[] b = envelope.getResponse().toString().getBytes();

o que vc acha?
Abraço e se cuide!

J

Boa noite donny .

Voce sabe me dizer como que faço para receber um array de bytes no webservice java?

Eu criei uma aplicação java android e quero enviar um arquivo (pdf, jpg…) só que não sei como receber no meu Web Serivce.

Obrigada

donny

Boa noite Jaini,

Segue abaixo um exemplo de um web método onde recebe um arquivo zipado.

@WebMethod(operationName = "DB")
    public String DB(@WebParam(name = "db") byte[] db) {
        String ret = "";
        try {            
            File file = File.createTempFile("PDADB", ".zip");
            FileOutputStream fil = new FileOutputStream(file);
            fil.write(db);
            fil.close();
            ret = "OK*@";
        } catch (Exception ex) {
            Logger.getLogger(ConexaoCampo.class.getName()).log(Level.SEVERE, null, ex);
            ret = "ERRO*" + ex.getMessage() + "*@";
        }
        return ret;
    }
Criado 25 de fevereiro de 2010
Ultima resposta 12 de jan. de 2013
Respostas 7
Participantes 4