FasterXML / FasterXML/jackson-modules-base

ClassCastException when using XmlAdapter with XmlEnum

Abierto
#256 4 comentarios 0 reacciones 0 asignados Ver en GitHub
jaxb-annotations
Lenguaje dominante
Java
Estrellas
180
Forks
80
Merge medio
3 h 26 min
PR fusionados (30 d)
1

Descripción

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

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.