【问题标题】:Java client has trouble to read big responses from wcf rest serviceJava 客户端无法从 wcf 休息服务读取大响应
【发布时间】:2011-05-27 17:12:05
【问题描述】:

我正在尝试使用 android 2.1 上的 java 客户端来使用 rest WCF 服务。 它适用于小的响应。当我试图通过获得 1000+ 字符响应来进一步推动时,reader.read(buffer) 未能读取所有字符。这导致脚本的最后一行返回:JsonException unterminated string at character 8193 "{plate,...

我的 android 设备在模拟器 android 启动之前开始出现此错误(字符 1194 而不是 8193)。有人知道如何获取完整消息吗?

客户代码:

HttpGet request = new HttpGet(SERVICE_URI + "/GetPlates");
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
HttpEntity responseEntity = response.getEntity();
char[] buffer = new char[(int)responseEntity.getContentLength()];
InputStream stream = responseEntity.getContent();
InputStreamReader reader = new InputStreamReader(stream);
reader.read(buffer);
stream.close();         
JSONArray plates = new JSONArray(new String(buffer));

服务器配置:

<webHttpBinding>
    <binding name="big_webHttpBinding" maxReceivedMessageSize="4097152" maxBufferSize="4097152" maxBufferPoolSize="4097152">
      <readerQuotas maxStringContentLength="4097152" maxArrayLength="4097152" maxBytesPerRead="4097152" maxNameTableCharCount="4097152" maxDepth="4097152"/>
    </binding>
  </webHttpBinding>

【问题讨论】:

    标签: java android httpwebrequest wcf


    【解决方案1】:

    代替

    char[] buffer = new char[(int)responseEntity.getContentLength()];
    InputStream stream = responseEntity.getContent();
    InputStreamReader reader = new InputStreamReader(stream);
    reader.read(buffer);
    stream.close(); 
    

    这样做:

    String jsonText = EntityUtils.toString(responseEntity, HTTP.UTF_8);
    

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多