Почему мой код, развернутый на сервере, ведет себя не так, как мой локальный экземпляр, продолжает генерировать GenericException, когда у меня нет проблем с его локальным тестированием - PullRequest
0 голосов
/ 14 июня 2019

Я занимаюсь разработкой Spring-boot REST API. Пользователь введет свой пароль, и моя обязанность - ввести введенный пользователем пароль и попытаться подключиться к системе. Если это не работает, то есть набор паролей по умолчанию, которые я могу использовать из базы данных для установления соединения. Если успешное соединение установлено, я возвращаю ответ с системной информацией вместе с обновленным паролем.

Местное время: В моей машине API работает, как ожидалось. Если я введу неправильный пароль, API попытается установить соединение, после возникновения исключения мой API автоматически повторяет попытку с другим паролем и продолжает пытаться использовать все имеющиеся у него пароли. Если это удается, я получаю сообщение об ошибке или сообщение об ошибке.

На сервере: Когда я даю правильный пароль, он работает как положено. Когда я даю неправильный пароль, я продолжаю ждать и, наконец, получаю исключение в пользовательском интерфейсе с кодом состояния 1000 и GenericException.

Вот что я сделал до сих пор ...

  1. Мне нужно выполнить несколько предварительных шагов, я создал класс util для выполнения этих предварительных шагов. Например:

    //Collects default passwords that might work.
    public void fetchPasswordsFromDB(Request request){}
    
    //From the list of passwords from the database, retry and iterate to next passwords on failures
    public boolean setNextPassword (Request request){}
    
  2. Приведенный выше метод получит пароли по умолчанию и установит их в запросе.

  3. Тогда в мой запрос войдет другой класс, отвечающий за установление соединения с какой-либо системой.

  4. Если мы не можем подключиться к системе, я пытаюсь подключиться со следующим доступным паролем.

  5. Я продолжаю повторять попытки, пока не исчерпаю пароли.

  6. Наконец, если я подключусь, я верну ответ обратно во внешний интерфейс вместе с ответом, который я получил.

  7. Я поместил механизм повторных попыток в блок перехвата, потому что моя служба выдает исключение, если пароль неправильный, поэтому я ловлю исключение и повторяю оттуда.

    public class Utility {
    //Collects default passwords that might work.
    public void fetchPasswordsFromDB(Request request){}
    
    //From the list of passwords from the database, retry and iterate to next passwords on failures
    public boolean setNextPassword (Request request){}
    
    }
    public class SystemConnService {
    
    @Autowired
    private SystemConnectionHelper helper;
    
    @Autowired
    private Utility util;
    
    public ResponseEntity<ResponseObject> getConnection(Request request) {
          String connection = null;
          try {
              util.fetchpasswordsFromDB(request);
              connection = helper.connectSystems(request);
          } catch (CustomException ex) {
             return new ResponseEntity<ResponseObject>(new Object, FAILURE_REASON_CODE);
          }
      return ResponseEntity<ResponseObject>(new ObjectWithConnection, SUCCESS_REASON_CODE);
    
    }
    }
    
    @Component
    public class SystemConnectionHelper {
        private String connectSystems(Request request, boolean retry) throws CustomException {
    
        String systemResponse = null;
        try {
            systemResponse = executeRequest(request.getPassword);
        } catch (CustomException) {
            if(retry) {
                systemResonse = connectSystems(request, util.setNextPassword(request));
             }
          return systemResponse;
         }
    }
    

Ожидается, что мой API всегда должен возвращать ответ обратно в пользовательский интерфейс, независимо от обработки, происходящей внутри.

Пользовательский интерфейс получает этот ответ: {"responseCode": 1000, "responseText": "Generic.exception.message"}

ОБНОВЛЕНИЕ: После дальнейшего тестирования, когда я отправляю два-три запроса одновременно на мой контроллер, по истечении определенного времени я получаю исключение NullPointerException обратно в пользовательский интерфейс с кодом причины 500. Я пытался перехватить исключение NullPointerException везде, где есть в моем коде, но я не думаю, что оно перехватывается. К сожалению, я получаю это откуда-то из бэкэнда, я не могу понять, когда и куда его бросают.

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