7.2. Unmarshal

ASN.1 構造化メッセージを非整列化するには、3 つの異なる方法があります。(通常はバイナリーファイル)

この最初の例では、BER ファイルペイロードを OutputStream にアンマーシャリングし、モックエンドポイントに送信します。

from("direct:unmarshal").unmarshal(asn1).to("mock:unmarshal");

2 番目の例では、Split EIP を使用して BER ファイルペイロードをバイト配列に非整列化します。分割 EIP を適用する理由は、通常、各 BER ファイルまたは (ASN.1 構造化ファイル) には処理する複数のレコードが含まれており、分割 EIP はファイル内の各レコードを実際に ASN1Primitive のインスタンスであるバイト配列として取得するのに役立つためです (bcprov-jdk15on ライブラリーでの Bouncy Castle の ASN.1 サポート) 次に、(ASN1Primitive.fromByteArray) の public static メソッドを使用して、バイト配列を ASN1Primitive に変換できます。このような例では、usingIterator=true を設定する必要があることに注意してください。

from("direct:unmarshal").unmarshal(asn1).split(body(Iterator.class)).streaming().to("mock:unmarshal");

最後の例では、分割 EIP を使用して BER ファイルペイロードをプレーンな古い Java オブジェクトに非整列化します。分割 EIP を適用する理由は、前の例ですでに説明されています。その理由に注意して覚えておいてください。このような例では、クラスの完全修飾名または <YourObject>.class 参照をデータ形式で設定する必要もあります。ここで注意すべき重要なことは、オブジェクトは、ASN.1 構造の Java オブジェクト表現を生成する優れたツールである jasn1 コンパイラーによって生成されている必要があるということです。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 に生成されます。

from("direct:unmarshaldsl")
         .unmarshal()
         .asn1("org.apache.camel.dataformat.asn1.model.testsmscbercdr.SmsCdr")
         .split(body(Iterator.class)).streaming()
.to("mock:unmarshaldsl");