7.3. unmarshal
unmarshal ASN.1 结构化消息的三种不同方式:(通常为二进制文件)
在本示例中,我们 unmarshal BER 文件有效负载到 OutputStream 并将其发送到 mock 端点。
from("direct:unmarshal").unmarshal(asn1).to("mock:unmarshal");
在第二个示例中,我们使用 Split EIP 将 unmarshal BER 文件有效负载字节阵列。应用 Split EIP 的原因是,每个 BER 文件或(ASN.1 结构化文件)通常包含多个记录来处理和 Split EIP 有助于我们获得文件中的每个记录作为字节阵列,实际是 ASN1Primitive 的实例(通过对 Bouncy Castle 的 ASN.1 支持)。bcprov-jdk18on 库)由 中的公共静态方法(ASN1Primitive.fromByteArray)在本例中转换为 ASN1Primitive.fromByteArray)请注意 ,您需要使用Iterator
=true 设置
from("direct:unmarshal").unmarshal(asn1).split(body(Iterator.class)).streaming().to("mock:unmarshal");
在最后一个示例中,我们使用 Split EIP 将 unmarshal BER 文件有效负载为纯旧的 Java 对象。上例中已经提到了应用 Split EIP 的原因。请注意,请注意原因。在本例中,我们还需要设置类的完全限定名称,或 <YourObject>.class 通过数据格式引用。这里需要注意的重要事项是,您的对象应由 jasn1 编译器生成,它是一个可生成 ASN.1 结构的 java 对象表示的工具。有关使用 jasn1 编译器的参考信息,请参阅 [JASN.1 Project Page](https://www.openmuc.org/asn1/),并查看如何使用 maven 的 exec 插件调用编译器。例如,在这个数据格式的单元中测试了一个示例 ASN.1 结构(TestSMSBerCdr.asn1),在 src/test/resources/asn1_structure
. jasn1 编译器被调用,并在 ${basedir}/target/generated/src/test/java
The nice things 中生成 java 对象的表示。
from("direct:unmarshaldsl") .unmarshal() .asn1("org.apache.camel.dataformat.asn1.model.testsmscbercdr.SmsCdr") .split(body(Iterator.class)).streaming() .to("mock:unmarshaldsl");