7.2. アンマーシャリング
ASN.1 の構造化メッセージをアンマーシャリングする方法は 3 つあります。(通常はバイナリーファイル)
この最初の例では、BER ファイルペイロードを OutputStream にアンマーシャリングし、モックエンドポイントに送信します。
from("direct:unmarshal").unmarshal(asn1).to("mock:unmarshal");
2 つ目の例では、Split EIP を使用して BER ファイルペイロードをバイトアレイにアンマーシャリングします。Split EIP を適用する理由は、通常は各 BER ファイルまたは(ASN.1 構造化ファイル)には、処理する複数のレコードが含まれ、Split EIP は実際に ASN1Primitive's インスタンス(Bouncy Castle の ASN.1 の使用による)バイトアレイとしてファイルに各レコードを取得するのに役立ちます。 bcprov-jdk15on ライブラリーのサポート)Byte 配列は、ASN1Primitive のパブリック静的メソッド(ASN1Primitive.fromByteArray)を利用して ASN1Primitive に変換できます。 usingIterator=true
を設定する必要があることに注意してください。
from("direct:unmarshal").unmarshal(asn1).split(body(Iterator.class)).streaming().to("mock:unmarshal");
最後の例では、Split EIP を使用して、BER ファイルペイロードをプレーンな古い Java オブジェクトにアンマーシャリングします。Split EIP を適用する理由は、すでに前述の例で紹介されています。そのような理由を念頭に置いてください。この例では、クラスの完全修飾名またはデータフォーマットで <YourObject>.class 参照を設定する必要もあります。ここで注意すべき重要なことは、jasn1 コンパイラーでオブジェクトを生成する必要があることです。このコンパイラーは、ASN.1 構造の Java オブジェクト表現を生成する優れたツールです。jasn1 コンパイラーのリファレンスの使用方法は、[JASN.1 プロジェクトページ](https://www.openmuc.org/asn1/)を参照してください。また、maven の exec プラグインを利用してコンパイラーがどのように呼び出されるかも確認してください。たとえば、このデータ形式のユニットテストでは、ASN.1 構造(TestSMSBerCdr.asn1)の例は src/test/resources/asn1_structure
に追加されます。jasn1 コンパイラーが呼び出され、java オブジェクトの表現が ${basedir}/target/generated/src/test/java で生成
されます。この例では、モックエンドポイントまたはエンドポイントのどれでも POJO インスタンスを取得します。
from("direct:unmarshaldsl") .unmarshal() .asn1("org.apache.camel.dataformat.asn1.model.testsmscbercdr.SmsCdr") .split(body(Iterator.class)).streaming() .to("mock:unmarshaldsl");