SonarQube - java.time API

时间:2018-04-06 20:40:49

标签: java sonarqube

在实现LocalDataTime接口的类中使用LocalDateSerializableSerializable类。 SonarQube报告说,代码应该更新为“Make”sampleDateObject“transient或serializable”,尽管它已经实现了Serializable接口。有什么建议可以解决这个问题吗?

public class SampleData implements Serializable {

...
private LocalDateTime sampleDateObject;

public LocalDateTime getSampleDateObject() {
        return sampleDateObject;
    }

    public void setSampleDateObject(LocalDateTime sampleDateObject) {
        this.sampleDateObject= sampleDateObject;
    }
 .....
}

以下是Java 1.8 API的代码片段

public final class LocalDateTime
        implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable {
....
}

以下是SonarQube在无法将java元素标识为可序列化时的描述,我看到的错误是“Make”sampleDateObject“transient or serializable”..

Serializable类中的字段本身必须是Serializable或瞬态,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数J2EE应用程序框架将对象刷新到磁盘,并且涉及具有非瞬态,非可序列化数据成员的Serializable对象可能导致程序崩溃,并为攻击者打开大门。

不合规代码示例

 public class Address {
      //...
     }

public class Person implements Serializable {
  private static final long serialVersionUID = 1905122041950251207L;

  private String name;
  private Address address;  // Noncompliant; Address isn't serializable
}

合规示例

public class Address implements Serializable {
  private static final long serialVersionUID = 2405172041950251807L;
}

public class Person implements Serializable {
  private static final long serialVersionUID = 1905122041950251207L;

  private String name;
  private Address address;
}

0 个答案:

没有答案