如何在骆驼蓝图中从正文中删除前 n 个字节?

How to cut the first n bytes from the body in a camel blueprint?

我正在使用 apache camel 路由和转换一些数据,并想剪切正文的前 n 个字节。所以我将通过读取除前 n 个字节之外的流来转换主体。在骆驼蓝图中有没有聪明的方法来做到这一点?

开箱即用不支持此功能。这有点取决于 java 对象类型保存数据,即它是 InputStream 还是 byte[] 或 String 还是其他。

你每次都需要跳过固定数量的字节,还是视情况而定?如果字节数少于数字怎么办?也就是说,你最终会得到更复杂的逻辑,最好编写一些 java 代码来正确处理。

如果你真的必须使用 XML 那么你可以尝试内联 groovy 并使用你可以从蓝图 xml 文件中使用的 Camels groovy 语言。

一位同事给了我很好的提示,我想这就是我要找的答案:

<convertBodyTo type="byte[]"/>
<transform>
    <spel>#{T(java.util.Arrays).copyOfRange(body, n, body.length)}</spel>
</transform>

其中 n 是我要从 ByteArrayOutputStream 的开头剪切的字节数。我认为这是一个解决方案,不是吗?

当然你必须围绕它构建一些检查和异常处理,但它对我有用。