Метод Commons-lang StringUtils isNotBlank все еще вызывает NPE - PullRequest
1 голос
/ 13 марта 2020

Поддерживает ли Sonar commons-lang StringUtils?

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
 </dependency>

Env:

INFO: SonarQube Scanner 3.2.0.1227
INFO: Java 1.8.0_121 Oracle Corporation (64-bit)
INFO: Linux 4.19.2-1.el7.elrepo.x86_64 amd64

Код Community Edition версии 7.6 (сборка 21501) для воспроизведения этой проблемы:

public class DetectorImport {
    public String check1(Nonentity nonentity) {
        String s;
        if(nonentity == null) {
            s = null;
        }else {
            s = nonentity.getName();
        }
        if(StringUtils.isNotBlank(s)) {
            s = s.replaceAll("(", "(");
        }
        return s;
    }
}

Из этой группы сонаров в Google упоминается, что методы common.langs поддерживаются сонаром.

https://groups.google.com/forum/#! Topic / sonarqube / aluTP63hfyA

Возможно, вы могли бы использовать другой подход к использованию других служебных классов, обычно используемых в Java проектах. В настоящее время мы поддерживаем методы из commons-lang StringUtils (v2 и v3), предварительные условия для гуавы и java 8 методов из java .util.Objects (nonNull, isNull, requireNonNull). Поскольку мы знаем, как ведут себя эти методы, мы можем правильно обрабатывать такие вызовы и отбрасывать похожие FP. Конечно, я не хочу заставлять вас использовать такие библиотеки, чтобы сделать анализатор счастливым. :)

изменение вышеуказанного кода на следующий действительно решает эту проблему:

public class DetectorImport {

    public String check1(Nonentity nonentity) {
        String s;
        if(nonentity == null) {
            s = null;
        }else {
            s = nonentity.getName();
        }
        if(s !=null) {
            s = s.replaceAll("(", "(");
        }

        return s;
    }
}

Приведенный выше вопрос скопирован с

https://community.sonarsource.com/t/commons-lang-stringutils-isnotblank-method-still-raise-npe/21517

Я не ОП в Сонаре, но я предоставил свое решение там. У меня был точно такой же вопрос, поэтому я копирую решение другим, кто здесь оказался.

1 Ответ

1 голос
/ 13 марта 2020

Мы используем SonarScanner, а не плагин maven sonar для наших сканов. И для нас проблема заключалась в том, что переменная «sonar. java .libraries» была установлена ​​неправильно. Я добавил цель «dependency:copy-dependencies» как часть выполнения maven. Это скопировало все зависимости в нужное место, затем я установил свойство “-Dsonar.java.libraries=target/dependency”, и все начало работать так, как должно.

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