2015-04-08 12 views
6

SonarQube 5.1 segna un sacco di problemi critici dopo aver esaminato il mio codice. Tuttavia, anche la classe stessa e la classe di riferimento nel campo sono serializzabili. La classe di riferimento eredita l'interfaccia serializzabile attraverso una classe.Rendi "di classe" transitoria o serializzabile MA la classe è serializzabile

Ecco il mio esempio

public class A implements Serializable { 
    private B b; // -> Sonarcube markes this field as not serialzable 
} 

E la classe B è definita come segue

public class B extends C { 
.... 
} 

E la classe C è definito come segue

public abstract class C extends D { 
.... 
} 

E la classe D è definito

public abstract class D implements Serializable { 
    .... 
} 

L'esecuzione di FindBug nello stesso progetto non vede questi problemi. Non sono sicuro se si tratta di un bug in sonarcube o il mio codice ha altri problemi (altri campi nelle classi C, D o altro)

Qualcuno ha un indizio?

+0

Errore nel sonarcubo. – EJP

+1

Fornisci bytecode correttamente a SonarQube? (con una Q) – benzonico

+0

Cosa intendi con "Fornisci bytecode correttamente a SonarQube?" ? –

risposta

3

È probabilmente perché i file binari non vengono forniti correttamente. Ho avuto un problema simile con la mia configurazione SonarQube, poi ho scoperto che le classi che implementano Serializable sono in moduli diversi e/o in una libreria esterna.

L'impostazione dei valori corretti per sonar.java.binaries e sonar.java.libraries consente a SonarQube di individuare i file binari e determinare correttamente se le classi sono serializzabili.

+0

dove sonar.java.binaries è presente nell'impostazione di SonarCubes? – Prateek

0

Solo perché alcune classi base implementano Serializable non significa che automaticamente tutte le classi derivate siano serializzabili correttamente. Le classi derivate dovrebbero definire il proprio serialVersionUid. Anche le classi derivate potrebbero introdurre un nuovo campo i cui valori potrebbero non essere serializzabili.

Quindi, a meno SonarQube ha un suggerimento che l'autore in realtà significava la classe per essere serializzabile (possibilmente riportando implements Serializable o dichiarando serialVersionUid) è corretto per SonarQube essere suspicios su di esso da parte Liskovs principio substition.

Tuttavia la classificazione come critica potrebbe essere qualcosa che necessita di discussione. Ma questo è troppo basato sull'opinione per qui.

Problemi correlati