Ломбок и Джексон не работают вместе с openjdk12 - PullRequest
0 голосов
/ 29 мая 2019

Воспроизводимые здесь :

Раньше у меня была 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 Ответ

0 голосов
/ 29 мая 2019

Я обнаружил, что комбинация @AllArgsConstructor и public 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

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

...