Web service

2 respostas
jfnando

bom dia galera!!

estou precisando transferir um arquivo compactado via web service e estou utilizando a api do ksoap2 pois precisarei fazer isso em um pocket,
mas estou com muitas dificuldades pra pegar o arquivo vindo do webservice.
a principio estã vindo os bytes do web service e eu ate consigo pegar uma string deles recuperando como um SoapPrimitive, mas nao consigo
também converter cada byte desse num array de bytes(byte[]) que é oq seria de verdade.

já tentei fazer assim também:
byte[] bytes = ((PrimitiveSoap) envelope.getResponse()).toString.getBytes();

mas não funcionou, nao gerou o arquivo corretamente.

se alguém puder me ajudar agradeço muito.

segue como estou fazendo.

Resposta do Web Service

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://maxiconsyncpocket.maxiconsystems.com.br/">
    <soapenv:Body>
        <ns1:importar2Response>
            <return>UEsDBBQACAAIAA+DVjcAAAAAAAAAAAAAAAAeAAAAY3JlYXRldGFibGVzXzExOTMwODEwNDA2NzEuc3FsxV1Lj+M2Er4vsP+hj25Ah7b7MQ3siS3JDrOypJFko7MXozeZQ7CTyWJ2csi/X1KiLLIeFCn1IFdT9ZGsF6uKD799/vbp6823t39//nSTFnJfNTdvv/xy8/Pvn//47ctNml3Mj+Xp+JI3m82H29ubL79/u/nyx+fP//j739685F09kp9Fk//M/Mb94LOu4/EP/BkE4fu26b8KQZxU6s1spd65hzKkjCCeKPV9pc5PH3/75ePDw/Nqc/vD/n9xc0txjrGsE8U1uUdrfHpHKSBhJUCO/dcLgOyKxHggfiVAxvYcILEAkOWHtRCQ5Ye1EJBhLUDGtQCJKwFybAV/diDjaoCcpVlLADlLs5YA0q0ESDjr1hSwNeEszTofSD4SKIGcpdBKSOQsFV9AIsNqgKzlq4nL9Ugh53m5h1YIyHKFVgZIOMtn7QoAOUvFFwAynCWREgrtLC++hETOcoxKvPTOOiPzgeQjEBLIWV9NCYkUdgPmA4Eco98/ff7pt39+/vTxoTXp7vrt1e3N2+s9oLvaio0DBCk4DBAV0uIAQaEt7iuDPDkO0NpuGWUaOAlBCpEDBDnh3FcG2S4MEBU25QBB4VMOEBRG5QBB4VQOEBRW5QBB4VXOuELRTU5CqwMEhV05QFD4lQMEhWG5Qw0FljhAUICJAwQFmjh/CIpqcP4QlMfmAEH5bA4QFBHjAEFxIA7Q2h6KVOifA7S2d9kfCFj9P1BLBwhTe/JbH2YEAKK1UwBQSwECFAAUAAgACAAPg1Y3Ale6FysQAADhegAAHgAAAAAAAAAAAAAAAAAAAAAAY3JlYXRldGFibGVzXzExOTMwODEwNDA2NzEuc3FsUEsBAhQAFAAIAAgAD4NWNw32kfoEDwQABipMABkAAAAAAAAAAAAAAAAAdxAAAGluc2VydHNfMTE5MzA4MTA0MDY3MS5zcWxQSwECFAAUAAgACAAPg1Y3U3vyWx9mBACitVMAGQAAAAAAAAAAAAAAAADCHwQAdXBkYXRlc18xMTkzMDgxMDQwNjcxLnNxbFBLBQYAAAAAAwADANoAAAAohggAAAA=</return>
        </ns1:importar2Response>
    </soapenv:Body>
</soapenv:Envelope>

ai tem uma parte dos bytes que estao vindo pq eh mto grande, mas pra ter uma ideia acho q tah blz.

meu codigo pra pegar esses bytes:

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        //envelope.addMapping(NAMESPACE, "importar2Response", new byte[0].getClass(), new MarshalBase64());
        
        MarshalBase64 byteMarshal = new MarshalBase64();
        byteMarshal.register(envelope);
        
        SoapObject request = new SoapObject(NAMESPACE, "importar2");
        
        envelope.setOutputSoapObject(request);
        
        HttpTransportSE httpTransportSE = new HttpTransportSE(URL);
        try {
            
            httpTransportSE.call(SOAP_ACTION, envelope);
            
            /*SoapPrimitive ret = (SoapPrimitive) envelope.getResponse();
            System.err.println("" + ret);*/
            
            byte[] filebyte = (byte[]) envelope.getResponse();
            
            String fileName = "C:/imp.zip";
            
            FileOutputStream fos = new FileOutputStream(fileName);
            fos.write(filebyte);
            fos.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }

2 Respostas

jfnando

Resolvido galera.

Meu codigo estava errado. Olhem soh como eh deve ser:

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.addMapping("http://www.w3.org/2001/XMLSchema", "anyType", new byte[0].getClass(), new MarshalBase64());
        
        MarshalBase64 byteMarshal = new MarshalBase64();
        byteMarshal.register(envelope);
        
        SoapObject request = new SoapObject(NAMESPACE, "importar2");
        
        envelope.setOutputSoapObject(request);
        
        HttpTransportSE httpTransportSE = new HttpTransportSE(URL);
        try {
            
            httpTransportSE.call(SOAP_ACTION, envelope);
            
            /*SoapPrimitive ret = (SoapPrimitive) envelope.getResponse();
            System.err.println("" + ret);
            System.err.println("" + ret.getName());
            System.err.println("" + ret.getNamespace());
            */
            
            byte[] filebyte = (byte[]) envelope.getResponse();
            
            String fileName = "C:/imp.zip";
            
            FileOutputStream fos = new FileOutputStream(fileName);
            fos.write(filebyte);
            fos.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }

Valeu galera!!!
t+

jfnando

Na verdade o trecho

MarshalBase64 byteMarshal = new MarshalBase64();   
byteMarshal.register(envelope);

não precisa!!!

Valeu

Criado 23 de outubro de 2007
Ultima resposta 23 de out. de 2007
Respostas 2
Participantes 1