sonarQube 报告错误 - 使字段瞬态或可序列化

sonarQube reporting bug - make field transient or serializable

我在 运行 sonarqube 分析后遇到错误

Make "getPreAHistFlt" transient or serializable "

我们如何解决这个问题?

代码片段:

package com.sanju.p1; 
//webfault and namespace
@WebFault(name = "getPreAHistFlt", targetNamespace = "http://www.getPreAuthorizationHistory") 
public class getPreAHistFltMsg extends Exception { 

    private com.sanju.p2.GetPreAHistFlt getPreAHistFlt;   // showing bug here 
//constructors
    public getPreAHistFltMsg() { 
        super(); 
    } 

    public getPreAHistFltMsg(String message) { 
        super(message); 
    } 

    public getPreAHistFltMsg(String message, Throwable cause) { 
        super(message, cause); 
    } 

    public getPreAHistFltMsg(String message, com.sanju.p2.GetPreAHistFlt getPreAHistFlt) { 
        super(message); 
        this.getPreAHistFlt = getPreAHistFlt; 
    } 

    public getPreAHistFltMsg(String message, com.sanju.p2.GetPreAHistFlt getPreAHistFlt, Throwable cause) { 
        super(message, cause); 
        this.getPreAHistFlt = getPreAHistFlt; 
    } 

    public com.sanju.p2.GetPreAHistFlt getFaultInfo() { 
        return this.getPreAHistFlt; 
    } 
} 

getPreAHistFltMsg extends Exception,是Throwable的子类; Throwable 实现了 Serializable,因此 Throwable 的所有子类也传递地实现了 Serializable

据推测,com.sanju.p2.GetPreAHistFlt 没有实现 Serializable。因此,如果您尝试序列化该字段为非空的 getPreAHistFltMsg,它将失败,因为该字段的值无法序列化。

或者:

  • 将该字段从序列化中排除,使其成为 transient;
  • 使 GetPreAHistFlt 实施 Serializable(但请注意 有效 Java 项关于实施 Serializable 的原因在做之前你应该仔细考虑);
  • 从中提取相关的(可序列化的)字段。

我认为解决它的最简单方法是更改​​ class GetPreAHistFlt 以实现 Serializable 接口。

这可以通过使 class GetPreAHistFlt 可序列化来完成。