JAXB `@XmlValue` deserializing not working with records
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza ejecutando la reproducción Main proporcionada con Java 17 e inspecciona la ruta de XmlTextDeserializer mostrada en el stack trace durante readValue. Se considera terminado cuando el record que contiene @XmlValue y @XmlAttribute se puede serializar y después deserializar sin la IllegalAccessException.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
@XmlAttribute and @XmlElement seem to work fine with records, and @XmlValue seems to work when serializing but deserializing fails with java.lang.IllegalAccessException
public class Main {
public record TestObject (
@XmlValue
String name,
@XmlAttribute
int age) {}
public static void main(String[] args) throws JsonProcessingException {
XmlMapper xmlMapper = new XmlMapper();
JakartaXmlBindAnnotationModule module = new JakartaXmlBindAnnotationModule();
xmlMapper.registerModule(module);
TestObject testObject = new TestObject("foo", 12);
String xml = xmlMapper.writeValueAsString(testObject);
TestObject testObject1 = xmlMapper.readValue(xml, TestObject.class);
}
}
stacktrace:
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not set final java.lang.String field org.example.Main$TestObject.name to java.lang.String
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:276)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty._throwAsIOE(SettableBeanProperty.java:627)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty._throwAsIOE(SettableBeanProperty.java:615)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty._throwAsIOE(SettableBeanProperty.java:638)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.set(FieldProperty.java:193)
at com.fasterxml.jackson.databind.deser.impl.PropertyValue$Regular.assign(PropertyValue.java:60)
at com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator.build(PropertyBasedCreator.java:211)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:519)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1405)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)
at com.fasterxml.jackson.dataformat.xml.deser.XmlTextDeserializer.deserialize(XmlTextDeserializer.java:96)
at com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:91)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4730)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3677)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3645)
at org.example.Main.main(Main.java:25)
Caused by: java.lang.IllegalAccessException: Can not set final java.lang.String field org.example.Main$TestObject.name to java.lang.String
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:76)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:80)
at java.base/jdk.internal.reflect.UnsafeQualifiedObjectFieldAccessorImpl.set(UnsafeQualifiedObjectFieldAccessorImpl.java:79)
at java.base/java.lang.reflect.Field.set(Field.java:799)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.set(FieldProperty.java:190)
... 12 more
I'm using java 17 and jackson 2.14.1
- Lenguaje dominante
- Java
- Estrellas
- 636
- Forks
- 250
- Merge medio
- 7 h 10 min
- PR fusionados (30 d)
- 8
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de FasterXML/jackson-dataformat-xml
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
FasterXML/jackson-dataformat-xml#931 · 3 comentarios ·
-
XmlMapper with `FAIL_ON_UNKNOWN_PROPERTIES` fails on whitespace-only elementPosiblemente ocupada @arimu1 la tomó hace 89 días. Abiertoto-evaluate
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
3.x
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
FasterXML/jackson-dataformat-xml#787 · 1 comentario ·
Todos los issues de FasterXML/jackson-dataformat-xml
Issues similares
-
Cleanup: restore the interrupt flag in AiFailureAnalyzerPosiblemente ocupada @Rishankgupta08 la tomó hoy. Abiertogood first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
seleniumboot/selenium-boot#258 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
dense-analysis/ale#5181 ·
-
bug subsystem:agent-harness triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
ShaftHQ/SHAFT_ENGINE#8043 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
johanhaleby/occurrent#1505 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día