【问题标题】:using apache camel, smooks and flatpack使用 apache camel、smooks 和 flatpack
【发布时间】:2012-02-14 08:08:33
【问题描述】:

我正在使用 camel 和 smooks 编写路线,生产者作为 JPA 存储库,生成 JPA 对象列表,我需要将其作为固定宽度文件发送到 sftp 服务器。

这是我认为发生这种情况所必需的

  1. 使用 JPA 生成对象列表的存储库(我有这个)
  2. 一个 smooks 到 flatpack 的映射,它采用上述列表的 xml 版本,并将其转换为一个固定宽度的文件
  3. 以存储库开始并以通过 sftp 发送的文件结束的骆驼路线:

这是我的代码:

public class RetirementRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        onException(Throwable.class)
                .maximumRedeliveries(3)
                .useExponentialBackOff()
                .backOffMultiplier(4)
                .logRetryAttempted(true)
                .handled(true)
                .log(LoggingLevel.ERROR, "Error transmitting file to miliman")
                .to("log:org.fuwt?level=ERROR&showAll=true");

        //define the fixed width mapping
        FlatpackDataFormat df = new FlatpackDataFormat();
        df.setDefinition(new ClassPathResource("META-INF/smooks/fuintegration/retirement-fixed-width-mapping.xml"));
        df.setFixed(true);
        df.setIgnoreFirstRecord(false);

        from("bean:retirementRepository?method=getRetirementMembers")
                .to("log:org.fuwt?level=INFO")
                .transacted("CRM_PROPAGATION_REQUIRED")
                .routeId("retirement_member_exchange")
                .aggregate(property("CamelCreatedTimestamp"), new RetirementAggregationStrategy()).completionFromBatchConsumer()
                .marshal(df).log("log:org.fuwt?level=ERROR&showAll=true")
                .to("file://Users/smohamed/tests/?fileName=marshal.test.txt");
    }
}

但是,当我运行单元测试时,我收到以下错误:

ArrayList cannot be converted to RetirementMember

我认为这意味着 flatpack 不知道如何处理列表,并且需要在每个对象的基础上工作。

因此,我正在寻找类似于 freemaker 模板的 smooks 映射,但我想使用 flatpack 的列定义而不是 freemaker 模板:

<?xml version='1.0'?>  
<!DOCTYPE PZMAP SYSTEM "flatpack.dtd" >  
<PZMAP>  
    <COLUMN name="ssn" length="11" />  
    <COLUMN name="lastName" length="20" />  
    <COLUMN name="firstName" length="15" />  
</PZMAP>

解决此问题的最佳方法是什么?没有太多可用的文档,我已经搜索了数周

谢谢

山姆

【问题讨论】:

    标签: java apache-camel smooks flatpack


    【解决方案1】:

    事实证明,Flatpack 数据格式不需要 java ArrayList 对象,而是 List> 对象,其中 Map 包含 ZMAP-XML 映射文件中每一列的定义名称,以及它所代表的对象,所以例如,字段名将在地图中为map.put("firstname","Sam")

    我通过下载 apache camel 源代码并查看 Flatpack 的单元测试发现了这一点,之后我就可以开始工作了。

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      相关资源
      最近更新 更多