如何保护json调用socketTimeout和httpTimeout

时间:2015-07-08 05:30:19

标签: java json

我有一个java web模块,它通过对另一个服务器的http调用执行许多json。我刚刚告诉我们的java管理团队,我需要在json通过http调用时防止socketTimeouts和连接超时,因为当没有及时收到响应时,它会在服务器上留下挂起的线程。

结果我被要求将超时设置为45秒。

我是否可以对以下代码中设置套接字和http连接超时的最佳方法提出一些建议...

  public static String readJsonFromUrl(String url) throws Exception{
      String jsonText = null;
      try {
          InputStream is = null;
          try {
              is = new URL(url).openStream();
              BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName(JsonConstants.DEFAULT_CHARSET)));
              jsonText = readAll(rd);     
          } finally {
              if (is!=null){
                  is.close();  
              }               
          }
      } catch (MalformedURLException e) {
          e.printStackTrace();
          throw new Exception(ErrorConstants.ERROR_SERVICE_MSG);
      } catch (IOException e) {
          e.printStackTrace();
          throw new Exception(ErrorConstants.ERROR_SERVICE_MSG);          
      }

      if (jsonText != null && jsonText.indexOf(JsonConstants.ERROR_MESSAGE) != -1){
          throw new Exception(ErrorConstants.ERROR_SERVICE_MSG);     
      }
      return jsonText;
  }

提前致谢

修改

我应该在上面提到过,我正在使用java 1.4.2,并且在该版本的java中,HttpUrlConnection上没有setTimeout和setReadTimeout。我一直在挖掘,但还没有找到一个关于如何做到这一点的好片段。如果有人能指出一个很好的例子,或者添加一些可能有用的代码片段,那就感激不尽了。

1 个答案:

答案 0 :(得分:0)

请勿使用tmpArrayName = employeeName.slice(0); tmpArraySal = employeeSal.slice(0); 。使用openStream(),将结果转换为openConnection(),然后调用相应的方法来设置所需的超时。然后致电HttpURLConnection获取数据。

但是动机不正确。如果存在连接超时,则没有连接,因此服务器上根本没有线程。