JAXB `@XmlValue` deserializing not working with records

Abierto
#559 6 comentarios 0 reacciones 0 asignados Ver en GitHub

@cowtowncoder ya está trabajando en esto.

Desde el 20/3/2026.

  • #830 de @cowtowncoder — abierto

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
java
Área
backend

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

has-failing-test

@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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de FasterXML/jackson-dataformat-xml

Todos los issues de FasterXML/jackson-dataformat-xml

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.