r01f.marshalling.simple
Class SimpleMarshallerMappings

java.lang.Object
  extended by r01f.marshalling.simple.SimpleMarshallerMappings
All Implemented Interfaces:
MarshallerMappings

public class SimpleMarshallerMappings
extends java.lang.Object
implements MarshallerMappings

Se encarga de construir un modelo de objetos en memoria que tiene la información para realizar el marshalling / unmarshalling de XML a objetos y viceversa Esta información de mapeo se puede obtener de dos formas: - Con un XML de definición del mapeo (ver MarshallerMappingsFromXMLLoader) - Desde anotaciones en las clases java (ver MarshallerMappingsFromAnnotationsLoader) IMPORTANTE!! (ver SimpleMarshallerBase, SimpleMarshallerSingleUseImpl y SimpleMarshallerReusableImpl - Si se van a hacer muchas operaciones de marshalling/unmarshalling, conviene CACHEAR este objeto, es decir, que este objeto sea UNICO, puesto que se reutiliza una y otra vez Ej: persistencia de objetos en BBDD en formato XML: se está continuamente transformando objetos a XML... es NECESARIO cachear el mapeo - Si únicamente se va a hacer UNA OPERACIÓN de marshalling/unmarshalling sobre un determinado tipo de objeto, NO tiene sentido mantener una cache de la definición del mapeo. Ej: carga de configuración de un XML: se pasa el XML a objetos y lo que se cachean con los objetos... NO es necesario volver a pasar de XML a objetos Internamente se utilizan dos clases auxiliares: - BeanMap: Modela una clase (nombre, paquete, miembros, tag por defecto de la que procede, etc) - FieldMap: Modela un miembro de una clase (nombre, tag del que procede, etc) Al final en memoria se tiene una estructura como la siguiente: Clase1 |_ Miembro 1 (String) |_ Miembro 2 (Clase 3) --------| |_ Miembro 3 (Clase 2) ----| | | | | | |--------------------------| | Clase 2 | |_ Miembro 1 (String) | |_ Miembro 2 (Clase 3) ----| | | | | | |--------------------------| | |------------------------------| | Clase 3 |_ Miembro 1 (Long) |_ Miembro 2 (String)


Field Summary
private  java.util.Map<java.lang.String,BeanMap> _beanMappingsByEnclosingXmlElement
          Mapa que contiene las clases relacionadas con el tag XML (se va rellenando a medida que se necesita saber que bean está "englobado" por un tag: método getBeanMapFromXmlTag)
private  java.util.Map<java.lang.String,BeanMap> _beanMappingsByType
          Mapa que contiene las clases relacionadas con su nombre (se va rellenando a medida que se cargan los mapeos: métodos loadFrom...)
 
Constructor Summary
SimpleMarshallerMappings()
           
 
Method Summary
private  void _cacheBeansMappings(java.util.Map<java.lang.String,BeanMap> loadedBeans)
          Pone los beans cargados en la cache
private static java.util.Map<java.lang.String,BeanMap> _loadFromXML(java.io.InputStream mapXmlIS, java.nio.charset.Charset charset)
          Carga el mapa de clases desde su definición en XML
(package private) static void connectBeanMappings(java.util.Map<java.lang.String,BeanMap> beansMappings)
          Conecta el objeto BeanMap en los miembros FieldMap de tipo objeto o colección Este proceso hay que hacerlo DESPUES de cargar todos los beans (tanto en MarshallerMappingsFromAnnotationsLoader como en MarshallerMappingsFromXMLLoader)
 java.lang.String debugInfo()
          Devuelve información de depuracion
 BeanMap getBeanMapFromClassName(java.lang.String beanName)
          Obtiene la definición de una clase a partir del nombre de la clase
 BeanMap getBeanMapFromXmlTag(java.lang.String tagName)
          Obtiene la definición de una clase a partir del tag xml
 void loadFromAnnotatedClasses(java.lang.Class<?>... annotatedTypes)
          Carga el mapa de clases desde su definición en base a anotaciones en las propias clases java
 void loadFromMappingDef(java.io.InputStream mapIS)
          Añade los mapeos desde el stream que se pasa como parametro
 void loadFromMappingDefFiles(java.io.File mapFile)
          Añade los mapeos del fichero que se pasa como parametro
 void loadFromMappingDefFiles(java.lang.String filePath)
          Añade los mapeos del fichero cuya ruta (que tiene que ser accesible en el classPath) se pasa como parametro
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_beanMappingsByType

private java.util.Map<java.lang.String,BeanMap> _beanMappingsByType
Mapa que contiene las clases relacionadas con su nombre (se va rellenando a medida que se cargan los mapeos: métodos loadFrom...)


_beanMappingsByEnclosingXmlElement

private java.util.Map<java.lang.String,BeanMap> _beanMappingsByEnclosingXmlElement
Mapa que contiene las clases relacionadas con el tag XML (se va rellenando a medida que se necesita saber que bean está "englobado" por un tag: método getBeanMapFromXmlTag)

Constructor Detail

SimpleMarshallerMappings

public SimpleMarshallerMappings()
Method Detail

getBeanMapFromClassName

public BeanMap getBeanMapFromClassName(java.lang.String beanName)
Obtiene la definición de una clase a partir del nombre de la clase

Parameters:
beanName - Nombre de la clase

getBeanMapFromXmlTag

public BeanMap getBeanMapFromXmlTag(java.lang.String tagName)
Obtiene la definición de una clase a partir del tag xml

Parameters:
tagName - Tag XML en el que se define la clase

loadFromAnnotatedClasses

public void loadFromAnnotatedClasses(java.lang.Class<?>... annotatedTypes)
                              throws MarshallerException
Carga el mapa de clases desde su definición en base a anotaciones en las propias clases java

Specified by:
loadFromAnnotatedClasses in interface MarshallerMappings
Parameters:
annotatedTypes - tipo(s) desde los que empezar a buscar anotaciones NOTA: No es necesario indicar TODOS los tipos sino únicamente el raíz (o raíces si se van a mapear distintos tipos raíz inconexos)
Throws:
MarshallerException - si no se puede cargar el mapeo

loadFromMappingDefFiles

public void loadFromMappingDefFiles(java.lang.String filePath)
                             throws MarshallerException
Description copied from interface: MarshallerMappings
Añade los mapeos del fichero cuya ruta (que tiene que ser accesible en el classPath) se pasa como parametro

Specified by:
loadFromMappingDefFiles in interface MarshallerMappings
Throws:
MarshallerException - si el fichero de mapeo es incorrecto

loadFromMappingDef

public void loadFromMappingDef(java.io.InputStream mapIS)
                        throws MarshallerException
Description copied from interface: MarshallerMappings
Añade los mapeos desde el stream que se pasa como parametro

Specified by:
loadFromMappingDef in interface MarshallerMappings
Parameters:
mapIS - el stream con la definición del mapeo
Throws:
MarshallerException - si el mapeo es incorrecto o no se puede cargar

loadFromMappingDefFiles

public void loadFromMappingDefFiles(java.io.File mapFile)
                             throws MarshallerException
Añade los mapeos del fichero que se pasa como parametro

Parameters:
mapFile - fichero con los mapeos
Throws:
MarshallerException - si el fichero de mapeos es incorrecto

_loadFromXML

private static java.util.Map<java.lang.String,BeanMap> _loadFromXML(java.io.InputStream mapXmlIS,
                                                                    java.nio.charset.Charset charset)
                                                             throws MarshallerException
Carga el mapa de clases desde su definición en XML

Parameters:
mapXmlIS - InputStream al XML de mapeo
charset - el charset del fichero de mapeo
Throws:
org.xml.sax.SAXException - si no se puede cargar el mapeo
MarshallerException

debugInfo

public java.lang.String debugInfo()
Description copied from interface: MarshallerMappings
Devuelve información de depuracion

Specified by:
debugInfo in interface MarshallerMappings
Returns:

_cacheBeansMappings

private void _cacheBeansMappings(java.util.Map<java.lang.String,BeanMap> loadedBeans)
Pone los beans cargados en la cache

Parameters:
loadedBeans - los beans cargados

connectBeanMappings

static void connectBeanMappings(java.util.Map<java.lang.String,BeanMap> beansMappings)
                         throws MarshallerException
Conecta el objeto BeanMap en los miembros FieldMap de tipo objeto o colección Este proceso hay que hacerlo DESPUES de cargar todos los beans (tanto en MarshallerMappingsFromAnnotationsLoader como en MarshallerMappingsFromXMLLoader)

Parameters:
beansMappings - los mapeos de beans
Throws:
MarshallerException - si hay algún error al hacer las conexiones