Apache Camel Diviseur de Fichier par Exemple
Je me suis donné un fichier contenant des Id numériques qui sont séparées par des sauts de ligne ("\n
"):
123948
939904
129384
234049
etc. Je veux utiliser Chameau pour transformer le fichier en une instance de POJO:
public class IDFile {
private String fileName; //The name of the file
private List<Long> ids; //All the IDs in the file (123948, 939904, etc.)
//Constructor, getters/setters, etc.
}
Je suis en train de voir si je peux utiliser du Chameau Splitter composant pour ce faire le formulaire de moi, mais il se sent comme je suis en train d'essayer de forcer un ergot rond dans un trou carré:
<route>
<from uri="file://input/idfile"/>
<split streaming="true">
<tokenize token="\n" />
<to uri="bean://idfileProcessor?method=process"/>
</split>
</route>
Ci-dessus ressemble, il permettrait de diviser mon fichier dans un List<Long>
, mais j'ai besoin de nom de fichier associée avec la liste ainsi. Des idées?
- ne idfileProcessor cartes à IDFile quelque part. parce qu'il ressemble à son processeur. si c'est pourriez-vous nous montrer comment êtes-vous de traitement de l'échange?
- Merci @Ashish (+1) - je suppose que ma pensée était d'avoir la
<split>
effectuer la transformation pour moi, de sorte que par le temps que le message arrive àidfileProcessor
(oui, un ChameauProcessor
), je peux juste extraire leIDFile
POJO de l'échange comme suit:IDFile idFile = (IDFile)exchange.getIn().getBody();
. LeidfileProcessor
peut alors traiter leIDFile
instance. Désolé pour la confusion!
Vous devez vous connecter pour publier un commentaire.
Il y a un en-tête "CamelFileName" sur l'échange. Votre processeur/bean est passé à une référence à l'échange et vous pouvez obtenir l'en-tête à partir de là et de l'associer avec le jeton que vous avez été invoqué avec.
Votre itinéraire pourrait ressembler à ceci:
Le haricot que vous utilisez pour maintenir l'état sur l'échange de l'objet:
Un fichier contenant les lignes
de la fed à la route sous les noms de splitter.texte et splitter_2.txt les rendements de la suite de la sortie du journal:
HTH
idfileProcessor
(qui est une classe Java la mise en œuvre du ChameauProcessor
, et contient donc unepublic void process(Exchange)
méthode), pouvez-vous fournir un exemple de code pour comment je voudrais être en mesure d'obtenir monIDFile
exemple, le sens que j'aurais besoin à la fois de laString fileName
champ (en quelque sorte obtenu à partir de la CamelFileName-tête que vous avez mentionné) ainsi que laList<Long> ids
? Merci encore!done(Exchange)
méthode. J'ai aussi le sentiment que pas de Java bean devrait être nécessaire pour cela, et que vous pourriez le faire avec l'un des langages de script supportés droit dans le Ressort de la DSL. Peut-être que quelqu'un d'autre pourrait fournir un exemple pour qui?