Question

J'écris un itinéraire à l'aide de chameaux et de smooks, avec le producteur comme un référentiel JPA qui produit une liste d'objets JPA, que je dois envoyer à un serveur SFTP comme fichier de largeur fixe.

Voici ce que je pense requis pour que cela se produise

  1. Le référentiel qui utilise JPA pour produire une liste d'objets (j'ai ceci)
  2. Un mappage Smooks à FlatPack qui prend la version XML de la liste mentionnée ci-dessus, et la transforme en un fichier de largeur fixe
  3. Une route de chameau qui commence par le référentiel et se termine par le fichier envoyé via SFTP:

Voici le code que j'ai pour ceci:

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

Cependant, lorsque j'exécute un test unitaire, j'obtiens l'erreur suivante:

ArrayList cannot be converted to RetirementMember

Ce qui, je pense, signifie que FlatPack ne sait pas quoi faire avec la liste et doit travailler sur une base d'objet.

Par conséquent, ce que je recherche, c'est un mappage de smooks similaire au modèle de libre entre les libres, mais au lieu d'un modèle de libres, je veux utiliser les définitions des colonnes 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>

Quelle est la meilleure manière de s'occuper de ça? Il n'y a pas beaucoup de documentation disponible et je recherche depuis des semaines

Merci

Sam

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top