SOAPConnection не обрабатывает ответ gzip - PullRequest
1 голос
/ 05 июля 2011

Я использую SOAPConnection для вызова веб-службы на основе SOAP.Запрос отправляется с заголовком «Accept-Encoding: gzip, deflate».Я использовал fiddler, чтобы получить ответ, он сжат сжат, но при десериализации сообщения SOAPConnection выдает ошибку, сообщающую «недопустимое utf-8» сообщение.в состоянии распаковать ответ правильно.Нужно ли устанавливать некоторые атрибуты в SOAPConnection, чтобы он обрабатывал сообщение gzip?

Ответы [ 3 ]

1 голос
/ 15 ноября 2011

Я нашел этот фрагмент, выполняющий работу

        SOAPMessage response = conn.call(finalRequest, aUrl);

        // The response is gzip encoded, so decompress the response.
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        response.writeTo(out);
        byte[] barr = out.toByteArray();
        InputStream gzipStream = new GZIPInputStream(new ByteArrayInputStream(barr));
        Reader decoder = new InputStreamReader(gzipStream, "UTF-8");
        BufferedReader buffered = new BufferedReader(decoder);
        int n = 0;
        char[] cbuf = new char[1024];
        Writer w = new StringWriter();
        while ((n = buffered.read(cbuf)) != -1) {
            w.write(cbuf,0,n);
        }
        // the writer now contains unzipped message.
        System.out.println(w.toString());
0 голосов
/ 24 февраля 2015

Просто для завершения этого фрагмента - если вы хотите работать с распакованным SOAPMessage, вам нужно загрузить его в новое сообщение.

SOAPMessage responseCompressed = connection.call(reqMessage, endpoint);
ByteArrayOutputStream out = new ByteArrayOutputStream();
responseCompressed.writeTo(out);
byte[] barr = out.toByteArray();
InputStream gzipStream = new GZIPInputStream(new ByteArrayInputStream(barr));

Вот волшебная строка

SOAPMessage response = factory.createMessage(responseCompressed.getMimeHeaders(), gzipStream);

Где фабрика - ваш MessageFactory.

Теперь ответ будет работать так же, как и без заголовков gzip.Вы просто бросаете это.

0 голосов
/ 05 июля 2011

ты видел это?

SOAPMessage - SOAPConnection - gzip - как

Кроме того, если вы используете AXIS2, он имеет встроенные функции, позволяющие сжимать двоичный контент в кодировке base64 с использованием MTOM:

http://axis.apache.org/axis2/java/core/docs/mtom-guide.html

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