如何在骆驼蓝图中从正文中删除前 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 的开头剪切的字节数。我认为这是一个解决方案,不是吗?
当然你必须围绕它构建一些检查和异常处理,但它对我有用。
我正在使用 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 的开头剪切的字节数。我认为这是一个解决方案,不是吗?
当然你必须围绕它构建一些检查和异常处理,但它对我有用。