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

问题描述 投票:0回答:3

我在运行sonarqube分析后得到低于错误我收到错误

使“getPreAHistFlt”瞬态或可序列化“

我们如何解决这个问题?

代码段:

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; 
    } 
} 
java serialization sonarqube sonarlint
3个回答
3
投票

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

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

或者:

  • 通过使其成为transient从序列化中排除该字段;
  • GetPreAHistFlt实现Serializable(但要注意有效的Java项目,了解为什么在执行之前应该仔细考虑实施Serializable);
  • 从中提取相关(可序列化)字段。

1
投票

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


0
投票

这可以通过将类GetPreAHistFlt设置为可序列化来完成。

© www.soinside.com 2019 - 2024. All rights reserved.