2015-04-08 11 views
6

SonarQube 5.1 oznacza wiele krytycznych problemów po przejrzeniu mojego kodu. Jednak samą klasę i klasę, do której się odwołujesz, można także szeregować. Klasa, której dotyczy odwołanie, dziedziczy interfejs serializowalny za pośrednictwem klasy.Uczyń "klasa" przejściową lub serializowalną, ALE klasa jest serializowalna

Oto mój przykład

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

A klasa B jest zdefiniowany następująco

public class B extends C { 
.... 
} 

I klasa C jest zdefiniowane następująco

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

I klasa D zdefiniowano:

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

Uruchamianie FindBugs w tym samym projekcie nie powoduje wystąpienia tych problemów. Nie jestem pewien, czy jest to błąd w sonarcube lub czy mój kod ma jakieś inne problemy (inne pola w klasach C, D lub coś innego)

Czy ktoś ma jakąś wskazówkę?

+0

Błąd w sonarcube. – EJP

+1

Czy poprawnie podajesz kod bajtowy do SonarQube? (z Q) – benzonico

+0

Co masz na myśli, mówiąc: "Czy poprawnie podajesz kod bajtowy SonarQube?" ? –

Odpowiedz

3

Jest tak prawdopodobnie dlatego, że pliki binarne nie są dostarczane poprawnie. Miałem podobny problem z moją konfiguracją SonarQube, a następnie odkryłem, że klasy implementujące Serializable są w różnych modułach i/lub w zewnętrznej bibliotece.

Ustawienie prawidłowych wartości dla sonar.java.binaries i sonar.java.libraries umożliwia SonarQube zlokalizowanie plików binarnych i prawidłowe określenie, czy klasy można przekształcać do postaci szeregowej.

+0

gdzie sonar.java.binaries występują w konfiguracji SonarCubes? – Prateek

0

To, że niektóre klasy bazowe implementują Serializable, nie oznacza, że ​​automatycznie wszystkie klasy pochodne są poprawnie szeregowalne. Klasy pochodne powinny określać własne: serialVersionUid. Również wyprowadzone klasy mogą wprowadzić nowe pole, którego wartości mogą nie zostać przekształcone do postaci szeregowej.

Więc chyba SonarQube ma wskazówkę, że autor rzeczywiście oznaczało klasę być serializacji (ewentualnie przez przekształcenie implements Serializable lub deklarując serialVersionUid) jest prawidłowa dla SonarQube być suspicios o niego przez Liskovs zasady substition.

Jednak klasyfikacja jako krytyczna może być czymś, co wymaga dyskusji. Ale to jest zbyt oparte na opiniach tutaj.

Powiązane problemy