com.sun.faces.renderkit.html_basic.TextRenderer

时间:2017-03-16 15:16:41

标签: java jsf sonarqube

在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>

1 个答案:

答案 0 :(得分:5)

我认为这是一种误报。 com.sun.faces的用法是内部实现特定类的用法,但对于JSF而不是JDK。其他JVM或某些新版本的JDK不会删除这些类。您只需将代码绑定到Sun的JSF实现(Oracle的#f),这可能对您不利或不合适。

GitHub查看该规则的代码,看起来它可配置为避免此类误报,但将exclude属性设置为以逗号分隔的列表。我不知道你在UI中究竟能做到这一点,但https://docs.sonarqube.org/display/SONARQUBE50/Configuring+Rules可能是一个起点。