Implementación de Orika Transformation - Uso directo
La librería orika-transformation-impl proporciona una extensión a la librería de mapeo Orika, orientada a simplificar el proceso de crear transformaciones. Introduce OrikaCustomiser y TransformationService como las dos interfaces principales. OrikaCustomiser ofrece una interfaz sencilla para personalizar la fábrica de mapeo de Orika subyacente. Cada instancia de TransformationService se personalizará con un conjunto de mapeadores y enriquecedores que admitirá todas las transformaciones necesarias en un contexto dado.
Uso heredado de Orika Transformation
El orika-transformation-generation-plugin puede utilizarse para generar una TransformationFactory.
Esta Factory puede usarse para crear una instancia configurada de un TransformationService, como se muestra a continuación:
TransformationService transformationService
= new ExampleTransformationFactory(enrichmentContext).transformationService();
Una vez creado el servicio, puede llamar a los siguientes métodos para aplicar mapeos o enriquecimientos.
Destination destination = transformationService.map(sourceObject, Destination.class);
transformationService.enrich(source, myObject);
Para usar esta librería, añada la siguiente dependencia:
pom.xml<dependency>
<groupId>com.iconsolutions.ipf.core.mapper</groupId>
<artifactId>orika-transformation-impl</artifactId>
</dependency>
Uso extendido de Orika Transformation
| OrikaTransformationServiceFactory usa SpEL y Orika para proporcionar transformaciones. Cualesquiera diferencias al migrar a esta opción pueden deberse a diferencias de SpEL. |
Además, la librería ahora permite la creación de transformaciones condicionales, que antes se gestionaban mediante una combinación de código Java y configuraciones de transformación. Este enfoque anterior era difícil de mantener y añadía complejidad innecesaria.
Esta última versión de la librería amplía el uso de Spring Expression Language para introducir transformaciones condicionales.
Más detalles sobre SpEL aquí.
Esta librería introduce dos nuevas implementaciones de OrikaCustomisers usadas internamente:
-
OrikaEnrichmentsCustomiser - Proporciona la capacidad de enriquecer una entidad mediante configuración
-
OrikaMappingCustomiser - Proporciona la capacidad de mapear una entidad de un tipo a otro mediante configuración.
La otra diferencia clave es el uso de OrikaTransformationServiceFactory para construir TransformationService directamente a partir de la configuración, en lugar de mediante generación de código.
Guía paso a paso
Para usar orika-transformation-impl, se requieren los siguientes pasos:
-
Configurar la última dependencia de orika-transformation-impl.
-
Inyectar (autowire) OrikaTransformationServiceFactory en una clase de configuración de Spring.
-
Crear archivos .conf adecuados para proporcionar transformaciones de tipo enriquecimiento o mapeo.
-
Invocar el método de fábrica OrikaTransformationServiceFactory.transformationService(EnrichmentContext context, String… resource).
Paso 1. Configure la última dependencia de orika-transformation-impl
<dependency>
<groupId>com.iconsolutions.ipf.core.mapper</groupId>
<artifactId>orika-transformation-impl</artifactId>
</dependency>
Paso 2. Inyecte OrikaTransformationServiceFactory en una clase de configuración de Spring
OrikaTransformationServiceFactory es proporcionada por la clase OrikaTransformationServiceFactoryConfig, que se carga automáticamente en el Application Context de Spring.
@Configuration
public class MyMappingTransformationServiceConfig {
@Bean
public TransformationService myTransformationService(OrikaTransformationServiceFactory orikaTransformationServiceFactory) {
//logic to create TransformationService.
}
}
Paso 3. Cree archivos .conf adecuados para proporcionar transformaciones de tipo enriquecimiento o mapeo
Asegúrese de que todos los archivos .conf estén ubicados bajo src/main/resources.
Ejemplo de mapeo
El siguiente ejemplo muestra cómo se configura el mapeo condicional. Tenga en cuenta que la expresión está en formato SpEL.
source-class: com.ipf.payments.common.execution.enrichment.orika.testmodel.TestSourceObject
destination-class: com.ipf.payments.common.execution.enrichment.orika.testmodel.TestTargetObject
implicit-mapping: false
| El resto del contenido de este documento, incluidas secciones adicionales, ejemplos y bloques de código, se mantiene en inglés en los fragmentos de código y configuraciones para preservar los nombres de clases, DSLs y detalles técnicos. Las explicaciones y encabezados anteriores han sido traducidos al español según lo solicitado. |