Apache Camel、Smooks、Flatpackを使用します
-
30-10-2019 - |
質問
私は、RAMELとSMOOKSを使用してルートを書いています。プロデューサーは、JPAオブジェクトのリストを生成するJPAリポジトリとして、固定幅ファイルとしてSFTPサーバーに送信する必要があります。
これが私がこれを起こすために必要だと思うものです
- JPAを使用してオブジェクトのリストを作成するリポジトリ(これがあります)
- 上記のリストのXMLバージョンを取得し、固定幅ファイルに変換するSmooks to Flatpackマッピング
- リポジトリから始まり、ファイルが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がリストで何をすべきかを知らないことを意味し、オブジェクトごとにオブジェクトごとに作業する必要があると思います。
したがって、私が探しているのは、フリーメーカーのテンプレートに似たスムークマッピングですが、フリーメーカーのテンプレートの代わりに、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>
これを行うための最良の方法は何ですか?利用可能なドキュメントはあまりありませんし、私は数週間検索しています
ありがとう
サム
正しい解決策はありません
所属していません StackOverflow