EN · DE · RU · FR · ES

#753: XmlConstants.java

projectforge-business/src/main/java/org/projectforge/framework/xmlstream/XmlConstants.java Clase de constantes Java — valores centinela para el framework XmlStream. 36 líneas. Fuente: projectforge-business/src/main/java/org/projectforge/framework/xmlstream/XmlConstants.java 36 líneas · 7 código · 25 comentarios · 4 en blanco
Propósito: Una clase de constantes global que contiene tres valores centinela — números/cadenas mágicas que se garantiza que nunca aparecerán en datos reales, utilizados por el serializador XmlStream para detectar condiciones de "valor predeterminado no establecido" y por los convertidores para representar nulo.

Tres constantes

  1. MAGIC_INT_NUMBER = -21111970 — Un número negativo de ocho dígitos que nunca será un ID o cantidad legítimo. Se utiliza como valor predeterminado para defaultIntValue en la anotación @XmlField. Cuando un campo int es igual a este valor, NO se serializa a XML — ahorrando espacio. Probablemente derivado de la fecha de nacimiento de un desarrollador (21.11.1970), una práctica común para elegir números mágicos inofensivos.
  2. MAGIC_STRING = "faiNg8jojae4Aiy5thaiz7Iefu4Egoarafa6Fu3xEekil8ae" — Una cadena aleatoria de 46 caracteres sin espacios ni caracteres especiales. Se utiliza como valor predeterminado para defaultStringValue. Ningún usuario real ingresará esto como nombre o descripción. Cuando coincide, el campo se omite durante la serialización.
  3. NULL_IDENTIFIER = "null" — Un identificador de cadena especial para valores nulos en XML. Cuando un campo es nulo, XmlObjectWriter escribe la cadena literal "null" (en lugar de omitir la etiqueta). XmlObjectReader restaura null cuando lee "null". El comentario del código advierte: "No es realmente utilizable para cadenas, pero debe ser interpretado como valor nulo por todos los demás convertidores." Para campos de cadena, el literal "null" podría ser datos legítimos, por lo que esto solo funciona para números, fechas, booleanos, etc.

Número mágico / Patrón de omisión predeterminado

El diseño: durante la serialización, si el valor de un campo es igual a su valor predeterminado declarado (de la anotación @XmlField), el campo se omite de la salida XML. Durante la deserialización, si un campo está ausente en XML, recibe el valor predeterminado. Esto reduce la salida XML (especialmente importante para campos booleanos donde false es el valor predeterminado típico) y hace que el XML sea más legible al mostrar solo los campos significativos. Las constantes MAGIC_INT_NUMBER y MAGIC_STRING sirven como centinela "no establecido" — distinguen entre "el desarrollador estableció intencionalmente un valor predeterminado de 0/cadena vacía" y "el desarrollador no estableció ningún valor predeterminado". El método hasDefaultType() en XmlObjectWriter compara con estos centinelas para decidir.

¿Por qué una clase de constantes en lugar de Enum o Config?

En Java moderno, estos podrían ser valores enum o propiedades de configuración. Pero como clase de constantes:

Consumidor: XmlObjectWriter.isDefaultType() y hasDefaultType()

hasDefaultType() verifica si se declaró explícitamente un valor predeterminado en @XmlField: Si no se declaró ningún valor predeterminado, el campo siempre se serializa. Si se declaró un valor predeterminado y el valor coincide, el campo se omite.

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 (renombrado para evitar confusión con la librería XStream)
ceb63e8a1 Encabezado de código fuente: (C) 2001-2021
7c79f1922 Copyright del encabezado fuente → 2020
dd5ca38ac CopyRight de todos los encabezados de archivos java actualizados o creados
9ebb88522 Commit inicial
Las constantes no han cambiado desde el commit inicial. Solo los encabezados de copyright y el cambio de nombre del paquete (xstreamxmlstream en cd27dd997) tocaron este archivo. La estabilidad es esperada — estos son valores centinela fundamentales; cambiarlos rompería la compatibilidad de serialización con todos los archivos XML escritos anteriormente.