Saya perlu menerima beberapa pesan dengan SOAP jadi saya telah membuat beberapa kelas dengan xsd-scheme dan maven-jaxb2-plugin seperti ini:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Claim", propOrder = {
    "field",
})
public class ClaimType {

    @XmlElement(required = true, type = Integer.class, nillable = false)
    protected Integer field;

    public Integer getField() {
        return bpType;
    }

    public void setField(Integer value) {
        this.field= value;
    }

}

Setelah menerima pesan, saya harus mengirim ini ke layanan mikro berikutnya dalam bungkus HashMap. Saya seharusnya menggunakan ObjectMapper untuk mengonversi:

//JAXB DTO --> JSON
ObjectMapper objectMapper = new ObjectMapper();
String jsonContent = objectMapper.writeValueAsString(claimType);
map.put("json", jsonContent);

//JSON --> JAXB DTO
ObjectMapper objectMapper = new ObjectMapper();
String json = map.get("json");
ClaimType claimType = objectMapper.readValue(json, ClaimType.class);

Tetapi kelas yang dihasilkan tidak memiliki konstruktor jadi saya mendapat pengecualian seperti "

Tidak ada pembuat seperti konstruktor default".

Apa praktik terbaik untuk bekerja dengan Jaxb Dto? Bisakah saya melakukan sesuatu untuk berhasil mengonversi json ini menjadi objek? Terima kasih sebelumnya!

0
MrLebovsky 19 November 2020, 13:59

1 menjawab

Jawaban Terbaik

Saya telah memecahkan masalah saya dengan menggunakan ObjectMapper MixIn:

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;

@JsonIgnoreProperties(value = {"globalScope", "typeSubstituted", "nil"})
public abstract class JAXBElementMixIn<T> {

    @JsonCreator
    public JAXBElementMixIn(@JsonProperty("name") QName name,
            @JsonProperty("declaredType") Class<T> declaredType,
            @JsonProperty("scope") Class scope,
            @JsonProperty("value") T value) {
    }
}

Dan konversinya:

import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(JAXBElement.class, JAXBElementMixIn.class);

tautan solusi

0
MrLebovsky 20 November 2020, 03:59