Ломбок и Джексон не работают вместе с openjdk12

Воспроизводится здесь:

Раньше у меня была Java 8.x все работало нормально. как открыть JDK, так и Oracle.

После обновления JDK & и Oracle JDK я получил исключения из jackson,

    Error:(10, 1) java: constructor ClientResponseData in class my.response.ClientResponseData cannot be applied to given types;
  required: no arguments
  found: java.lang.String,java.lang.String
  reason: actual and formal argument lists differ in length

Мой ClientResponseData определен следующим образом:

@JacksonXmlRootElement(localName = "ClientResponseData")
@Builder
@Getter
public class ClientResponseData {

    @JacksonXmlProperty(localName = "responseCode")
    private String responseCode;

    @JacksonXmlProperty(localName = "number")
    private String number;

}

Зависимость, которая работала для меня до обновления Java:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.9.8</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.18</version>
        <scope>provided</scope>
    </dependency>

в pom.xml я все еще использую: <java.version>1.8</java.version>

После обновления Java я должен был обновить Lombok по крайней мере до последней версии: 1.18.8

Тогда у меня начинаются проблемы.

  Error:(10, 1) java: constructor ClientResponseData in class my.response.ClientResponseData cannot be applied to given types;
  required: no arguments
  found: java.lang.String,java.lang.String
  reason: actual and formal argument lists differ in length

Это терпит неудачу на:

 return new com.fasterxml.jackson.dataformat.xml.XmlMapper().readValue(xmlString, cls);

Любая подсказка, как заставить это работать?

Я старался:

  • добавить @NoArgsConstructor - Нет

  • обновить Джексон до последней - Нет

1 ответ

Я обнаружил, что комбинация @AllArgsConstructor и общедоступной ClientResponseData() {} делает хитрость, и она начинает работать.

(Мне не нужно это с java 8, но для java11, 12 это единственный способ, которым я мог заставить его работать)

@JacksonXmlRootElement(localName = "ClientResponseData")
@Builder
@Getter
@AllArgsConstructor
@ToString
public class ClientResponseData {

    public ClientResponseData() {}

    @JacksonXmlProperty(localName = "responseCode")
    private String responseCode;

    @JacksonXmlProperty(localName = "number")
    private String number;

}

Если есть лучшее решение, пожалуйста, дайте мне знать!

Также:

@AllArgsConstructor + @NoArgsConstructor

делает трюк тоже.

Другие вопросы по тегам