2017-06-27 9 views
1

So versuche ich einen Parser erstellen, die im Grunde eine Datei mit fester Länge w/mehrere Datensätze durch Zeilenumbruch (die jeweils eine variable Anzahl von sich wiederholenden Segmenten haben) und Parsen es zu einem POJO. Dann sollte es die POJO zu einem JSON-Dokument schreiben sowie fügen Sie es als ein Dokument in eine MongoDB Sammlung (Sammlung pro fester Länge Datei; erster Gedanke dabei ist, dass ich einfach JSON erstellt importieren db, aber ich bin nicht sicher, ob das ist mehr oder weniger effizient).Versuchen, einen Parser für feste Länge Datei

Allerdings sollte der Parser auch in der Lage sein, eine Art von csv-Typ-Mapping-Datei zu nehmen, die die Feldnamen + Längen der Datei mit fester Länge definiert. Effektiv sollte dies dem Parser erlauben, jede Datei fester Länge zu analysieren, wenn eine Zuordnungsdatei vorhanden ist.

Meine Gedanken so weit:

  1. Denken von Apache Camel mit dem unmarshalling von Daten aus fester Länge zu POJO (BeanIO Komponente) sowie Rangierung von POJO zu JSON

  2. zu handhaben
  3. Parse CSV, um Feldnamen mit Feldlänge gekoppelt zu erhalten. Finden Sie einen Weg ein POJO und JSON Schema mit diesen Informationen (der Einfachheit halber Ich gehe davon aus ich auch Datentyp des Feldes aus dieser csv ziehen kann) definieren

Was ich brauche Hilfe mit:

  1. Gibt es eine Möglichkeit, aus den Daten, die ich aus der CSV ziehen kann, POJO/Klassendefinitionen zu generieren?

  2. Ist es auch möglich, eine Art von JSON Schema von CSV zu erzeugen, um die POJO zu Marschall?

Danke. Könnte mehr Fragen haben, wenn ich darüber nachdenke, aber das ist alles was ich für jetzt habe.

+0

Eine CSV hat kein Datentyp alles, was ein String ist, Im Gegensatz zu Excel oder XML, die Metadateninformationen übertragen können. All dies kann bis zu einem gewissen Grad mit Camel erreicht werden. – Namphibian

Antwort

0

Das BeanIO Datenformat in Kamel wird Ihnen helfen, eine Zuordnung zwischen Datensätzen in CSV-Datei und POJO zu schreiben. Es gibt keine Möglichkeit, POJO-Klassen aus einer CSV-Datei zu generieren, Sie müssen dies manuell tun.

Sobald Sie Ihre Mapping-Datei zu erstellen, können Sie Ihre Dateien verarbeiten, wie folgt:

<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

Ja, möglich, die Frage 1 mit http://camel.apache.org/bindy.html

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

    @DataField(pos = 1) 
    private int orderNr; 

    @DataField(pos = 5) 
    private String isinCode; 

... 
}