FasterXML / FasterXML/jackson-modules-base

ClassCastException when using XmlAdapter with XmlEnum

Đang mở
#256 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
jaxb-annotations
Ngôn ngữ chính
Java
Star
180
Fork
80
Merge trung bình
3 giờ 26 phút
Pull request đã merge (30 ngày)
1

Mô tả

I wanted to serialize a fairly complex object structure and came across this ClassCastException.
It looks like the XML Adapter is called too early when the type is an enum.

Below snippet demonstrates the error as a JUnit test

```java

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import org.junit.jupiter.api.Test;

import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.*;

import static org.assertj.core.api.Assertions.assertThat;

public class XmlEnumAdapterTest {

private static final XmlMapper MAPPER =
XmlMapper.builder()
.defaultUseWrapper(true)
.addModule(new JaxbAnnotationModule())
.build();

@Test
void serialize() throws Exception {

final Document document = new Document(Code.RED);

String xml = MAPPER.writeValueAsString(document);

assertThat(xml).isEqualTo("RED");
}

@XmlRootElement(
name = "document"
)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
propOrder = {"_code"}
)
public static class Document {

@XmlElement(name = "code")
private final Code _code;

public Document(Code code) { _code = code; }

public Code getCode() {
return _code;
}
}

@XmlEnum
@XmlType(
name = "CodeType"
)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
public enum Code {

@XmlEnumValue("RED")
RED;
}
}

```

The test was executed with jackson-module-jaxb-annotations-2.17.2.jar

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.