2017-10-19 10 views
0

Nous avons le scénario suivant:Créer PDF et envoyer du courrier par chameau apache

  • client envoie un message XML contenant deux parties
  • Première partie du XML contient des informations qui doivent être utilisés pour la création du PDF en utilisant le composant FOP et XSLT
  • Deuxième partie du XML contient des informations qui a utilisé dans le corps du message, sujet, etc.

dans le chameau co nfiguration:

  • Le XML entrant pourrait être transformé en XSL: FO (en utilisant XSLT)
  • Le composant FOP peut être appelé et qu'un document PDF est disponible
  • Le composant électronique peut être appelé, mais que J'ai les problèmes suivants
    • Le message d'origine contenant les informations pour le courrier n'est plus disponible. Une possibilité est de stocker le corps d'origine dans un en-tête ou une propriété
    • Le fichier PDF doit être ajouté en pièce jointe. Je pense qu'il n'y a pas de processeur par défaut, de filtre, etc. disponibles pour déplacer le corps vers une pièce jointe. Donc, je dois écrire mon propre processeur

Questions

  • Quelqu'un at-il un exemple de configuration de chameau pour un cas d'utilisation similaire?
  • Il peut s'agir d'un motif Splitter, mais l'exemple actuel contient plusieurs ordres dans le fichier XML et notre fichier XML ne contient aucun élément multiple mais contient des données. Existe-t-il un autre modèle qui fonctionnera dans ce cas d'utilisation?

Toute suggestion serait très utile complète.

Je l'ai essayé avec la configuration ci-dessous de chameau mais dans la stratégie de fusion le zip n'est jamais présent. On dirait qu'il n'y a pas de réponse de la route createZip

 <camel:multicast strategyRef="mergeStrategy"> 
      <camel:to uri="direct:createZip"/> 
      <camel:to uri="direct:createRequestMessage"/> 
     </camel:multicast> 

     <camel:to uri="smtp://[email protected]"></camel:to> 
    </camel:route> 

    <camel:route> 
     <camel:from uri="direct:createZip" /> 
     <camel:from uri="file:////data/tmp/zip/input"> 
      <camel:description>Reading files from the input folder</camel:description> 
     </camel:from> 

     <camel:aggregate strategyRef="zipStrategy" eagerCheckCompletion="true" completionFromBatchConsumer="true"> 
      <camel:correlationExpression> 
       <camel:constant>true</camel:constant> 
      </camel:correlationExpression> 

      <camel:setHeader headerName="dummybody"> 
       <camel:simple>${body}</camel:simple> 
      </camel:setHeader> 
     </camel:aggregate> 

     <camel:setHeader headerName="Strategy-Attachment"> 
      <camel:constant>true</camel:constant> 
     </camel:setHeader> 

    </camel:route> 


    <camel:route> 
     <camel:from uri="direct:createRequestMessage" /> 
     <camel:to uri="create_request.xslt?saxon=true" /> 
     <camel:setHeader headerName="Content-Type"> 
      <camel:constant>text/html</camel:constant> 
     </camel:setHeader> 
     <camel:setHeader headerName="Strategy-Body"> 
      <camel:constant>true</camel:constant> 
     </camel:setHeader> 
    </camel:route> 

Répondre

0

Votre itinéraire avec direct:createZip est mauvais, vous ne pouvez pas vraiment 2 x de la même route. Au lieu de cela, vous devez utiliser le modèle EIP Content Enricher: http://camel.apache.org/content-enricher.html

Il existe un <pollEnrich> que vous pouvez utiliser pour consommer le fichier. Attention à ce qu'il faut faire s'il n'y a pas de fichier, alors vous devez définir un délai d'expiration. Alors lisez la documentation à ce sujet.