【问题标题】:how to pass a + sign in camel exec uri如何在camel exec uri中传递+号
【发布时间】:2018-04-19 03:32:58
【问题描述】:

我正在使用带有 spring xml 的 Camel。当我尝试通过骆驼的 exec-component 调用 find 时,会出现一些问题来正确获取参数。

我想调用'find /somepath/ -mtime +10'

我的骆驼路线有这个到元素。

<to uri="exec:find?args=/somepath/ -mtime +30 -delete" />

在日志中我得到了

2017-11-06 20:12:00,172 INFO  [org.apache.camel.component.exec.ExecProducer] (DefaultQuartzScheduler-noderoutes_Worker-10) The command ExecCommand [args=[/tmp/integrator/msglog/, -mtime,  **30**, -print], executable=find, timeout=9223372036854775807, outFile=null, workingDir=null, useStderrOnEmptyStdout=true] had exit value 0

我们可以看到 + 号被删除并且 find 命令将由于缺少 + 而失败。 我尝试了不同的方法来逃避或编码 + 但没有成功。任何人都知道保护 +sign 的方法吗?

【问题讨论】:

  • 您尝试了哪些方式对+ 字符进行编码? &amp;#43; 理论上应该可以工作。
  • 我尝试用 %2B 和 B 编码,都消失了。

标签: apache-camel spring-camel


【解决方案1】:

看看RAW()

<to uri="exec:find?args=RAW(/somepath/ -mtime +30 -delete)" />

【讨论】:

  • 在 RAW 中包装完整的参数只是让我得到了一些额外的“+”,因为 RAW 似乎在某种转义中用 + 替换了空间。在将所有参数包装在 RAW 中后,我在日志中得到了这个。 2017-11-07 13:02:00,350 错误 [org.apache.camel.component.exec.ExecProducer] (DefaultQuartzScheduler-noderoutes_Worker-6) 命令 ExecCommand [args=[RAW(/tmp/integrator/msglog/+-mtime ++10+-print], executable=find, timeout=9223372036854775807, outFile=null, workingDir=null, useStderrOnEmptyStdout=false] 返回退出值 1
【解决方案2】:

在我尝试转义 + 并在 RAW 中包装所有 args 或部分 args 之后,我引入了另一层。我把调用放在一个脚本中,只将路径和天数作为 exec 的参数。

<to uri="exec:/somepath/script.sh?args=/startpath/ 30" />

我猜在将命令行放入操作系统之前,只需要进行多层编码/解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多