Ошибка залипания потока в SOAP API при открытии соединения - PullRequest
0 голосов
/ 22 октября 2019

Я получаю следующую ошибку в журналах Weblogic

ExecuteThread: '211' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1571480214205> <BEA-000337> <[STUCK] ExecuteThread: '98' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "60,042" seconds working on the request "Workmanager: default, Version: 0, Scheduled=false, Started=true, Started time: 60042310 ms
", which is more than the configured time (StuckThreadMaxTime) of "60,000" seconds in "server-failure-trigger". Stack trace:
        sun.nio.ch.DevPollArrayWrapper.poll0(Native Method)
        sun.nio.ch.DevPollArrayWrapper.poll(DevPollArrayWrapper.java:223)
        sun.nio.ch.DevPollSelectorImpl.doSelect(DevPollSelectorImpl.java:84)
        sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:87)
        sun.nio.ch.SelectorImpl.select(SelectorImpl.java:98)
        weblogic.socket.NIOSocketMuxer$NIOInputStream.readInternal(NIOSocketMuxer.java:844)
        weblogic.socket.NIOSocketMuxer$NIOInputStream.read(NIOSocketMuxer.java:788)
        weblogic.socket.NIOSocketMuxer$NIOInputStream.read(NIOSocketMuxer.java:771)
        java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
        java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
        java.io.BufferedInputStream.read(BufferedInputStream.java:334)
        weblogic.net.http.MessageHeader.isHTTP(MessageHeader.java:310)
        weblogic.net.http.MessageHeader.parseHeader(MessageHeader.java:232)
        weblogic.net.http.HttpClient.parseHTTP(HttpClient.java:549)
        weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:639)
        weblogic.net.http.SOAPHttpURLConnection.getInputStream(SOAPHttpURLConnection.java:37)
        ***com.infosys.ci.fioutbound.custom.SmsSenderDrc.sendSms(SmsSenderDrc.java:229)***
        com.infosys.ci.fioutbound.custom.SmsSenderDrc.executeOutboundRequest(SmsSenderDrc.java:70)
        com.infosys.ci.fiusb.app.AbstractOutboundServiceProvider.executeService(Unknown Source)
        com.infosys.ci.fiusb.app.FIUsbServiceExecutor.executeService(Unknown Source)

Ошибка из файла JAR (SmsSenderDrc.sendSms), который отправляет запрос SOAP API в стороннюю систему. Этот файл jar вызывается из моего приложения каждую 1 минуту. Код в банке выглядит следующим образом -

public String sendSms(String reqXml, String messangerEngine)
  {
    String smsService = messangerEngine;

    String outputString = "";
    String responseString = "";
    try
    {
      String soapAction = "http://www.testurl/SendSMS";
      URL smsServiceUrl = new URL(smsService);
      URLConnection conn = smsServiceUrl.openConnection();
      HttpURLConnection httpconn = (HttpURLConnection)conn;
      ByteArrayOutputStream bout = new ByteArrayOutputStream();
      byte[] buffer = new byte[reqXml.length()];
      buffer = reqXml.getBytes();
      bout.write(buffer);
      byte[] b = bout.toByteArray();
      httpconn.setRequestProperty("Content-Length", 
        String.valueOf(b.length));
      httpconn.setRequestProperty("Content-Type", 
        "text/xml;charset=utf-8");
      httpconn.setRequestProperty(smsService, smsService);
      httpconn.setRequestProperty("SOAPAction", soapAction);
      httpconn.setRequestMethod("POST");
      httpconn.setDoOutput(true);
      httpconn.setDoOutput(true);
      OutputStream out = httpconn.getOutputStream();
      out.write(b);
      InputStreamReader isr = new InputStreamReader(  //line no 229
        httpconn.getInputStream());

      BufferedReader in = new BufferedReader(isr);
      while ((responseString = in.readLine()) != null) {
        outputString = outputString + responseString;
      }
      isr.close();
    }

Как закрыть соединение или ввести тайм-аут, чтобы избежать зависания потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...