我正在使用<base64>
元素来解组作为XML一部分的base64代码。路线看起来像这样:
<route>
<split streaming="true" strategyRef="myAggregationStaregy">
<xpath>/*/*</xpath>
<choice>
<when>
<xpath>//record</xpath>
<to uri="file:/record.xml" />
</when>
<when>
<xpath>//content</xpath>
<unmarshal>
<base64 />
</unmarshal>
<to uri="file:/content.bin" />
</when>
</choice>
</split>
</route>
虽然XML拆分工作正常,但<unmarshal>
任务会返回垃圾。结果二进制文件实际上是预期的大小,但字节本身是完全错误的。
尝试:
lineSeparator
和lineLength
选项无效。<unmarshal>
块并手动转换生成的base64代码(linux base64
命令)时,我收到了正确的二进制文件。有什么想法吗?
答案 0 :(得分:0)
同时我找到了解决方案:
我期望<xpath>//content</xpath>
语句过滤传入的XML,以便消息体仅包含content
元素内的部分。
但这是错的。这个“xpath”语句是“when”语句的谓词,它根本不进行过滤。
为了实现预期的行为,我必须明确地提取我的XML的“内容”部分并将其写入消息体(使用“setBody”语句)。我的路线最终看起来像这样:
<route>
<split>
<xpath>/*/*</xpath>
<choice>
<when>
<xpath>//record</xpath>
<to uri="file:/record.xml" />
</when>
<when>
<xpath>//content</xpath>
<setBody><xpath>//content/text()</xpath></setBody>
<unmarshal>
<base64 />
</unmarshal>
<to uri="file:/content.bin" />
</when>
</choice>
</split>
</route>