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

M

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

M

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.

D

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

D

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