3

プロデューサーを JPA オブジェクトのリストを生成する JPA リポジトリとしてキャメルと smooks を使用してルートを作成しています。これは固定幅ファイルとして sftp サーバーに送信する必要があります。

これが発生するために必要だと思うことは次のとおりです

  1. JPA を使用してオブジェクトのリストを生成するリポジトリ (私はこれを持っています)
  2. 上記のリストの xml バージョンを受け取り、それを固定幅ファイルに変換するフラットパック マッピングへの smooks
  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

これは、フラットパックがリストをどう処理するかわからず、オブジェクトごとにオブジェクトを処理する必要があることを意味すると思います。

したがって、私が探しているのは、freemaker テンプレートに似た smooks マッピングですが、freemaker テンプレートの代わりに、flatpack の列定義を使用したいと考えています。

<?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>

これについて最善の方法は何ですか?利用可能なドキュメントはあまりなく、私は何週間も探していました

ありがとう

サム

4

1 に答える 1

2

Flatpack Data Format には、Java ArrayList オブジェクトではなく、List> オブジェクトが必要であることが判明しました。Map には、ZMAP-XML マッピング ファイル内の各列の定義名と、それが表すオブジェクトが含まれているため、フィールド firstnameたとえば、 としてマップに表示されmap.put("firstname","Sam")ます。

apache camel のソース コードをダウンロードし、Flatpack の単体テストを調べたところ、これがわかりました。その後、ルートを機能させることができました。

于 2012-01-23T19:27:24.507 に答える