Hello
I’m currently facing an issue with the javaarchitecture:S7027 rule in Java. SonarQube Server 2025.1.1.104738 reports the following message: “This class is part of 3 cycles containing 4 classes within package…”. However, the code doesn’t look incorrect to me, and using an abstract class for DistributionModeDto is required — otherwise Jackson isn’t able to deserialize it properly (it’s a DTO exposed on a REST API).
What do you think about this situation?
Thanks for your help,
Alexis
- Language: JAVA
- Rule: javaarchitecture:S7027
- Opinion: It’s a “false-positive” alert because there is no real cycle
- Version: SonarQube Server 2025.1.1.104738
@Data
@Schema(description = "The DTO exposed on a REST Api")
public class DistributionListDto {
@JSonProperty
private List<DistributionModeDto> mediums;
}
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "medium",
visible = true
)
@JsonSubTypes({
@JsonSubTypes.Type(value = MailDistributionMode.class, name="Mail"),
@JsonSubTypes.Type(value = FtpDistributionMode.class, name="Ftp")
})
@Schema(
description = "",
discriminatorProperty = "medium",
discriminatorMapping = {
@DiscriminatorMapping(value = "Mail", schema = MailDistributionMode.class),
@DiscriminatorMapping(value = "Ftp", schema = FtpDistributionMode.class),
}
)
public abstract sealed class DistributionModeDto permits MailDistributionModeDto, FtpDistributionModeDto {
@JSonProperty
private String medium;
}
@Data
@Schema(description = "Describe a distribution by mail")
public final class MailDistributionModeDto extends DistributionModeDto {
@JsonProperty
private String subject;
@JsonProperty
private String message;
@JsonProperty
private List<@Email String> recipients;
}