Here's the complete HTML translated to Spanish, with `lang="es"`, the ES link marked as active, and the title updated with `[ES]`: ```html #756: XmlObject [ES]
EN · DE · RU · FR · ES

#756: XmlObject.java

projectforge-business/src/main/java/org/projectforge/framework/xmlstream/XmlObject.java Anotación Java — marcador a nivel de clase para serialización XmlStream. 44 líneas. @Target(TYPE), @Retention(RUNTIME). Fuente: projectforge-business/src/main/java/org/projectforge/framework/xmlstream/XmlObject.java 44 líneas · 10 código · 30 comentarios · 4 en blanco
Propósito: Una anotación a nivel de clase — marca una clase como serializable/deserializable por el framework XmlStream. 44 líneas. Es el equivalente de @XmlRootElement de JAXB y la convención implícita de XStream (cualquier clase puede ser serializada). A diferencia de ellos, XmlStream requiere anotación explícita — las clases sin @XmlObject no serán procesadas ni por XmlObjectReader ni por XmlObjectWriter. Esto es una medida de seguridad: solo las clases explícitamente permitidas participan en la serialización.

Único Parámetro: alias()

Sobrescribe el nombre del elemento raíz XML. Por defecto (cadena vacía), se usa el nombre completamente calificado de la clase: org.projectforge.business.user.PFUserDO<org.projectforge.business.user.PFUserDO>. Con alias: @XmlObject(alias="user")<user>. Los alias se registran en AliasMap (#758) durante la inicialización de XmlRegistry.

Diferencia con @XmlField(alias): @XmlObject.alias establece el nombre del elemento raíz (la etiqueta que envuelve todo el objeto), mientras que @XmlField.alias establece el nombre de un elemento hijo o atributo (un campo específico).

Uso en Tiempo de Ejecución

  1. XmlRegistry al iniciar escanea el classpath (o configuración) y encuentra todas las clases anotadas con @XmlObject
  2. Para cada clase, la registra en AliasMap: Clase → alias y alias → Clase
  3. XmlObjectReader.newInstance() al encontrar un elemento XML busca la clase correspondiente mediante AliasMap.getClassForAlias(tagName)
  4. Si la encuentra — crea una instancia mediante BeanHelper.newInstance() y rellena recursivamente los campos (usando @XmlField)
  5. Si no la encuentra — devuelve Status.IGNORE (#760)

XmlObject vs. XStream @XStreamAlias

Diferencia clave: @XmlObject no es solo un alias — es un permiso explícito para la serialización. Una clase sin @XmlObject queda completamente excluida del proceso. XStream serializa cualquier clase por defecto — creando un riesgo de fuga accidental de datos (por ejemplo, serializar un proxy de Hibernate con contraseñas). XmlStream es más seguro pero requiere más trabajo manual de anotación.

Trío de Anotaciones XmlStream

AnotaciónArchivoRol
@XmlField#752Configurar la serialización del campo (nombre, tipo, valores predeterminados, formato)
@XmlObject#754Habilitar la clase para serialización con alias
@XmlOmitField#757Excluir un campo de la serialización por completo

Historial de Git

868d6abb7 2025 → 2026 (actualización de año de copyright)
63081666f Encabezados de archivos fuente: 2024→2025
b6092df09 Copyright 2023 → 2024
ab45d51fa Copyright 2001-2022 → 2001-2023
5f7ef41b8 Copyright 2021 → 2022
cd27dd997 paquete xstream → xmlstream
ceb63e8a1 Encabezado de código fuente: (C) 2001-2021
7c79f1922 Copyright del encabezado fuente → 2020
32f634b88 Optimizar importaciones
dd5ca38ac Copyright de todos los encabezados de archivos java actualizado o creado
9ebb88522 Commit inicial
La anotación tiene un atributo (alias) y no ha cambiado desde el commit inicial más allá de las actualizaciones de copyright y el cambio de nombre del paquete xstream → xmlstream. La simplicidad es intencional — esto es una puerta de permisos, no una superficie de configuración.