7.2. unmarshal

有 3 种不同的方法可以集出 ASN.1 结构化消息。(通常是二进制文件)

在第一个示例中,我们向 OutputStream 传播的文件有效负载,并将其发送到模拟端点。

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

在第二个示例中,我们使用 Split EIP 将文件有效负载分到字节阵列。应用 Split EIP 的原因通常是每个 BER 文件或(ASN.1 结构化文件)包含多个记录来处理;Split EIP 有助于我们将文件中的每条记录作为字节阵列(实际上是 ASN1Primitive's ASN)的实例(利用 Bouncy Castle 的 ASN bcprov-jdk15on 库中的 .1 支持者数组,可能会被转换为 ASN1Primitive (ASN1Primitive.fromByteArray)的帮助,例如: 请注意,您需要使用 Iterator=true进行设置

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

在最后一个示例中,我们使用 Split EIP 将文件有效负载分到普通 Java 对象。上例中已提到应用 Split EIP 的原因。请注意,请记住,原因。在本例中,我们还需要通过数据格式设置类或 <YourObject>.class 引用的完全限定名称。这里要注意的一点是,Jasn1 编译器应该已经生成您的对象,它是一个 nice 工具来生成您的 ASN.1 结构的 java 对象表示。有关 jasn1 编译器的参考信息,请参阅 [JASN.1 项目页面](https://www.openmuc.org/asn1/)。另外,还了解如何使用 maven 的 exec 插件调用编译器。例如,在这种数据格式的单元测试中,在 src/test/resources/asn/asn1 中添加了一个示例 ASN.1 结构 (TestSMSBerCdr.asn/java/asn1 编译器。jasn1 编译器会在 ${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");