JAXB `@XmlJavaTypeAdapter` not working in conjunction with `java.util.Optional`
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Commencez par le OptionalWithTypeAdapterTest fourni et sa configuration de XmlMapper, en comparant TestObject1 à TestObject3. Exécutez le test désactivé writeValueAsStringWithTypeAdapterAndOptional et examinez comment JakartaXmlBindAnnotationModule et Jdk8Module gèrent l’adaptateur pour Optional. La tâche est terminée lorsque le test peut être activé et réussit avec la valeur XML attendue en minuscules.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
@XmlJavaTypeAdapter doesn't seem to work in conjunction with JDK's Optional class. I have written a unit test in order to replicate this issue:
package org.example;
import static org.example.OptionalWithTypeAdapterTest.TestEnum.A;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.util.Optional;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class OptionalWithTypeAdapterTest {
public enum TestEnum {
A
}
public static class TestEnumAdapter extends XmlAdapter<String, TestEnum> {
@Override
public TestEnum unmarshal(String aString) {
return TestEnum.valueOf(aString.toUpperCase());
}
@Override
public String marshal(TestEnum testEnum) {
return testEnum.name().toLowerCase();
}
}
public record TestObject1(
@XmlElement @XmlJavaTypeAdapter(TestEnumAdapter.class) TestEnum testEnum) {
}
public record TestObject2(
@XmlElement Optional<TestEnum> testEnum) {
}
public record TestObject3(
@XmlElement @XmlJavaTypeAdapter(TestEnumAdapter.class) Optional<TestEnum> testEnum) {
}
private XmlMapper xmlMapper;
@BeforeEach
public void setUp() {
xmlMapper = new XmlMapper();
xmlMapper.registerModule(new JakartaXmlBindAnnotationModule());
xmlMapper.registerModule(new Jdk8Module());
}
@Test
public void writeValueAsStringWithTypeAdapter() throws JsonProcessingException {
TestObject1 testObject = new TestObject1(A);
String actual = xmlMapper.writeValueAsString(testObject);
String expected = "<TestObject1><testEnum>a</testEnum></TestObject1>";
assertEquals(expected, actual);
}
@Test
public void writeValueAsStringWithOptional() throws JsonProcessingException {
TestObject2 testObject = new TestObject2(Optional.of(A));
String actual = xmlMapper.writeValueAsString(testObject);
String expected = "<TestObject2><testEnum>A</testEnum></TestObject2>";
assertEquals(expected, actual);
}
/**
* This test fails
*/
@Disabled
@Test
public void writeValueAsStringWithTypeAdapterAndOptional() throws JsonProcessingException {
TestObject3 testObject = new TestObject3(Optional.of(A));
String actual = xmlMapper.writeValueAsString(testObject);
String expected = "<TestObject3><testEnum>a</testEnum></TestObject3>";
assertEquals(expected, actual);
}
}
This doesn't seem to have anything to do with the fact that I'm using records. I tried the same test with plain classes and the third test still fails. I'm using java 17 and jackson 2.15.0-rc1.
- Langage dominant
- Java
- Étoiles
- 636
- Forks
- 250
- Merge moyen
- 7 h 10 min
- PR mergées (30 j)
- 8
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de FasterXML/jackson-dataformat-xml
-
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
FasterXML/jackson-dataformat-xml#931 · 3 commentaires ·
-
XmlMapper with `FAIL_ON_UNKNOWN_PROPERTIES` fails on whitespace-only elementPeut-être pris @arimu1 l’a pris il y a 89 jours. Ouverteto-evaluate
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
-
3.x
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
FasterXML/jackson-dataformat-xml#787 · 1 commentaire ·
Toutes les issues de FasterXML/jackson-dataformat-xml
Issues similaires
-
Cleanup: restore the interrupt flag in AiFailureAnalyzerPeut-être pris @Rishankgupta08 l’a pris aujourd’hui. Ouvertegood first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
seleniumboot/selenium-boot#258 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
dense-analysis/ale#5181 ·
-
bug subsystem:agent-harness triage
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
ShaftHQ/SHAFT_ENGINE#8043 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
johanhaleby/occurrent#1505 ·
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour