ksoap2 (Android) и GZIPped BasicHttpBinding - PullRequest
0 голосов
/ 12 февраля 2011

Я хочу использовать веб-службу WCF BasicHttp с ksoap2, сжатым GZIP.

Есть ли способ сделать это в версии ksoap2 для Android (http://code.google.com/p/ksoap2-android/) или есть другой способ?

1 Ответ

1 голос
/ 10 июня 2011

Я создал класс, который расширяет HTTPTransportSe, переопределяет метод call () и добавляет эту строку в код (взятый отсюда https://github.com/mosabua/ksoap2-android/blob/master/ksoap2-j2se/src/main/java/org/ksoap2/transport/HttpTransportSE.java)

connection.setRequestProperty("Accept-Encoding","[Here you have to put the encoding]");

Затем, когда я получаю InputStream, я используюпеременная retHeaders, чтобы проверить, есть ли кодировка.

if (retHeaders != null){
            Iterator it = retHeaders.iterator();
            boolean found = false;
            String encoding = "";
            while (it.hasNext()){
                HeaderProperty temp = (HeaderProperty) it.next();
                if (temp.getKey().contentEquals("content-encoding")){
                    found = true;
                    encoding = temp.getValue();
                }
            }
            if (found){
                is = new GZIPInputStream(is, new Inflater(true));
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] buf = new byte[256];
                while (true) {
                    int rd = is.read(buf, 0, 256);
                    if (rd == -1)
                        break;
                    bos.write(buf, 0, rd);
                }
                bos.flush();
                buf = bos.toByteArray();
               is.close();
                is = new ByteArrayInputStream(buf);
            }
        }
        parseResponse(envelope, is);

А затем вы должны передать "is" парсеру. Если есть лучший способ его кодировать, я буду рад узнать об этом.))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...