在Java Web项目(在Tomcat& JSF& Spring上运行)上,编写了一个自定义渲染器,即使要转换的值为null
,也要调用自定义转换器,如此处所述:JSF Custom Converter not called on null value
但是,SonarQube扫描正在检测import
行上的问题,即:
import com.sun.faces.renderkit.html_basic.TextRenderer;
因为它是com.sun.*
包而不是标准Java API包。规则说明指出:
不应使用“sun。*”包中的类(squid:S1191)
sun.*
或com.sun.*
包中的类被视为实现细节,不属于Java API。在迁移到新版本的Java时,它们可能会导致问题,因为没有向后兼容性保证。同样,它们在迁移到不同的Java供应商时会引起问题,例如OpenJDK。
这些类几乎总是由应该使用的Java API类包装。
不符合规范的代码示例
import com.sun.jna.Native; // Noncompliant import sun.misc.BASE64Encoder; // Noncompliant
这很有道理,但是我找不到这个类的Java API包装器,只找到该类所在的源代码和包...在这种情况下采取什么样的适当措施? / p>
答案 0 :(得分:5)
我认为这是一种误报。 com.sun.faces
的用法是内部实现特定类的用法,但对于JSF而不是JDK。其他JVM或某些新版本的JDK不会删除这些类。您只需将代码绑定到Sun的JSF实现(Oracle的#f),这可能对您不利或不合适。
在GitHub查看该规则的代码,看起来它可配置为避免此类误报,但将exclude
属性设置为以逗号分隔的列表。我不知道你在UI中究竟能做到这一点,但https://docs.sonarqube.org/display/SONARQUBE50/Configuring+Rules可能是一个起点。