【发布时间】:2018-11-15 22:40:08
【问题描述】:
为什么 Sonar 将此标记为可能的 NullPointerException?
public void credentialSetter(@Headers Map<String, Object> headersMap) {
SoapHeader uName = new SoapHeader(new QName(NAMESPACE_URL, USERNAMETOKEN),
setCredentials(USERNAMETOKEN, this.username).getDocumentElement());
SoapHeader pTxt = new SoapHeader(new QName(NAMESPACE_URL, P),
setCredentials(P, this.pas).getDocumentElement());
两次都以“setCredentials”为单位,我尝试用 if 语句包围它以检查它是否不为空,还尝试在实际方法中检查它是否为空,以涵盖所有基础。
private Document setCredentials(String credential, String value) {
StringWriter writer = new StringWriter();
JAXBContext context;
try {
if (null != credential && null != value) {
context = JAXBContext.newInstance(value.getClass());
QName qName = new QName(NAMESPACE_URL, credential);
JAXBElement<String> root = new JAXBElement<>(qName, String.class, value);
context.createMarshaller().marshal(root, writer);
return DocumentBuilderFactory.newInstance().newDocumentBuilder()
.parse(new InputSource(new StringReader(writer.toString())));
}
} catch (Exception e) {
LOG.error("Error converting {} to XML {}", credential, e);
}
return null;
}
【问题讨论】:
-
我猜是因为setCredentials可以
return null -
@DamCx 我明白了,但它(希望)永远不会返回 null 并且 return 语句只是为了完成该方法,我可以尝试什么来代替它?
-
@DamCx 如果出现异常或凭证或值为 null,则返回 null。你能做什么取决于如果你在这里遇到异常应该发生什么:抛出运行时异常可能是一个选项。
-
我还建议不要捕获异常的基类。只捕获已检查的异常
标签: java nullpointerexception sonarqube