2017-06-27 1 views
1

J'essaie donc de construire un analyseur syntaxique qui prend essentiellement dans un fichier de longueur fixe w/plusieurs enregistrements séparés par saut de ligne (qui ont chacun un nombre variable de répétition de segments) et analyse à un POJO. Ensuite, il devrait écrire le POJO à un document JSON ainsi que d'insérer comme un document dans une collection MongoDB (collection par fichier de longueur fixe, la pensée initiale est ici que je peux importer créé JSON db, mais je ne suis pas sûr c'est plus ou moins efficace).Essayer de construire un analyseur syntaxique pour le fichier de longueur fixe

Cependant, l'analyseur doit également être en mesure de prendre une sorte de cartographie fichier de type csv qui définit les noms de champs + longueurs du fichier de longueur fixe. En fait, cela devrait permettre à l'analyseur d'analyser n'importe quel fichier de longueur fixe, à partir d'un fichier de mappage.

Mes pensées à ce jour:

  1. pensée d'utiliser Apache Camel pour gérer la unmarshalling des données de longueur fixe à POJO (composant BeanIO) ainsi que le triage de POJO à JSON

  2. Parse CSV pour obtenir les noms de champs couplés avec une longueur de champ. Trouver un moyen de définir un POJO et le schéma JSON avec ces informations (par souci de simplicité je suppose que je peux aussi de ce csv tirer le type de champ de données)

Ce que je dois aider à:

  1. est-il un moyen de générer des définitions POJO/classe à partir des données que je peux tirer du CSV?

  2. Est-il également possible de générer un type de schéma JSON à partir de CSV pour mars le POJO?

Merci. Je pourrais avoir plus de questions à ce sujet, mais c'est tout ce que j'ai pour l'instant.

+0

CSV n'a pas tout type de données est une chaîne, contrairement à Excel ou XML qui peut transporter des informations de métadonnées. Tout ce qui précède peut être atteint dans une certaine mesure avec Camel. – Namphibian

Répondre

0

Le format de données BeanIO camel vous aidera à écrire une correspondance entre les enregistrements dans le fichier CSV et POJO. Il n'y a aucun moyen par lequel vous pouvez générer des classes POJO à partir du fichier CSV, vous devrez le faire manuellement.

Une fois que vous créez votre fichier de mappage, vous pouvez traiter vos fichiers comme suit:

<dataFormats> 
    <beanio id="myBeanio" mapping="org/apache/camel/dataformat/beanio/mappings.xml" streamName="employeeFile"/> 
</dataFormats> 
..... 
<from uri="file:location"/> 
<unmarshal ref="myBeanio"/> 
<bean ref="myActionBean" method="processRecords"/> 
.... 
0

Oui, possible pour la question 1 en utilisant http://camel.apache.org/bindy.html

@CsvRecord(separator = ",") 
public class Order { 

    @DataField(pos = 1) 
    private int orderNr; 

    @DataField(pos = 5) 
    private String isinCode; 

... 
}