Lección 8: Protocolos de mensajería Flashcards
Protocolos: Formato
• La especificación del protocolo define el formato de los
mensajes.
• El formato implica tanto el tipo de representación como el
contenido de los mismos.
• La representación puede ser: texto plano, csv, json, xml,
binario, representaciones no estándares, etc.
• El contenido dependerá de las necesidades funcionales.
Características generales de los protocolos.
- Protocolos a nivel de aplicación (Nivel 7 OSI)
- Protocolos son independientes de las capas inferiores.
- Los protocolos definen el formato de los mensajes, su significado y flujo esperado.
- Usan lenguajes de definición (HTML, CSS, …)
Protocolos estandarizados
FIXML, FIX, FPML o ISO2022
Protocolos: Significado
• Cada campo / tipo / elemento / mensaje del protocolo tiene un
significado funcional.
• El protocolo define el significado funcional de cada elemento de
forma unívoca
Protocolos: Flujo
• Los protocolos pueden o no definir un flujo específico de mensajes.
• Algunos protocolos como FIX además tienen su propio
mecanismo de creación y mantenimiento de sesión.
Especificación de un protocolo
- A través de un lenguaje de definición.
• Lo normal es definir el formato con un lenguaje y el significado
y el flujo aparte en forma de documentación.
Ejemplos de lenguajes de especificación
- • XSD (XML Schema Definition) se utiliza para definir mensajes representados en XML o
JSON.
• Swagger para definir una API REST y sus correspondientes mensajes.
¿Qué es XML?
El XML es un lenguaje de marcado basado en texto que tiene una estructura de auto-descripción y puede definir efectivamente otro lenguaje de marcado (a diferencia de HTML que está predefinido).
Introducción a XSD
- Es un lenguaje de definición.
- No se puede programar directamente sobre una definición de protocolo, hay que usar un lenguaje de programación.
•Es la base de los protocolos financieros FIXML, FPML, ISO y de la mensajería sobre JMS en XML.
•También es la base de la representación XML utilizada ampliamente en llamadas REST y servicios SOAP.
•La definición XSD se pensó para representar XML, pero se puede utilizar con otras representaciones (Json, Binario, custom).
Lo que se puede definir con XSD.
- Tipos de datos.
- Extensiones sobre tipos de datos.
- Mensajes.
- Campos y tipos de los campos de un mensaje.
- Campos complejos que a su vez tienen mas campos con sus tipos (complextype)
- Atributos.
- Herencia mediante el uso de “choices”
- Mapas y arrays
XSD: Esquema y espacio de nombres
- Basado en el concepto de esquema
• Cada “esquema” xsd es un fichero que contiene parte o la totalidad de una definición.
• Cada esquema puede definir un “namespace”, de esta forma un tipo o elemento pertenecerá a un “namespace” específico.
XSD: Element, complex type, type
- Define un elemento con un tipo específico (como un campo de una clase)
- Define el tipo de un elemento.
- Puede ser un tipo simple (int, string, double) o un tipo complejo.
- Define un tipo complejo, un tipo complejo no es mas que un conjunto de elementos (como una clase en java)
- Define una secuencia de elementos.
Conversión del protocolo a lenguaje de programación
- Necesitamos convertir el protocolo en código de un lenguaje de programación.
- Convertir los mensajes y tipos complejos en clases con campos. (DTOs – Data Transfer Objects)
- Convertir los espacios de nombres a “paquetes” (Java) o “namespaces” (C++).
- Convertir los tipos en tipos propios del lenguaje.
- Traducir herencias, arrays, mapas, etc.
- Crear “serializadores” para leer y escribir los objetos en el formato de representación que se vaya a utilizar (XML, Binario, JSON, etc).
Generación de código: DTOs + Traductores
• Generación Manual
• Se crea el código de los DTO y traductores a mano a partir de la
especificación.
- Puede haber muchos errores y cualquier cambio se tiene que hacer de forma manual.
- Generación Automática
- El código se genera automáticamente a partir de la especificación.
- Poco propenso a errores.
- Un cambio de protocolo únicamente requiere volver a generar.
¿Qué es XJC?
XJC es una herramienta de Java SE que compila un archivo de esquema XML en clases Java completamente anotadas.
Generación automática: XJC
• XJC permite generar código Java y traductores a XML a partir de una especificación XSD.
• Las clases Java generadas están anotadas con anotaciones JAXB.
• Las anotaciones definen como “mapear” las clases Java con su
definición XSD.
• También permite el paso contrario, a partir de clases Java anotadas,
generar el equivalente XSD.
• JAXB es capaz de convertir los objetos de las clases anotadas a XML
y viceversa mediante traductores (marshallers, unmarshallers).
• Tanto XJC como JAXB forman parte del estándar Java y se incluyen
con la instalación de la JVM.
¿Qué es JAXB?
Java Architecture for XML Binding (JAXB) permite a los desarrolladores Java asignar clases de Java a representaciones XML. JAXB proporciona dos características principales: la capacidad de serializar las referencias de objetos Java a XML y la inversa, es decir, deserializar XML en objetos Java. En otras palabras, JAXB permite almacenar y recuperar datos en memoria en cualquier formato XML
Pasos de generador de código
• 1.Lectura o “parsing”del esquema de definición del protocolo.
- Generación de modelos a partir del esquema con la información del protocolo.
- Los modelos son objetos que entiende el generador y que tienen un formato predefinido.
• 3.Generación del código con la información de los modelos.
• Se suelen utilizar lenguajes de “templates” para generar el código.
• Se podría hacer a mano en “código”, pero hace que sea complicado cambiar la generación y son
códigos muy difíciles de entender.
- Opcionalmente también es posible:
- 4.Compilar y testear de forma automática el código generado.
• 5.Empaquetar el código en una librería.