3

I was wondering what is the best solution for doing simple transformation to the body of the message in a given route. The body is going to be CSV and I want to modify some of the fields if some conditions are met. I want to know if there is any built-in functionality that I can use before start writing my own processor.

I have been taking a look to the scripting languages supported by Camel but I have not been able to find a good example. I believe this can be done with Expressions using Groovy or other of the scripting languages, but I need some guidance.

Could anybody help me out?

Thanks!

4

1 回答 1

2

实际上有两个不同的东西。以结构化方式访问(解组/编组)CSV 数据,然后执行实际逻辑来转换数据。

您可以使用CSV数据格式(或flatpack)将 CSV 数据放入 List 列表中,您可以在普通 Java bean 中轻松操作该列表(如果需要,也可以使用 groovy)。然后,您可以获取结果并通过同一组件再次将其转换为 CSV。

如果您有大型 CSV 结构和非常复杂的转换 - 您可能希望将 CSV 文件映射到对象列表而不是字符串列表列表。您可以为输入和输出数据定义类,然后使用Bindy组件将这些类绑定到 CSV 行。然后,在中间您只需要处理映射 java 对象的字段,这相当简单。如果你想深入研究将一个 java 对象映射到另一个的框架,你可以看看Dozer,它非常好(但在大多数情况下过度杀伤)。

正如您所说,您可以使用 groovy 或类似的方法进行实际映射。它应该是相当直截了当的,即使我不知道有多少关于这个话题的例子。

<transform>
  <groovy> response.f1 = request.f2  </groovy>
</transform>

您可以在其中获得对象请求和响应。

另一种方法是使用更大的框架Smooks。它处理许多不同数据格式之间的解析和映射。它不是 Camel 的一部分,但 Smooks 内置了 Camel 支持并且是开源的。如果您只做一些较小的映射,可能会有点矫枉过正,但如果您一遍又一遍地处理复杂的映射场景,这可能是值得的。

于 2013-08-20T05:23:37.280 回答