1

我正在使用带有 Spring DSL 的骆驼 2.10.3。

我正在监视 CSV 文件的目录。每个文件都包含关于去哪里下载东西的信息,以及其他元数据——谁请求它等等。

我使用该文件,现在我想使用 HTTPComponent 下载文件中引用的实体,然后将其保存到磁盘(稍后处理),如下所示:

<route>
  <from uri="file:/incoming"/>
  <unmarshall ref="csv"/>
  <recipientList><simple>${in.body[1]}</simple></recipientList>
  <to uri="file:/attachemnts"/>
  <to ref="furtherProcessing"/>
</route>

我正在使用收件人列表,因为 URL 是基于 CSV 文件内容的动态的。上述方法不起作用,因为 HTTPComponent 尝试将交换的 in.body (这是 CSV 文件内容的值)发送到 HTTP 服务。

我需要稍后处理 CSV 文件中的值,所以我不能把它们吹走。我第一次尝试解决这个问题是将 CSV 文件中的所有值移动到标题中,然后将正文设置为 null,这样 HTTPComponent 就不会抱怨(即使它没有抱怨,我仍然需要以某种方式保留原始CSV 数据)。这可行,但确实使路线混乱,有很多标题,我必须手动复制每个标题。

似乎我需要某种辅助路径来进行下载,我考虑过使用带有自定义聚合策略的多播,然后一个端点是下载,另一个是空操作,但这似乎并不那么干净任何一个。

任何人都对如何干净地做到这一点有任何建议,我觉得我错过了一些非常简单的东西?

4

1 回答 1

3

据我了解您的情况,您在 CSV 文件中有 URL,您需要对这些 URL 执行 HTTP/GET 操作,而请求中没有任何有效负载数据。

我会将消息的正文复制到交换属性中。由于未编组的内容是 a List<List<String>>,因此您可以将其设置为属性,然后稍后从该属性中将其作为一个整体取回。

像这样的东西(我没有真正测试过,所以要注意语法类型操作系统)。

<route>
  <from uri="file:/incoming"/>
  <unmarshall ref="csv"/>
  <setProperty propertyName="originalData">  
     <simple>${body}</simple>  
  </setProperty>
  <setBody>
     <simple>null</simple><!-- will make HTTP use GET method and not send data -->
  </setBody>
  <recipientList><simple>${in.property.originalData[1]}</simple></recipientList>
  <to uri="file:/attachemnts"/>
  <to ref="furtherProcessing"/>
</route>
于 2013-02-22T22:27:59.367 回答