2014-02-12 71 views
1

Sonar爲下面的代碼提供了嚴重違規錯誤(「保留堆棧跟蹤」)。以下方法用於引發異常。我應該採取哪些措施來克服這種違規行爲?如何避免Sonar的「保留堆棧跟蹤」違規?

public void exceptionHandler(String exception) throws PhDashException { 

    String exceptionMsg = exception.replaceAll("-", "_"); 

    ExceptionPhDash pHDashExceptionMapper = new ExceptionPhDash(); 
    try { 
     pHDashExceptionMapper = new ObjectMapper().readValue(exceptionMsg, ExceptionPhDash.class); 
    } catch (JsonParseException e) { 
     LOGGER.info(e.getMessage()); 
    } catch (JsonMappingException e) { 
     LOGGER.info(e.getMessage()); 
    } catch (IOException e) { 
     LOGGER.info(e.getMessage()); 
    } 
    throw new PhDashException(pHDashExceptionMapper.getMessage()); 
} 
+2

嘗試將整個異常傳遞給記錄器而不是其消息。 –

+0

@Niks Tyagi - 但最好的做法是避免printStackTrace()?對嗎? http://gazelle.ihe.net/sonar/rules/show/pmd:AvoidPrintStackTrace?layout=false –

+1

是更新爲LOGGER.info(例外) – Kick

回答

2

您已記錄每個異常;這應該是足夠的,只要保存信息而言就像下面,

LOGGER.info("Unexpected Exception has occurred", e);  

或者您應該重新拋出PhDashException如果可以的話,因爲,你應該足夠儘可能保持信息而言

throw new PhDashException(pHDashExceptionMapper); 
+0

但PhDashException使用字符串參數。和pHDashExceptionMapper是一個定製的異常類。 '公共類PhDashException延伸異常{ \t/** \t * Serial Id。 \t */ \t private static final long serialVersionUID = -4859242009502871357L; \t public PhDashException(String errorMsg){ \t \t super(errorMsg); \t} } ' –

+0

@AmilaIddamalgoda:所以,記錄正確 –

+0

明白了。 thnx :) –