Java REST Chunked Encoding - PullRequest
       13

Java REST Chunked Encoding

0 голосов
/ 13 октября 2011

Я пытаюсь прочитать некоторую информацию с помощью REST-сервиса, который использует чанк-кодирование.

String encodedURL = URLEncoder.encode(url, "UTF-8");
WebClient client = org.apache.cxf.jaxrs.client.WebClient.create(encodedURL).accept("text/html");
Response response = client.get();

Ответ содержит статус, метаданные и сущность. Метаданные содержат следующую информацию:

{Date = [Чт, 13 октября 2011 13:27:02 GMT], Vary = [Принять кодирование, User-Agent], Transfer-Encoding = [chunked], Keep-Alive = [timeout = 15, max = 100], Content-Type = [text / html; кодировка = кодировка = UTF-8], Connection = [Keep-Alive], X-Pad = [избежать ошибки браузера], Сервер = [Apache / 2.2.3 (Linux / SUSE)]}

и объект содержит экземпляр типа sun.net.www.protocol.http.HttpURLConnection $ HttpInputStream.

В прошлом я использовал следующую строку кода, чтобы получить всю строку результата:

String resultString = client.get(String.class);

Но почему-то эта строка выдает исключение:

. Проблема с чтением ответного сообщения, класс: класс java.lang.String, ContentType: text / html; charset = charset = UTF-8. org.apache.cxf.jaxrs.client.ClientWebApplicationException: .Problem с чтением ответного сообщения, класс: class java.lang.String, ContentType: text / html; charset = charset = UTF-8.

... вызвано:

Вызвано: java.io.UnsupportedEncodingException: charset = UTF-8 at sun.nio.cs.StreamDecoder.forInputStreamReader (неизвестный источник) в java.io.InputStreamReader. (Неизвестный источник) в org.apache.cxf.helpers.IOUtils.toString (IOUtils.java:180) в org.apache.cxf.helpers.IOUtils.toString (IOUtils.java:166) в org.apache.cxf.jaxrs.provider.PrimitiveTextProvider.readFrom (PrimitiveTextProvider.java:51) в org.apache.cxf.jaxrs.client.AbstractClient.readBody (AbstractClient.java:435) ... еще 49

Есть ли прямое решение для получения всего содержания ответа?

Спасибо!

1029 * Kon *

Ответы [ 2 ]

2 голосов
/ 21 сентября 2012

Вы можете использовать

@Produces("application/json; charset=UTF-8")

аннотации для сервисов jax-rs

1 голос
/ 13 октября 2011

Боюсь, что серверная сторона отправляет мусор и вызывает исключение на стороне клиента.

Проблематичным является информация заголовка HTTP типа Content.Он установлен на:

text/html; charset=charset=UTF-8

Как видите, слово charset повторяется.Таким образом, ваш клиент пытается декодировать его, используя кодировку под названием charset=UTF-8, которая, конечно же, не существует.

Лучшее решение было бы, если бы проблема была решена на стороне сервера.Но я не знаю, сможете ли вы исправить это там.Если нет, следующий лучший способ - попытаться исправить заголовок HTTP, прежде чем пытаться получить содержимое ответа.

...