com.sun.faces.renderkit.html_basic.TextRenderer存在哪些Java API替换(如果有)

Dan*_*ray 1 java jsf sonarqube

在Java Web项目(在Tomcat&JSF&Spring上运行)上,编写了一个自定义渲染器,即使要转换的值也要调用自定义转换器null,如下所述:JSF Custom Converter未调用null值

但是,SonarQube扫描正在检测import线路上的问题,即:

import com.sun.faces.renderkit.html_basic.TextRenderer;
Run Code Online (Sandbox Code Playgroud)

因为它是一个com.sun.*包而不是标准的Java API包.规则说明指出:

不应使用"sun.*"包中的类(鱿鱼:S1191)

sun.*com.sun.*包中的类被视为实现细节,而不是Java API的一部分.

迁移到新版本的Java时,它们可能会导致问题,因为没有向后兼容性保证.同样,当转移到不同的Java供应商(例如OpenJDK)时,它们可能会导致问题.

这些类几乎总是由应该使用的Java API类包装.

不合规的代码示例

import com.sun.jna.Native;     // Noncompliant
import sun.misc.BASE64Encoder; // Noncompliant
Run Code Online (Sandbox Code Playgroud)

这很有道理,但我找不到这个类的Java API包装器,只找到该类所在的源代码和包...在这种情况下采取的适当措施是什么?

Ser*_*gGr 6

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

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