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

标签 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 包。规则描述指出:

Classes from "sun.*" packages should not be used (squid:S1191)

Classes in the sun.* or com.sun.* packages are considered implementation details, and are not part of the Java API.

They can cause problems when moving to new versions of Java because there is no backwards compatibility guarantee. Similarly, they can cause problems when moving to a different Java vendor, such as OpenJDK.

Such classes are almost always wrapped by Java API classes that should be used instead.

Noncompliant Code Example

import com.sun.jna.Native;     // Noncompliant
import sun.misc.BASE64Encoder; // Noncompliant

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

最佳答案

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

GitHub 查看该规则的代码,看起来可以配置以避免此类误报,但将 exclude 属性设置为逗号分隔列表。我不确定您可以在 UI 中的什么地方执行此操作,但是 https://docs.sonarqube.org/display/SONARQUBE50/Configuring+Rules可能是一个起点。

关于java - com.sun.faces.renderkit.html_basic.TextRenderer 存在哪些 Java API 替换(如果有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42838075/

相关文章:

java - 我怎么知道 BufferedReader 是否与 DataInputStream 链接在一起?

java - 如何失去 JMenuItem 焦点或关闭 JPopupMenu

Java多线程

sonarqube - Sonar 启动时的 Elasticsearch 批量索引错误

当计时器触发时,Jenkins 不会启动 "post build"操作

Java 检查时间戳中的时间

java - 无法在托管 Bean 中注入(inject)数据源

ajax - OmniFaces Ajax 实用程序的 updateColumn() 未更新 p :dataTable

java - 无法在 JBOSS4.2 上部署和运行 JSF2.1.6 示例

javascript - 如何在 jenkins 中为 js/ts/react 项目设置 SonarQube 扫描器