【问题标题】:Apache Camel: Quotes will break the URIApache Camel:引号会破坏 URI
【发布时间】:2018-07-10 13:37:11
【问题描述】:

我对简单的 Apache Camel HTTP->Python->HTTP 路由有疑问。

目标是使用 JSON 设置一个接受两个乘法因子的 Camel 路由。格式如下:{"a":5,"b":5}

然后应将传递的 JSON 对象传递给 Python 脚本,在该脚本中计算两个因素的乘积,然后将结果作为 JSON 对象返回。

当我向 Camel 发出 POST 请求并将上述 JSON 传递给正文时,我在 Camel 中收到一条错误消息。

14:33:33.474 [Restlet-698774930] ERROR org.apache.camel.component.exec.ExecProducer - The command ExecCommand [args=[src/main/resources/post.py, RAW({, a, :1,, b, :100})], executable=python, timeout=9223372036854775807, outFile=null, workingDir=null, useStderrOnEmptyStdout=false] returned exit value 1

问题似乎是引号。 这些确保 JSON 对象不被识别为一个参数,而是被拆分为多个参数。

在 Camel 的文档中,您会发现一些关于“RAW()”的内容,在这种情况下它不起作用。

当然,Python 脚本会死掉,因为第二个参数不是 JSON 对象。但是,如果您从命令行手动运行它,它可以毫无问题地工作。这意味着错误不在脚本中,而是在 Camel 的调用中。

package com.sample.simplecalc;

import org.apache.camel.builder.RouteBuilder;

public class MyRouteBuilder extends RouteBuilder {

  public void configure() throws Exception{

    restConfiguration()
    .component("restlet")
    .host("localhost").port("8080")
    .enableCORS(false)
    ;

    rest().path("/api").produces("application/json").consumes("application/json")
    .get()
        .toD("exec:python?args=src/main/resources/get.py")
    .post()
        .toD("exec:python?args=src/main/resources/post.py RAW(${body})");
  }

}

【问题讨论】:

    标签: java json apache-camel


    【解决方案1】:

    您可以尝试将消息正文编组为 JSON,然后再将其传递给脚本。

    .post()
        .marshal().json()
        .toD("exec:python...")
    

    请参阅Camel JSON page 了解选项依赖项等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      相关资源
      最近更新 更多