2013-10-09 2 views
0

Есть ли вспомогательный метод в HTTP-клиенте, который позволяет вам использовать данные, закодированные в chunk, всякий раз, когда один кусок поступает на провод? Возможно, я забыл об этом, но я не мог найти ничего связанного с этой темой. Я видел это Chunked http decoding in java?, но ChunkedInputStream больше не доступен в HTTP Client 4.xПотребление закодированных данных с использованием Apache HTTPComponents

Вот что происходит через провод.

HttpResponseHandlerImpl.setContentType(): application/json 
HttpResponseHandlerImpl.setContentLength(): -1 
58495 [main] DEBUG org.apache.http.wire - << "24[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "{"firstName":"David","lastName":"0"}" 
58495 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "24[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "{"firstName":"David","lastName":"1"}" 
58495 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "24[\r][\n]" 
58495 [main] DEBUG org.apache.http.wire - << "{"firstName":"David","lastName":"2"}" 
58501 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 
58501 [main] DEBUG org.apache.http.wire - << "0[\r][\n]" 
58501 [main] DEBUG org.apache.http.wire - << "[\r][\n]" 

Что я хочу сделать, это обработать кусок за раз. Есть ли вспомогательный метод, который позволяет вам это делать? или мне просто нужно получить InputStream и сделать это вручную? В ручном режиме, как при получении размера куска, прочитайте буфер на основе размера блока.

ответ

0

Не идеалистическое решение, так как я надеялся использовать помощник HttpComponents если разобрать порции закодированных данных, но я получил эту работу, используя Джексон JsonParser http://jackson.codehaus.org/, и я знаю, что ответ возвращаясь из моего веба-службы всегда будет Объекты JSON.

Вот код

try { 

     MappingJsonFactory jsonFactory = new MappingJsonFactory(); 

     JsonParser jsonParser = jsonFactory.createParser(inputStream); 

     JsonToken token = null; 

     token = jsonParser.nextToken(); 

     StringBuffer buffer = new StringBuffer(); 

     do { 

      if (token == JsonToken.START_OBJECT) { 
       buffer.append("{"); 
      } else if (token == JsonToken.END_OBJECT) { 
       buffer.append("}"); 
       System.out.println("Received chunk: " + buffer.toString()); 
       buffer.setLength(0); 
      } else if (token == JsonToken.FIELD_NAME) { 
       jsonParser.nextToken(); 
       buffer.append("\"" + jsonParser.getCurrentName() + "\":"); 
       buffer.append("\"" + jsonParser.getText() + "\":"); 
      } else if (token == JsonToken.VALUE_STRING) { 
       buffer.append("\"" + jsonParser.getCurrentName() + "\":"); 
       buffer.append("\"" + jsonParser.getText() + "\":"); 
      } 

      token = jsonParser.nextToken(); 

     } while (token != null); 

    } catch (Throwable th) { 
     th.printStackTrace(); 
    } 
Смежные вопросы