尝试为固定长度文件构建解析器

时间:2017-06-27 14:34:29

标签: json apache-camel pojo jsonschema fixed-length-record

因此,我尝试构建一个解析器,它基本上接收一个固定长度的文件w /由换行符分隔的多个记录(每个记录都有可变数量的重复段)并将其解析为POJO。然后它应该将POJO写入JSON文档,并将其作为文档插入到MongoDB集合中(每个固定长度文件的集合;初步认为我可以将创建的JSON导入db,但我不是确定这是否效率更高或更低。

然而,解析器还应该能够采用某种映射csv类型的文件来定义字段名称+固定长度文件的长度。实际上,这应该允许解析器在给定映射文件的情况下解析任何固定长度的文件。

到目前为止我的想法:

  1. 考虑使用Apache Camel来处理从固定长度到POJO(BeanIO组件)的数据解组,以及将POJO编组到JSON

  2. 解析CSV以获得字段名称和字段长度。找到一些用这些信息定义POJO和JSON模式的方法(为了简单起见我假设我也可以从这个csv中提取数据类型的字段)

  3. 我需要帮助:

    1. 有没有办法从我可以从CSV中提取的数据生成POJO /类定义?

    2. 是否也可以从CSV生成某种JSON模式以将POJO封送到?

    3. 感谢。我想到这个问题时可能会有更多问题,但这就是我现在所拥有的一切。

2 个答案:

答案 0 :(得分:0)

camel中的BeanIO数据格式将帮助您编写CSV文件和POJO中的记录之间的映射。您无法通过CSV文件生成POJO类,您可以手动执行此操作。

创建映射文件后,您可以按如下方式处理文件:

<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"/>
....

答案 1 :(得分:0)

是的,问题1可能使用http://camel.apache.org/bindy.html

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

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

...
}