Ошибка сообщения sonarQube - сделать поле временным или сериализуемым - PullRequest
0 голосов
/ 03 сентября 2018

Я получаю ошибку ниже после выполнения анализа 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; 
    } 
} 

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Я думаю, что самый простой способ решить эту проблему - изменить класс GetPreAHistFlt для реализации интерфейса Serializable.

0 голосов
/ 06 сентября 2018

Это можно сделать, сделав класс GetPreAHistFlt как сериализуемый.

0 голосов
/ 03 сентября 2018

getPreAHistFltMsg extends Exception, который является подклассом Throwable; Throwable реализует Serializable, поэтому все подклассы Throwable также реализуют Serializable транзитивно.

Предположительно, com.sanju.p2.GetPreAHistFlt не реализует Serializable. Таким образом, если вы попытаетесь сериализовать getPreAHistFltMsg, где это поле не равно нулю, произойдет сбой, поскольку значение этого поля не может быть сериализовано.

Или

  • Исключить поле из сериализации, сделав его transient;
  • Сделать GetPreAHistFlt реализовать Serializable (но обратите внимание на элемент Effective Java о том, почему реализация Serializable - это то, о чем вам следует тщательно подумать, прежде чем делать);
  • Извлечение из него соответствующих (сериализуемых) полей.
...