Coverity报错:
CID 30382(1 的 1 数):DMI:可疑方法调用 (FB.DMI_CALLING_NEXT_FROM_HASNEXT)1. defect: org.apache.camel.component.jdbc.DefaultJdbcPrepareStatementStrategy$1.hasNext() 调用了 next()
原:
@Override
public boolean hasNext() {
if (!done && !preFetched) {
next();
preFetched = true;
}
return !done;
}
@Override
public Object next() {
if (!preFetched) {
String key = parser.next();
if (key == null) {
done = true;
return null;
}
// the key is expected to exist, if not report so end user can see this
boolean contains = headerMap != null && headerMap.containsKey(key);
if (!contains) {
throw new RuntimeExchangeException("Cannot find key [" + key + "] in message body or headers to use when setting named parameter in query [" + query + "]", exchange);
}
next = headerMap.get(key);
}
preFetched = false;
return next;
}
改后:(将next()中的代码并入hasNext())
@Override
public boolean hasNext() {
if (!done && !preFetched) {
String key = parser.next();
if (key == null) {
done = true;
}
// the key is expected to exist, if not report so end user can see this
boolean contains = headerMap != null && headerMap.containsKey(key);
if (!contains) {
throw new RuntimeExchangeException("Cannot find key [" + key + "] in message body or headers to use when setting named parameter in query [" + query + "]", exchange);
}
next = headerMap.get(key);
preFetched = true;
}
return !done;
}