2017-04-03 4 views
3

Nous avons une analyse qui avorte sur le code ci-dessous, à l'exception:sonarqube 6.3 erreur pourrait-non-complet-symbolique-exécution-atteint-limite de-16000 étapes

org.sonar.java.se.ExplodedGraphWalker$MaximumStepsReachedException: reached limit of 16000 steps for method getServiceProviders#151 in class ServiceProviderService 

Nous avons examiné les règles S2259 et S2583 et souhaite conserver les notifications sur les pointeurs NULL. Cela se produit à la fois en mode "normal" et en mode de débogage (-X), donc ce n'est pas le numéro 1406. Dans notre cas, cela semble être lié à try/catch. (Voir l'exemple de méthode ci-dessous.) Serait-ce une résurgence du numéro 1295? https://jira.sonarsource.com/browse/SONARJAVA-1295 Si oui, y a-t-il un moyen d'augmenter simplement la pile de 16 000 pour que nous puissions avancer?

MÉTHODE D'EXEMPLE:

public static List<ServiceProvider> getServiceProviders() throws DAOException { 
    Connection con = null; 
    PreparedStatement stmt = null; 
    ResultSet rs = null; 
    List<ServiceProvider> serviceProviderList = new ArrayList<>(); 

    try { 
     con = DatabaseUtils.getConnection(); 
     if (con != null) { 
      stmt = con.prepareStatement(sqlSelectServiceProviders); 

      rs = stmt.executeQuery(); 
      while (rs.next()) { 
       ServiceProvider serviceProvider = new ServiceProvider(); 
       serviceProvider.setId(rs.getLong(1)); 
       serviceProvider.setName(rs.getString(2)); 
       // etc. 
       serviceProviderList.add(serviceProvider); 
      } 
     } else { 
      DAOException ourDAOException = new DAOException(); 
      ourDAOException.setMessageCode(Consts.ERROR_CANNOT_ESTABLISH_CONNECTIONS); 
      throw ourDAOException; 
     } 
    } catch (DAOException daoexcep) { 
     throw daoexcep; 

    } catch (Exception sqlex) { 
     log.error(ErrorType.SYSTEM + ": " + Consts.ERROR_CANNOT_GET_SERVICE_PROVIDER + " - " + sqlex); 
     log.error(sqlex); 
     try { 
      if (con != null) { 
       con.rollback(); 
      } 
     } catch (SQLException ex) { 
     } 
     DAOException ourDAOException = new DAOException(sqlex); 
     ourDAOException.setMessageCode(Consts.ERROR_CANNOT_GET_SERVICE_PROVIDER); 
     throw ourDAOException; 
    } finally { 
     if (con != null) { 
      try { 
       con.close(); 
      } catch (SQLException e) { 
      } 
      con = null; 
     } 
    } 
    return serviceProviderList; 
} 

Répondre

0

6,3 et Oracle Java nécessitent plus tard 8. Notre Java publique 7 semble être le coupable le plus probable. La cause réelle aurait pu être quelque chose d'autre, mais la mise à niveau l'a corrigé.