# javaarchitecture:S7027 and jackson deserialization with inheritance

**URL:** <https://community.sonarsource.com/t/javaarchitecture-s7027-and-jackson-deserialization-with-inheritance/152866>\
**Category:** Report False-positive / False-negative...\
**Created:** [November 21, 2025, 3:35pm UTC](https://community.sonarsource.com/t/javaarchitecture-s7027-and-jackson-deserialization-with-inheritance/152866 "2025-11-21T15:35:10Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alexis\_Gaucher](https://dub1.discourse-cdn.com/sonarsource/user_avatar/community.sonarsource.com/alexis_gaucher/32/73666_2.png) [@Alexis\_Gaucher](https://community.sonarsource.com/u/Alexis_Gaucher)\
**Post date:** [November 21, 2025, 3:35pm UTC](https://community.sonarsource.com/t/javaarchitecture-s7027-and-jackson-deserialization-with-inheritance/152866/1 "2025-11-21T15:35:10Z")

</div>

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

```java
@Data
@Schema(description = "The DTO exposed on a REST Api")
public class DistributionListDto {
   @JSonProperty
   private List<DistributionModeDto> mediums;
}

```

```java
@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;
}

```

```java
@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;
}

```
