我使用Java DSL进行了一个非常简单的 Camel ssh路由设置,仅设置了一个pollCommand:date +%s%3N,它应该输出当前时间戳。但是结果是空的。但是,如果命令只是date,则它可以按预期工作。我很确定问题出在+%字符中,但URL编码无济于事:

  • date%20%2B%25s%253N
  • date %2B%25s%253N
  • date +%25s%253N
  • date %2B%s%3N

  • 从上面没有任何工作。

    以下是我正在使用的代码段:
    public static void main(String[] args) throws Exception {
        DefaultCamelContext camelContext = new DefaultCamelContext();
        camelContext.addRoutes(new RouteBuilder(){
            @Override
            public void configure() throws Exception {
                from("ssh://root:pswrd@192.168.12.12:22?delay=1000&pollCommand=date +s3N%0A")
                        .convertBodyTo(String.class, "UTF-8")
                        .log(LoggingLevel.INFO, "${body}");
            }
        });
        camelContext.start();
    }
    

    Camel的版本是 2.19.2

    那么如何从命令的参数部分(+%s%3N)编码/转义特殊字符?

    最佳答案

    除了@Claus Ibsen的以外,找到了另一种解决方案

    date RAW(+%s%3N)
    

    我以为问题出在+标志中。所以我只需要在pollCommand中不要使用它,可以通过以下命令来完成:
    date $(printf "\x2b")%s%3N
    

    08-26 21:20
    查看更多