Pregunta

Estoy escribiendo una ruta usando Camel y Smooks, con el productor como un repositorio JPA que produce una lista de objetos JPA, que necesito enviar a un servidor SFTP como un archivo de ancho fijo.

Esto es lo que creo que se requiere para que esto ocurra

  1. El repositorio que usa JPA para producir una lista de objetos (tengo esto)
  2. Un mapeo Smooks to Flatpack que toma la versión XML de la lista mencionada anteriormente, y la transforma en un archivo de ancho fijo
  3. Una ruta de camello que comienza con el repositorio y termina con el archivo que se envía a través de SFTP:

Aquí está el código que tengo para esto:

public class RetirementRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        onException(Throwable.class)
                .maximumRedeliveries(3)
                .useExponentialBackOff()
                .backOffMultiplier(4)
                .logRetryAttempted(true)
                .handled(true)
                .log(LoggingLevel.ERROR, "Error transmitting file to miliman")
                .to("log:org.fuwt?level=ERROR&showAll=true");

        //define the fixed width mapping
        FlatpackDataFormat df = new FlatpackDataFormat();
        df.setDefinition(new ClassPathResource("META-INF/smooks/fuintegration/retirement-fixed-width-mapping.xml"));
        df.setFixed(true);
        df.setIgnoreFirstRecord(false);

        from("bean:retirementRepository?method=getRetirementMembers")
                .to("log:org.fuwt?level=INFO")
                .transacted("CRM_PROPAGATION_REQUIRED")
                .routeId("retirement_member_exchange")
                .aggregate(property("CamelCreatedTimestamp"), new RetirementAggregationStrategy()).completionFromBatchConsumer()
                .marshal(df).log("log:org.fuwt?level=ERROR&showAll=true")
                .to("file://Users/smohamed/tests/?fileName=marshal.test.txt");
    }
}

Sin embargo, cuando ejecuto una prueba unitaria, recibo el siguiente error:

ArrayList cannot be converted to RetirementMember

Lo que creo que significa que Flatpack no sabe qué hacer con la lista, y necesita trabajar por objeto por objeto.

Por lo tanto, lo que estoy buscando es un mapeo de Smooks similar a la plantilla de Freemaker, pero en lugar de una plantilla Freemaker, quiero usar las definiciones de columnas de Flatpack:

<?xml version='1.0'?>  
<!DOCTYPE PZMAP SYSTEM "flatpack.dtd" >  
<PZMAP>  
    <COLUMN name="ssn" length="11" />  
    <COLUMN name="lastName" length="20" />  
    <COLUMN name="firstName" length="15" />  
</PZMAP>

¿Cuál es la mejor manera de hacerlo? No hay mucha documentación disponible y he estado buscando semanas

Gracias

Sam

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top