7.3. unmarshal
unmarshal ASN.1 结构化消息有 3 种不同的方法。(通常是二进制文件)
在第一个示例中,我们 unmarshal BER 文件有效负载发送到 OutputStream,并将其发送到模拟端点。
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)中的公共静态方法(ASN1Primitive)转换为 ASN1Primitive。例如, 请注意,您需要使用 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 编译器生成,它是一个 nice 工具,用于生成 ASN.1 结构的 java 对象表示。有关 jasn1 编译器的参考使用情况,请参阅 [JASN.1 Project Page](https://www.openmuc.org/asn1/),并参阅 maven's exec 插件帮助调用编译器。例如,在这个数据格式的单元中,测试一个 ASN.1 结构(TestSMSBerCdr.asn1)在 src/test/resources/asn1_structure
1_structure 中被调用。Jasn1 编译器在 ${basedir}/target/generated/src/test/java
nice thing 中生成了一个 ASN.1 结构(TestSMSBerCdrn1_structure。jasn1 编译器被调用,并在 ${basedir}/target/generated/src/test/java nice thing 中生成了 POJO。
from("direct:unmarshaldsl") .unmarshal() .asn1("org.apache.camel.dataformat.asn1.model.testsmscbercdr.SmsCdr") .split(body(Iterator.class)).streaming() .to("mock:unmarshaldsl");