Domanda

Sto scrivendo un percorso usando Camel e Smooks, con il produttore come repository JPA che produce un elenco di oggetti JPA, che devo inviare a un server SFTP come file di larghezza fissa.

Ecco cosa penso sia necessario per questo

  1. Il repository che utilizza JPA per produrre un elenco di oggetti (ho questo)
  2. Una mappatura da Smooks to Flatpack che prende la versione XML dell'elenco sopra menzionato e la trasforma in un file di larghezza fissa
  3. Un percorso di cammello che inizia con il repository e termina con il file invio tramite SFTP:

Ecco il codice che ho per questo:

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");
    }
}

Tuttavia, quando eseguo un test unitario, ricevo il seguente errore:

ArrayList cannot be converted to RetirementMember

Il che penso significhi che Flatpack non sa cosa fare con l'elenco e deve lavorare su un oggetto per oggetto.

Quindi, quello che sto cercando è una mappatura Smooks simile al modello Freemaker, ma invece di un modello Freemaker, voglio usare le definizioni delle colonne di 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>

Qual è il modo migliore per farlo? Non c'è molta documentazione disponibile e cerco da settimane

Grazie

Sam

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top