Я пытаюсь вручную gzip ответную строку, возвращаемую с помощью Camel/Jetty. Я смоделировал мой код (ниже) от того, что другие пользователи разместили here и here, но мне все еще не повезло. Тело, возвращаемое в FireBug, является мусором (например, «æRPP * J ... и т. Д.). Я пробовал настраивать режимы сброса буфера, base64 - вывод ByteArrayBuffer и все, что я могу подумать, чтобы бросить на него.Ручная кодировка gzip для Response CamelMessage (несоответствия длины контента)
Одна интересная вещь, которую я заметил, может быть ключом, это размер байтового массива, который я распечатываю в моем коде ниже (а затем использовать для установки заголовка Content-Length), не соответствует Content-Length заголовок отображается в FireBug. Например, данные, перечисленные как 47 байт, выходят как 62 на другом конце, а 153 байта приводят к длине 176 в FireBug. Разница в размерах байтов несовместима между различными вводами образцов. Любые идеи, что Camel/Jetty делает под обложками, которые вызывают изменение этого числа?
val baos = new ByteArrayOutputStream()
val gzos = new GZIPOutputStream(baos)
gzos.write(response_string.getBytes("UTF-8"))
gzos.flush()
gzos.close()
val bts = baos.toByteArray()
println("SIZE %d".format(bts.size))
client ! CamelMessage(bts,Map(Exchange.CONTENT_TYPE->"text/plain; charset=UTF-8",
Exchange.CONTENT_ENCODING->"gzip",
Exchange.CONTENT_LENGTH->bts.size))