Получение исключения StackOverflowError - PullRequest
0 голосов
/ 05 марта 2012

В соответствии с моим требованием, мне приходится много раз подключаться к веб-сервису на основе кода поля заголовка ответа "213" .. Если значение поля заголовка не 213, мы можем вызвать рекурсивно ... и если значение равно "E414 "... тогда мне не следует подключаться к веб-сервису для получения следующих данных.

1-й запрос URl веб-сервиса будет иметь двоичный формат, и я читаю преобразованный двоичный формат ... перебираю и добавляю его в stringbuilderкак я должен записать это в файл .csv, когда все будет готово.У меня ошибка переполнения стека: что может быть причиной отказа от трассировки стека

java.lang.StackOverflowError
    at java.lang.Character.toUpperCase(Character.java:4278)
    at java.lang.String.regionMatches(String.java:1383)
    at java.lang.String.equalsIgnoreCase(String.java:1119)
    at sun.net.spi.DefaultProxySelector$3.run(DefaultProxySelector.java:212)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.net.spi.DefaultProxySelector.select(DefaultProxySelector.java:201)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:358)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
    at sun.net.www.http.HttpClient.New(HttpClient.java:306)
    at sun.net.www.http.HttpClient.New(HttpClient.java:323)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
    at com.cdsMonit.utils.GPBUtility.openWsConnection(GPBUtility.java:71)
    at com.cdsMonit.utils.GPBUtility.readGPBStrucReadParamsSamplesSampling(GPBUtility.java:132)
    at com.cdsMonit.utils.GPBUtility.readGPBStrucReadParamsSamplesSampling(GPBUtility.java:135)

1-й запрос URl Webservice будет иметь двоичный формат, и я читаю преобразованный двоичный формат ... перебираю и добавляю его в stringbuilderкак я должен записать это в файл .csv, когда все будет готово.Таким образом, второй запрос URl Webservice будет

 public String getParamsNextStr() {
            try {
                paramsNextBuilder.append(ReadConfigProperies.getInstance().getConfKey("webserviceIp")).append(ApplicationConstants.WSREQ_READPARAMSSAMPLESNEXT).append("&key=").append(WebServiceCookiesEntity.getInstance().getKey().trim());
            } catch (IOException ioe) {
                GPBUTILI_LOGGER.error(ioe + " Error Occured under openWsConnection() in " + this.getClass());
            }
            return paramsNextBuilder.toString();
        }

Основной вызов начинается со следующего кода:

if (webserviceMethod.getMode().equals(ApplicationConstants.MODE_GMT)) {
     readGPBStrucReadParamsSamplesSampling(conn, ApplicationConstants.MODE_GMT, webserviceMethod);
    }

public void readGPBStrucReadParamsSamplesSampling(HttpURLConnection conn, String readParamsSamplesSamplingMode, WebServiceToolData webserviceMethod) {
  try {
     if (readParamsSamplesSamplingMode.equals(ApplicationConstants.MODE_GMT)) {
       ParamSamples.MULTI_PARAM_SAMPLES_PERGMT multi_param_samples_pergmt = null;
       {
                    multi_param_samples_pergmt = ParamSamples.MULTI_PARAM_SAMPLES_PERGMT.newBuilder().mergeFrom(conn.getInputStream()).buildPartial();
  iterateParamAllSamplesListPerGMT(multi_param_samples_pergmt, webserviceMethod);
  conn.disconnect();
  conn = openWsConnection(getParamsNextStr());
  if (!"E414".equals(conn.getHeaderField("X_ISX_STATUS_CODE"))) {
   readGPBStrucReadParamsSamplesSampling(conn, ApplicationConstants.MODE_GMT, webserviceMethod);
    }
}
     }
} catch (IOException ioExp) {
            GPBUTILI_LOGGER.error(ioExp + " Error Occured under getMULTI_PARAM_SAMPLES_PERGMT() in " + this.getClass());
        } catch (StackOverflowError overflowError) {
//            GPBUTILI_LOGGER.error(overflowError + " Error Occured under getMULTI_PARAM_SAMPLES_PERGMT() in " + this.getClass());
            overflowError.printStackTrace();
        } catch (NullPointerException npe) {
            GPBUTILI_LOGGER.error(npe + " Error Occured under getMULTI_PARAM_SAMPLES_PERGMT() in " + this.getClass());
        }
    }

Как вы видите, есть функция openWsConnection, которая получает объект подключения и ввод нового подключенияпоток .... для каждого URL.

public HttpURLConnection openWsConnection(String address) {
        try {
            if (!isURl) {
                page = new URL(address.toString());
            }
            conn = (HttpURLConnection) page.openConnection();
            conn = (HttpURLConnection) WebServiceUtilities.getInstance().writeCookies(conn, false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.connect();
//            } else {
//                conn = null;
//            }
            paramsNextBuilder.delete(0, paramsNextBuilder.length());
        } catch (MalformedURLException malFormedExp) {
            GPBUTILI_LOGGER.error(malFormedExp + " Error Occured under openWsConnection() in " + this.getClass());
        } catch (ProtocolException protocaolExp) {
            GPBUTILI_LOGGER.error(protocaolExp + " Error Occured under openWsConnection() in " + this.getClass());
        } catch (IOException ioExp) {
            GPBUTILI_LOGGER.error(ioExp + " Error Occured under openWsConnection() in " + this.getClass());
        }
        return conn;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...