javaarchitecture:S7027 and jackson deserialization with inheritance

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;
}