FasterXML / FasterXML/jackson-modules-base

ClassCastException when using XmlAdapter with XmlEnum

オープン
#256 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る
jaxb-annotations
主要言語
Java
スター
180
フォーク
80
平均マージ
3時間 26分
マージ済み PR(30日)
1

説明

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

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。