2012-01-19 8 views
3

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

は私が

  1. (私はこれを持っている)XMLバージョンを取るマッピングをフラットパックする
  2. AのSmooksのオブジェクトのリストを生成するためにJPAを使用してリポジトリを発生する。このために必要と思われるものです上記リストの、固定幅ファイルに変換する
  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テンプレートの、私はフラットパックの列の定義を使用する:

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

行くための最善の方法は何ですかこれについて?そこ多くのドキュメントが利用できないと私は数週間のために

おかげ

サム

答えて

2

を検索してきたこれは、フラットパックデータフォーマットは、JavaのArrayListオブジェクトではなく、一覧>オブジェクトがない必要があることが判明しましたこのマップには、ZMAP-XMLマッピングファイル内の各列の定義名とそれが表すオブジェクトが含まれているため、例えばフィールドfirstnameはmap.put("firstname","Sam")というマップになります。

apache camelのソースコードをダウンロードし、Flatpackの単体テストを見たところ、私は自分のルートを動作させることができました。

関連する問題