Вызов API REST работает из пользовательского интерфейса SOAP, но из Eclipse он не работает, даже если они находятся в одной виртуальной машине. - PullRequest
0 голосов
/ 28 октября 2019

Я использую Java-код для вызова REST API из eclipse. Несмотря на то, что настройки прокси настроены в затмении, я все равно получаю Connection Timed Out error. Этот вызов API не выполняется только с сервера среды разработки. Когда я выполняю тот же код с моего личного ноутбука, он работает нормально, и я получаю ответ. Но в виртуальной среде среды разработки запрос не направляется на прокси-сервер, а направляется непосредственно к цели.

Но из SOAPUI я могу получить ответ. В SOAPUI я также настроил те же параметры прокси.

public String updateServiceNowTicket(String sysId, String state, String workNotes) throws HttpException, IOException
       {
          // System.getProperties().put("http.proxyHost", "someProxyURL");
          // System.getProperties().put("http.proxyPort", "someProxyPort");

          // System.setProperty("java.net.useSystemProxies", "true");
          // System.setProperty("com.sun.net.ssl.checkRevocation", "false");
          // //AxisProperties.setProperty("axis.socketSecureFactory","org.apache.axis.components.net.SunFakeTrustSocketFactory");
          String KEY_PROTOCOL = "https";
          String KEY_ENDPOINT = "XXXXXXX.service-now.com";
          String KEY_URI = "/api/now/table/sc_task/";
          String KEY_USERNAME = "XXXXXXXXXXXXXXXXXX";
          String KEY_PASSWORD = "XXXXXXXXXXXXXXXXXX";

          String responseBody = "";
          int statusCode = 0;

          // JSON body
          Map<String, Object> jsonMap = new HashMap<String, Object>();
          jsonMap.put("state", state);
          jsonMap.put("work_notes", workNotes);
          Gson gson = new GsonBuilder().create();
          String jsonBody = gson.toJson(jsonMap);
          jsonMap.clear();

          HttpClient httpClient = HttpClients.createDefault();
          try
          {
             // String url = KEY_ENDPOINT + sysId;
             String url = KEY_PROTOCOL + "://" + KEY_ENDPOINT + KEY_URI + sysId;
             HttpPut putRequest = new HttpPut(url);
             System.out.println("URL: " + url);
             StringEntity entity = new StringEntity(jsonBody);

             String encodedCred = Base64
                      .encodeBase64URLSafeString((new String(KEY_USERNAME + ":" + KEY_PASSWORD).getBytes()));
             putRequest.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
             putRequest.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedCred);
             putRequest.setHeader(HttpHeaders.ACCEPT, "application/json");
             putRequest.setEntity(entity);

             log.debug("Executing request " + putRequest.getRequestLine());
             HttpResponse response = httpClient.execute(putRequest);
             try
             {

                log.debug("----------------------------------------");
                log.debug("ServiceNow Response:" + response.getStatusLine());

                responseBody = EntityUtils.toString(response.getEntity());
                statusCode = response.getStatusLine().getStatusCode();
                log.debug(responseBody);

             }
             catch (Exception e)
             {
                responseBody = "Error: " + e.getMessage();
                log.error("Error: " + e.getMessage());
             }

          }
          catch (Exception e)
          {
             responseBody = "Error: " + e.getMessage();
             log.error("Error: " + e.getMessage());
          }
          System.out.println("responseBody: " + responseBody);
          return responseBody;
       }

Получена ошибка

2019-10-28T03:10:40,973 ERROR main com.smwe.SNOWTicketClosure:120 - Error: Connect to XXXXX.service-now.com:443 [XXXXXX.service-now.com/XXX.XX.XX.XX] failed: Connection timed out: connect
responseBody: Error: Connect to XXXXXX.service-now.com:443 [XXXXXX.service-now.com/XXX.XX.XX.XX] failed: Connection timed out: connect
...